Keras使用自定义损失函数报Unknown loss function错误如何解决
问题解决方案
这个报错的核心原因对应两个常见场景:
- 编译模型时错误地将自定义损失函数名以字符串形式传入,Keras的内置损失映射表找不到对应自定义函数
- 加载已保存的包含自定义损失的模型时,没有传入自定义对象映射
场景1:首次训练编译模型的修复方法
直接把model.compile步骤里的loss参数从字符串改为你定义的函数对象即可,不需要传字符串,修改后的编译代码如下:
model.compile(optimizer='rmsprop', loss=custom_loss_function, metrics=['mae'])
场景2:加载已保存的包含自定义损失的模型时的custom_objects传参方法
如果你是训练完成后保存了模型,后续重新加载模型用于推理/继续训练,需要在加载时通过custom_objects参数传入自定义损失的映射关系,映射的key是你保存模型时损失函数的名称字符串,value是你定义的损失函数对象,示例代码如下:
from keras.models import load_model # 加载模型时传入自定义对象映射 model = load_model('你保存的模型路径.h5', custom_objects={'custom_loss_function': custom_loss_function})
额外提醒
你当前写的自定义损失函数存在两个问题:
- 循环逻辑中变量
n没有定义,运行时会触发NameError - 循环里每次都会覆盖
l的取值,循环逻辑完全无效,当前损失等价于内置的MAE损失,可直接使用loss='mae'替代自定义函数
内容的提问来源于stack exchange,提问作者Zai
相关产品推荐
相关产品推荐

