def __init__(self, generator, discriminator, content_loss='VGG54', learning_rate=PiecewiseConstantDecay(boundaries=[100000], values=[1e-4, 1e-5])): if content_loss == 'VGG22': self.vgg = srgan.vgg_22() elif content_loss == 'VGG54': self.vgg = srgan.vgg_54() else: raise ValueError("content_loss must be either 'VGG22' or 'VGG54'") self.content_loss = content_loss self.generator = generator self.discriminator = discriminator self.generator_optimizer = Adam(learning_rate=learning_rate) self.discriminator_optimizer = Adam(learning_rate=learning_rate) self.binary_cross_entropy = BinaryCrossentropy(from_logits=False) self.mean_squared_error = MeanSquaredError() log_param("Model", "Pre-trained SRGAN") log_param("Learning rate", learning_rate) log_param("Content loss", content_loss)
def content_loss(hr, sr): vgg = srgan.vgg_54() sr = preprocess_input(sr) hr = preprocess_input(hr) sr_features = vgg(sr) hr_features = vgg(hr) return mean_squared_error(hr_features, sr_features)
def __init__(self, generator, discriminator, content_loss='VGG54', learning_rate=PiecewiseConstantDecay(boundaries=[100000], values=[1e-4, 1e-5])): if content_loss == 'VGG22': self.vgg = srgan.vgg_22() elif content_loss == 'VGG54': self.vgg = srgan.vgg_54() else: raise ValueError("content_loss must be either 'VGG22' or 'VGG54'") self.content_loss = content_loss self.teacher = generator self.teacher.load_model_from_file('weights/srgan/gan_generator.h5') self.student = generator(num_res_blocks=6) self.discriminator = discriminator self.generator_optimizer = Adam(learning_rate=learning_rate) self.discriminator_optimizer = Adam(learning_rate=learning_rate) self.binary_cross_entropy = BinaryCrossentropy(from_logits=False) self.mean_squared_error = MeanSquaredError()