我有一个VAE模型,已分解为编码器和解码器部分,并实现了自定义损失。一个简化的例子如下
input = Input(shape=(self.image_height, self.image_width, self.image_channel))
encoded = build_encoder(input)
decoded = build_decoder(encoded)
model = Model(input, decoded)
损失(简化)为
loss = K.mean(decoded[0] + decoded[1] + encoded[0]**2)
model.add_loss(loss)
model.compile(optimizer=self.optimizer)
我的主要问题是我想使用Keras的modelcheckpoint函数,然后需要我设置自定义指标。但是,我在网上看到的所有内容都与https://keras.io/metrics/#custom_metrics类似。这仅接受y_true和y_pred,并从那里修改验证损失。我将如何在示例模型中实现该模型,在该模型中,损失是根据多个输入计算的,而不仅仅是“解码”的最终输出?
答案 0 :(得分:0)
显然,您仍然可以使用变量(keras层),而无需将其传递到自定义损失函数中。
因此,在我的示例中,损失可以计算为
def custom_loss(y_true, y_pred):
return K.mean(decoded[0] + decoded[1] + encoded[0]**2)
model.compile(optimizer=self.optimizer, loss=custom_loss)
从不使用y_true和y_pred,但是仍然可以调用实际所需的输入(只要它们与自定义损失函数的作用域相同)即可。