code: def build_generator(self, optimizer, loss_function):
      model = NeuralNetwork(optimizer=optimizer, loss=loss_function)
  
      model.add(Dense(128 * 7 * 7, input_shape=(100,)))
      model.add(Activation("leaky_relu"))
      model.add(Reshape((128, 7, 7)))
      model.add(BatchNormalization(momentum=0.8))
      model.add(UpSampling2D())
      model.add(Conv2D(128, filter_shape=(3, 3), padding="same"))
      model.add(Activation("leaky_relu"))
      model.add(BatchNormalization(momentum=0.8))
      model.add(UpSampling2D())
      model.add(Conv2D(64, filter_shape=(3, 3), padding="same"))
      model.add(Activation("leaky_relu"))
      model.add(BatchNormalization(momentum=0.8))
      model.add(Conv2D(1, filter_shape=(3, 3), padding="same"))
      model.add(Activation("tanh"))
  
      return model
  
file_path: ML-From-Scratch/mlfromscratch/unsupervised_learning/dcgan.py
imports: from __future__ import print_function, division
  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
  from mlfromscratch.deep_learning.layers import Dense, Dropout, Flatten, Activation, Reshape, BatchNormalization, ZeroPadding2D, Conv2D, UpSampling2D
  from mlfromscratch.deep_learning import NeuralNetwork
label_desc: Use image node_id 2 for calling the DCGAN obj's underlying member method code with example usage: obj.build_generator(optimizer, loss_function) and returns: model