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

如何用Keras的evaluate()调用最优模型而非最后一轮模型?

解决方法:确保用最优模型评估

问题核心:训练结束后,内存里的model对象是最后一轮(第9轮)训练的模型,而ModelCheckpoint只是把最优模型存到了文件里,没有自动替换内存中的模型,所以直接调用model.evaluate()用的是最后一轮的模型,不是你要的第4轮最优模型。

具体步骤:

  1. 明确配置ModelCheckpoint的保存路径
    训练时要指定最优模型的保存位置,确保只存验证集上表现最好的版本:

    from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
    
    # 配置检查点:指定保存路径,只存最优模型
    checkpoint = ModelCheckpoint(
        filepath='best_model.keras',  # 模型保存的文件路径
        monitor='val_loss',  # 监控的验证指标(比如损失或准确率)
        save_best_only=True,  # 仅保存最优模型
        mode='min',  # 损失越小越好,若监控准确率则用'max'
        verbose=1
    )
    
    stopper = EarlyStopping(
        monitor='val_loss',
        patience=5,
        mode='min',
        verbose=1
    )
    
    # 启动训练
    model.fit(x_train, y_train, callbacks=[stopper, checkpoint], validation_data=(x_test, y_test))
    
  2. 加载保存的最优模型再评估
    训练完成后,不要用原来的model对象,而是加载刚才保存的最优模型,再调用evaluate():

    from tensorflow.keras.models import load_model
    
    # 从文件加载最优模型
    best_model = load_model('best_model.keras')
    
    # 用最优模型评估测试集或时序外数据
    eval_results = best_model.evaluate(x_test, y_test)
    print('最优模型的评估指标:', eval_results)
    

注意事项:

  • 要保证ModelCheckpoint和EarlyStopping的monitor指标一致,否则保存的最优模型和早停逻辑会不匹配。
  • 如果用的是旧版Keras,模型保存格式可能是.h5,加载时对应改成load_model('best_model.h5')即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:40:51