I want to write a custom loss function that uses the intermediate result of a trained discriminator. the loss function compares images. the loss function is for recovering the latent vector of an image from a gan. im relatively new to this.
im using a reference code to test it out. https://github.com/utkd/gans/blob/master/cifar10dcgan.ipynb for full reference code im using
below is an example https://m.youtube.com/watch?v=dCKbRCUyop8 Watch at 17:30
below is the discriminator code
def get_discriminator(input_layer):
'''
Requires the input layer as input, outputs the model and the final layer
'''
hid = Conv2D(128, kernel_size=3, strides=1, padding='same')(input_layer)
hid = BatchNormalization(momentum=0.9)(hid)
hid = LeakyReLU(alpha=0.1)(hid)
hid = Conv2D(128, kernel_size=4, strides=2, padding='same')(hid)
hid = BatchNormalization(momentum=0.9)(hid)
hid = LeakyReLU(alpha=0.1)(hid)
hid = Conv2D(128, kernel_size=4, strides=2, padding='same')(hid)
hid = BatchNormalization(momentum=0.9)(hid)
hid = LeakyReLU(alpha=0.1)(hid)
for my loss function i want to use the intermediate result from the layer above
hid = Conv2D(128, kernel_size=4, strides=2, padding='same')(hid)
hid = BatchNormalization(momentum=0.9)(hid)
hid = LeakyReLU(alpha=0.1)(hid)
hid = Flatten()(hid)
hid = Dropout(0.4)(hid)
out = Dense(1, activation='sigmoid')(hid)
model = Model(input_layer, out)
model.summary()
return model, out
below is the code im planning to use
zp = tf.Variable(np.random.normal(size=(1,l_size)), dtype=tf.float32)
start_img = Image.open(folder + "foo_00.png")
start_img.resize((img_x, img_y), Image.ANTIALIAS)
start_img_np = np.array(start_img)/255
fz = tf.Variable(start_img_np, tf.float32)
fz = tf.expand_dims(fz, 0)
fz = tf.cast(fz,tf.float32)
# variable 'generator' = trained model that is loaded.
# Define the optimization problem
fzp = generator(zp)
loss = tf.losses.mean_squared_error(labels=fz, predictions=fzp)
here is where i want it to go something like
fzpD= discriminator_intermediate(fpz)
fzD= discriminator_intermediate(fz)
loss = tf.losses.mean_squared_error(labels=fzD, predictions=fzpD)
```