class_docstr: An Autoencoder with deep fully-connected neural nets.
  
  Training Data: MNIST Handwritten Digits (28x28 images)
class_docstr_tok: ["An","Autoencoder","with","deep","fully-connected","neural","nets",".","Training","Data",":","MNIST","Handwritten","Digits","(","28x28","images",")"]
code: def __init__(self):
      self.img_rows = 28
      self.img_cols = 28
      self.img_dim = self.img_rows * self.img_cols
      self.latent_dim = 128  # The dimension of the data embedding
  
      optimizer = Adam(learning_rate=0.0002, b1=0.5)
      loss_function = SquareLoss
  
      self.encoder = self.build_encoder(optimizer, loss_function)
      self.decoder = self.build_decoder(optimizer, loss_function)
  
      self.autoencoder = NeuralNetwork(
          optimizer=optimizer, loss=loss_function
      )
      self.autoencoder.layers.extend(self.encoder.layers)
      self.autoencoder.layers.extend(self.decoder.layers)
  
      print()
      self.autoencoder.summary(name="Variational Autoencoder")
  
file_path: ML-From-Scratch/mlfromscratch/unsupervised_learning/autoencoder.py
imports: from __future__ import print_function, division
  from sklearn import datasets
  import math
  import matplotlib.pyplot
  import numpy
  import progressbar
  from sklearn.datasets import fetch_mldata
  from mlfromscratch.deep_learning.optimizers import Adam
  from mlfromscratch.deep_learning.loss_functions import CrossEntropy, SquareLoss
  from mlfromscratch.deep_learning.layers import Dense, Dropout, Flatten, Activation, Reshape, BatchNormalization
  from mlfromscratch.deep_learning import NeuralNetwork
label_desc: Use image node_id 1 to create a new Autoencoder object  with example: obj = Autoencoder()