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

CNN模型保存加载疑问:Model.checkpoint与model.save选择及evolution保存问题

CNN模型保存与加载的选择建议

一、ModelCheckpoint 和 model.save() 的核心差异

  • ModelCheckpoint 是训练阶段的回调工具,作用是在训练过程中定期保存权重或完整模型,主要用于防止训练中断丢失进度,或是保存验证集性能最优的模型版本。它不能主动触发,必须配合fit()方法在训练的指定环节自动执行。
  • model.save() 是主动调用的方法,适合在训练完成后(或任意需要的时机)一次性保存完整模型,包含模型架构、权重、优化器状态、损失函数等核心组件,是用于后续预测部署的常规选择。

二、关于model.evolution的保存问题

如果model.evolution是你自定义的模型属性(比如记录训练过程的日志、参数变化轨迹等),默认情况下:

  • model.save() 和 ModelCheckpoint 都只会保存Keras模型的标准内置组件,不会自动保存自定义属性。
  • 解决方法:需要将model.evolution单独序列化保存(比如用pickle写入文件),加载模型后再将序列化内容重新赋值给加载后的模型实例。

三、针对你的预测场景的选择建议

你的需求是保存后在不同环境加载用于预测,优先推荐model.save():

  • 操作直接:训练完成后调用一次model.save("your_cnn_model.h5")(或SavedModel格式),即可保存完整的可预测模型。
  • 加载简便:用keras.models.load_model("your_cnn_model.h5")直接加载,加载后的模型可直接调用predict(),无需额外配置。
  • 如果需要保留训练过程中的中间状态(比如后续要继续训练),可以同时用ModelCheckpoint保存权重,但仅用于预测的最终模型,model.save()完全足够。

四、实用代码示例

保存完整模型(含自定义属性处理)

import pickle
from tensorflow import keras

# 假设已完成CNN模型训练
model = ... # 你的CNN模型实例
model.evolution = {"train_loss": [...], "val_acc": [...]} # 自定义属性

# 保存完整模型
model.save("cnn_predict_model.h5")

# 单独保存自定义的evolution属性
with open("model_evolution.pkl", "wb") as f:
    pickle.dump(model.evolution, f)

加载模型并恢复自定义属性

from tensorflow import keras
import pickle

# 加载模型
loaded_model = keras.models.load_model("cnn_predict_model.h5")

# 加载并恢复evolution属性
with open("model_evolution.pkl", "rb") as f:
    loaded_model.evolution = pickle.load(f)

# 执行预测
predictions = loaded_model.predict(test_data)

内容的提问来源于stack exchange,提问作者Gülsüm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:20:21