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

如何用TensorFlow保存CNN模型最优验证精度的Checkpoint并测试?

我太懂你这种困扰了——训练CNN时验证精度波动真的很常见,明明前面某轮的精度更高,结果最后一轮反而掉下来了。别担心,咱们用回调函数就能轻松搞定「保存最优epoch模型+用它测试」的需求,下面分步骤给你说清楚:

解决CNN模型保存最优Checkpoint并用于测试的方案

一、训练阶段:用回调自动保存最优模型

不管你用Keras还是PyTorch,核心思路都是在训练时跟踪验证集的精度(或损失),只保存表现最好的那一轮模型权重。这里先以最常用的Keras为例:

Keras实现代码

from tensorflow.keras.callbacks import ModelCheckpoint

# 定义Checkpoint回调:只存验证精度最高的模型
checkpoint = ModelCheckpoint(
    filepath='best_cnn_model.keras',  # 模型保存路径+文件名
    monitor='val_accuracy',           # 监控的核心指标:验证集精度
    mode='max',                       # 因为精度越高越好,选max模式
    save_best_only=True,              # 只保留最优模型,避免占空间
    verbose=1                         # 每次保存时打印提示信息
)

# 把回调传入训练流程
model.fit(
    train_data,
    validation_data=val_data,
    epochs=你的总轮数,
    callbacks=[checkpoint]
)

简单解释下关键参数:

  • monitor='val_accuracy':让回调盯着验证集的精度变化
  • mode='max':只有当验证精度刷新历史最高时,才会覆盖保存模型
  • save_best_only=True:不会保存每一轮的模型,只留最优的那个,省磁盘空间

如果用的是PyTorch,逻辑是一样的,只是需要手动在训练循环里判断:

import torch

best_val_acc = 0.0
for epoch in range(总轮数):
    # 训练步骤(省略)
    # 计算当前轮的验证精度
    val_acc = calculate_val_accuracy(model, val_data)
    
    # 如果当前精度比历史最优高,就保存模型
    if val_acc > best_val_acc:
        best_val_acc = val_acc
        torch.save(model.state_dict(), 'best_cnn_model.pth')
        print(f"已保存最优模型,验证精度: {val_acc:.2%}")

二、测试阶段:加载最优模型并预测

训练结束后,你保存的best_cnn_model.keras(或.pth)就是验证集精度最高的那一轮模型,直接加载它跑测试集就行:

Keras加载测试代码

from tensorflow.keras.models import load_model

# 加载最优模型
best_model = load_model('best_cnn_model.keras')

# 在测试集上做预测
test_predictions = best_model.predict(test_data)

# 如果要计算测试集的精度,直接用evaluate
test_loss, test_acc = best_model.evaluate(test_data)
print(f"测试集最终精度: {test_acc:.2%}")

PyTorch加载测试代码

import torch

# 先初始化模型结构(和训练时的模型结构一致)
model = 你的CNN模型类()
# 加载最优权重
model.load_state_dict(torch.load('best_cnn_model.pth'))
# 切换到评估模式
model.eval()

# 测试集预测(省略具体数据加载和推理步骤)
with torch.no_grad():
    # 推理逻辑...

额外小提醒

  • 除了验证精度,你也可以选择监控验证损失(val_loss),这时候mode要改成min(因为损失越低越好),根据你的任务需求选就行
  • 如果训练时精度波动特别大,可以考虑调整学习率、增加数据增强,或者给模型加正则化,从根源上减少波动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:06