在Keras中,如果需要使用带有额外参数的自定义损失函数,可以按照https://datascience.stackexchange.com/questions/25029/custom-loss-function-with-additional-parameter-in-keras上所述进行。
def penalized_loss(noise):
def loss(y_true, y_pred):
return K.mean(K.square(y_pred - y_true) - K.square(y_true - noise), axis=-1)
return loss
当我训练模型时,上述方法是有效的。然而,一旦模型被训练,我在加载模型时遇到了困难。当我尝试在 load_model 中使用 custom_objects 参数时,如下所示:
model = load_model(modelFile, custom_objects={'penalized_loss': penalized_loss} )
它抱怨 ValueError: 未知的损失函数:loss
是否有办法将损失函数作为custom_objects
中的自定义损失之一传递?据我所知,在load_model调用期间,内部函数不在名称空间中。是否有更简单的方法来加载模型或使用带有额外参数的自定义损失?
custom_objects
中的键匹配。为避免错误,我执行loss=penalized_loss(noise); custom_objects={loss.__name__: loss}
。 - F Lekschas