class_docstr: A Generative Adversarial Network with deep fully-connected neural nets as
  Generator and Discriminator.
  
  Training Data: MNIST Handwritten Digits (28x28 images)
class_docstr_tok: ["A","Generative","Adversarial","Network","with","deep","fully-connected","neural","nets","as","Generator","and","Discriminator",".","Training","Data",":","MNIST","Handwritten","Digits","(","28x28","images",")"]
code: def build_discriminator(self, optimizer, loss_function):
      model = NeuralNetwork(optimizer=optimizer, loss=loss_function)
  
      model.add(Dense(512, input_shape=(self.img_dim,)))
      model.add(Activation("leaky_relu"))
      model.add(Dropout(0.5))
      model.add(Dense(256))
      model.add(Activation("leaky_relu"))
      model.add(Dropout(0.5))
      model.add(Dense(2))
      model.add(Activation("softmax"))
  
      return model
  
file_path: ML-From-Scratch/mlfromscratch/unsupervised_learning/generative_adversarial_network.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
  from mlfromscratch.deep_learning.layers import Dense, Dropout, Flatten, Activation, Reshape, BatchNormalization
  from mlfromscratch.deep_learning import NeuralNetwork
label_desc: Use image node_id 3 for calling the GAN obj's underlying member method code with example usage: obj.build_discriminator(optimizer, loss_function) and returns: model