code: def build_discriminator(self, optimizer, loss_function):
      model = NeuralNetwork(optimizer=optimizer, loss=loss_function)
  
      model.add(
          Conv2D(
              32,
              filter_shape=(3, 3),
              stride=2,
              input_shape=self.img_shape,
              padding="same",
          )
      )
      model.add(Activation("leaky_relu"))
      model.add(Dropout(0.25))
      model.add(
          Conv2D(64, filter_shape=(3, 3), stride=2, padding="same")
      )
      model.add(ZeroPadding2D(padding=((0, 1), (0, 1))))
      model.add(Activation("leaky_relu"))
      model.add(Dropout(0.25))
      model.add(BatchNormalization(momentum=0.8))
      model.add(
          Conv2D(128, filter_shape=(3, 3), stride=2, padding="same")
      )
      model.add(Activation("leaky_relu"))
      model.add(Dropout(0.25))
      model.add(BatchNormalization(momentum=0.8))
      model.add(
          Conv2D(256, filter_shape=(3, 3), stride=1, padding="same")
      )
      model.add(Activation("leaky_relu"))
      model.add(Dropout(0.25))
      model.add(Flatten())
      model.add(Dense(2))
      model.add(Activation("softmax"))
  
      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 3 for calling the DCGAN obj's underlying member method code with example usage: obj.build_discriminator(optimizer, loss_function) and returns: model