class_docstr: Defines a PatchGAN discriminator as in Pix2Pix
  --> see https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/blob/master/models/networks.py
docstr: Construct a PatchGAN discriminator
  Parameters:
      input_nc (int)  -- the number of channels in input images
      ndf (int)       -- the number of filters in the last conv layer
      n_layers (int)  -- the number of conv layers in the discriminator
      norm_layer      -- normalization layer
docstr_tok: ["Construct","a","PatchGAN","discriminator","Parameters",":","input_nc","(","int",")","--","the","number","of","channels","in","input","images","ndf","(","int",")","--","the","number","of","filters","in","the","last","conv","layer","n_layers","(","int",")","--","the","number","of","conv","layers","in","the","discriminator","norm_layer","--","normalization","layer"]
code: def __init__(self, input_nc=3, ndf=64, n_layers=3, use_actnorm=False):
      """Construct a PatchGAN discriminator
      Parameters:
          input_nc (int)  -- the number of channels in input images
          ndf (int)       -- the number of filters in the last conv layer
          n_layers (int)  -- the number of conv layers in the discriminator
          norm_layer      -- normalization layer
      """
      super(NLayerDiscriminator, self).__init__()
      if not use_actnorm:
          norm_layer = nn.BatchNorm2d
      else:
          norm_layer = ActNorm
      if (
          type(norm_layer) == functools.partial
      ):  # no need to use bias as BatchNorm2d has affine parameters
          use_bias = norm_layer.func != nn.BatchNorm2d
      else:
          use_bias = norm_layer != nn.BatchNorm2d
  
      kw = 4
      padw = 1
      sequence = [
          nn.Conv2d(
              input_nc, ndf, kernel_size=kw, stride=2, padding=padw
          ),
          nn.LeakyReLU(0.2, True),
      ]
      nf_mult = 1
      nf_mult_prev = 1
      for n in range(
          1, n_layers
      ):  # gradually increase the number of filters
          nf_mult_prev = nf_mult
          nf_mult = min(2**n, 8)
          sequence += [
              nn.Conv2d(
                  ndf * nf_mult_prev,
                  ndf * nf_mult,
                  kernel_size=kw,
                  stride=2,
                  padding=padw,
                  bias=use_bias,
              ),
              norm_layer(ndf * nf_mult),
              nn.LeakyReLU(0.2, True),
          ]
  
      nf_mult_prev = nf_mult
      nf_mult = min(2**n_layers, 8)
      sequence += [
          nn.Conv2d(
              ndf * nf_mult_prev,
              ndf * nf_mult,
              kernel_size=kw,
              stride=1,
              padding=padw,
              bias=use_bias,
          ),
          norm_layer(ndf * nf_mult),
          nn.LeakyReLU(0.2, True),
      ]
  
      sequence += [
          nn.Conv2d(
              ndf * nf_mult, 1, kernel_size=kw, stride=1, padding=padw
          )
      ]  # output 1 channel prediction map
      self.main = nn.Sequential(*sequence)
  
imports: import functools
  import torch.nn
  from ..util import ActNorm
label_desc: Use image node_id 1 to create a new NLayerDiscriminator object from inherited base classes: nn with example: obj = NLayerDiscriminator(input_nc, ndf, n_layers, use_actnorm)