使用自定义损失 keras 加载模型

新手上路,请多包涵

在 Keras 中,如果您需要使用附加参数进行自定义损失,我们可以像 https://datascience.stackexchange.com/questions/25029/custom-loss-function-with-additional-parameter-in- 中提到的那样使用它 喀拉斯

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: Unknown loss function:loss

有没有办法将损失函数作为 custom_objects 中的自定义损失之一传递?据我所知,内部函数在 load_model 调用期间不在命名空间中。有没有更简单的方法来加载模型或使用带有附加参数的自定义损失

原文由 Jason 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

就在这里! custom_objects 需要您用作损失函数的确切函数(在您的情况下是内部函数):

 model = load_model(modelFile, custom_objects={ 'loss': penalized_loss(noise) })

不幸的是,keras 不会在模型中存储噪声值,因此您需要手动将其提供给 load_model 函数。

原文由 rickyalbert 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您加载模型只是为了预测(而不是训练),您可以将编译标志设置为 Falseload_model 中,如下所示:

 model = load_model(model_path, compile=False)

这不会搜索损失函数,因为它只在编译模型时需要。

原文由 AZiZA Saber 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题