如何用Keras的evaluate()调用最优模型而非最后一轮模型?
解决方法:确保用最优模型评估
问题核心:训练结束后,内存里的model对象是最后一轮(第9轮)训练的模型,而ModelCheckpoint只是把最优模型存到了文件里,没有自动替换内存中的模型,所以直接调用model.evaluate()用的是最后一轮的模型,不是你要的第4轮最优模型。
具体步骤:
明确配置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))加载保存的最优模型再评估
训练完成后,不要用原来的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
相关产品推荐
相关产品推荐

