I have written a SRGAN implementation. In the entry point class of the Python program, I declare a function which returns a mean square using the VGG19 model:
# <!--- COST FUNCTION --->
def build_vgg19_loss_network(ground_truth_image, predicted_image):
loss_model = Vgg19Loss.define_loss_model(high_resolution_shape)
return mean(square(loss_model(ground_truth_image) - loss_model(predicted_image)))
import keras.losses
keras.losses.build_vgg19_loss_network = build_vgg19_loss_network
# <!--- /COST FUNCTION --->
(Vgg19Loss
class shown further below)
As you can see, I have added this custom loss function in the import keras.losses
. Why? Because I thought it could solve the following problem...: When I execute the command tflite_convert --output_file=srgan.tflite --keras_model_file=srgan.h5
, the Python interpreter raises this error:
raise ValueError('Unknown ' + printable_module_name + ':' + object_name) ValueError: Unknown loss function:build_vgg19_loss_network
However, it didn't solve the problem. Any other solution which could work?
Here is the Vgg19Loss
class:
from keras import Model
from keras.applications import VGG19
class Vgg19Loss:
def __init__(self):
pass
@staticmethod
def define_loss_model(high_resolution_shape):
model_vgg19 = VGG19(False, 'imagenet', input_shape=high_resolution_shape)
model_vgg19.trainable = False
for l in model_vgg19.layers:
l.trainable = False
loss_model = Model(model_vgg19.input, model_vgg19.get_layer('block5_conv4').output)
loss_model.trainable = False
return loss_model