Issue title: Autoencoders
 Issue body: Making a note to explore a high level wrapper for variational autoencoders to generate images / other content.
 Comments: 
 Comment 0: Derek @Derek-Wds and I have done some work about the autoencoders before with PyTorch. We can help with building up such a wrapper.
 Comment 1: ### Question
If we are going to work on this project, what kind of images are expected? Will the simple MNIST dataset be OK or there are other options that we can focus on?
 Comment 2: @Derek-Wds A reference point for how we might do this (for images) is `ml5.styleTransfer()`. In that case we offer a few pre-trained models, but ultimately it's more interesting if people train their own model. We've been trying to move away from MNIST in ml5 in terms of getting people to think creatively about their datasets, however, as a first try, creating an ml5 autoencoder class that generates MNIST-style digits would be a great starting point. The Google Quick, Draw dataset is also a nice alternative to MNIST.
 Comment 3: Great! @WenheLI and I may start soon to work on it.
 Comment 4: @shiffman We have managed to wrap a cvae(conditional vae) model into tensorflow.js using MNIST. You can try through this [link](http://cvae.steins.live). While we think this model requires some discussions on API design before we move forward.

Since cvae requires a vector with 2+n length as input where n is the number of categories and the first two number is to describe a distribution in cvae, it makes the potential ``predict()`` function be much more complex.  
 Comment 5: Closing this issue up now as this has been resolved by the addition of the CVAE functionality. We may consider adding in an example of how to create an autoencoder using the ml5.neuralNetwork's custom layer functionality, but that can be a separate issue.
{'source': 'GithubIssues', 'repo_name_with_owner': 'ml5js/ml5-library', 'issue_id': 322333926, 'repo_stars': 5620.0}