code: def deep_discriminator(x,
                         batch_norm,
                         is_training,
                         filters=64,
                         filter_size=4,
                         stride=2,
                         output_size=1024):
    
    with tf.variable_scope(
        "discriminator", initializer=tf.random_normal_initializer(stddev=0.02)):
      batch_size, height, width = shape_list(x)[:3]  # pylint: disable=unbalanced-tuple-unpacking
      net = layers().Conv2D(
          filters, filter_size, strides=stride, padding="SAME", name="conv1")(x)
      net = lrelu(net)
      net = layers().Conv2D(
          2 * filters,
          filter_size,
          strides=stride,
          padding="SAME",
          name="conv2")(net)
      # [bs, h/4, w/4, 128]
      if batch_norm:
        net = layers().BatchNormalization(
            training=is_training, momentum=0.999, name="d_bn2")(net)
      net = lrelu(net)
      size = height * width
      x_shape = x.get_shape().as_list()
      if x_shape[1] is None or x_shape[2] is None:
        net = tf.reduce_mean(net, axis=[1, 2])
      else:
        net = tf.reshape(net, [batch_size, size * 8])
      net = layers().Dense(output_size, name="d_fc3")(net)
      if batch_norm:
        net = layers().BatchNormalization(
            training=is_training, momentum=0.999, name="d_bn3")(net)
      net = lrelu(net)
      return net
docs: Discriminator architecture based on InfoGAN.