You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何加载使用了自定义损失函数的Keras history pickle保存对象

报错原因

Keras的History对象内部绑定了训练关联的模型元信息,其中包含自定义损失函数的引用。pickle反序列化时需要匹配到对应名称的函数实现才能完成对象重建,找不到对应的custom_loss就会触发该报错。

解决方案

方案1(最推荐,适配所有场景,无后续依赖问题)

如果仅需要训练过程的指标数据(损失、准确率等),保存时直接序列化history.history字典即可,该字典是纯Python原生数据结构,没有绑定任何Keras模型依赖:

# 保存侧代码
with open('history.pkl', 'wb') as file:  
    pickle.dump(history.history, file)

# 读取侧代码,无需任何额外配置即可正常加载
with open('history.pkl', 'rb') as file:
    history_dict = pickle.load(file)

读取到的history_dict包含所有你需要的训练、验证指标数值,和原history.history的使用方式完全一致。

方案2(适配已序列化完整History对象的场景)

如果已经保存了完整的History对象,需要读取时按以下步骤操作:

  1. 先在当前运行环境中声明你原本实现的custom_loss函数(如果不需要实际调用损失函数逻辑,仅做占位也可以,只要函数名匹配即可)
  2. 用Keras的自定义对象上下文管理器包裹加载逻辑:
from keras.utils import CustomObjectScope

# 原custom_loss实现,或同名占位函数
def custom_loss(y_true, y_pred):
    # 此处替换为你原本的损失函数逻辑,仅占位的话可以随便返回一个合法值
    return y_true - y_pred

with CustomObjectScope({'custom_loss': custom_loss}):
    with open('history.pkl', 'rb') as file:
        history = pickle.load(file)

加载完成后可以正常访问history.history获取训练指标。

内容的提问来源于stack exchange,提问作者idpd15

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:15:05