如何使用自定义损失函数加载 Keras 模型?

Posted

技术标签:

【中文标题】如何使用自定义损失函数加载 Keras 模型?【英文标题】:How to load a Keras model with a custom loss function? 【发布时间】:2020-06-21 21:13:10 【问题描述】:

我创建了以下自定义损失函数:

RMSE = function(y_true,y_pred) 
         k_sqrt(k_mean(k_square(y_pred - y_true))) 
    

当我保存模型时它工作正常。但是,当我使用以下方法加载模型时:

load_model_hdf5(filepath= "modelpath") 

我收到以下错误:

#Error in py_call_impl(callable, dots$args, dots$keywords):
#      valueError: Unknown loss function:RMSE

也许这个问题与我之前提出的one 有一些共同点。我应该怎么做才能停止收到此错误?

【问题讨论】:

尝试使用 load_model_hdf5(filepath= "modelpath", compile=False)。你得到了什么?您能否也包括模型的其余部分? 【参考方案1】:

由于您在模型中使用了 自定义 损失函数,因此在将模型保存在磁盘上时不会保存损失函数,而只会将其名称包含在模型文件中。然后,当您想稍后加载模型时,您需要通知模型存储名称对应的损失函数。要提供该映射,您可以使用 load_model_hdf5 函数的 custom_objects 参数:

load_model_hdf5(filepath = "modelpath", custom_objects = list(RMSE = RMSE))

或者,在训练完成后,如果您只想使用模型进行预测,您可以将compile = False 参数传递给load_model_hdf5 函数(因此,不需要和加载损失函数):

load_model_hdf5(filepath = "modelpath", compile = False)

【讨论】:

以上是关于如何使用自定义损失函数加载 Keras 模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 keras 模型使用 tensorflow 自定义损失?

如何在 Keras 自定义损失函数中使用张量?

根据输入加载具有自定义损失的 keras 模型

GPU 上的 Keras 模型:在自定义损失函数中使用 Pandas

如何在 Keras 中创建这个自定义损失函数并确保它是可微的?

在 keras 中制作自定义损失函数