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

Keras中EarlyStopping未触发时的模型保存行为

问题解答

核心结论

当EarlyStopping未触发(即训练跑完了所有150个epoch)时,你当前代码保存的是最后一轮训练的权重,而非训练过程中loss最优的那个epoch的权重。

原因分析

你设置的restore_best_weights=True参数,仅在EarlyStopping触发(提前终止训练)时生效:此时回调会自动将模型权重恢复到监控指标(这里是loss)最优的epoch状态,之后执行model.save()保存的就是最优权重。

但如果训练顺利跑完所有预设epoch,EarlyStopping未被激活,这个参数不会起作用——模型会保留最后一轮训练结束后的权重,此时model.save()保存的自然是最后一轮的权重。

优化方案(可选)

如果希望无论是否触发早停,都能保存训练过程中loss最优的模型权重,建议搭配ModelCheckpoint回调使用,示例代码如下:

from keras.callbacks import EarlyStopping, ModelCheckpoint

es = EarlyStopping(monitor='loss', min_delta=1e-4, patience=10, verbose=True, restore_best_weights=True)
mc = ModelCheckpoint('model_best.h5', monitor='loss', save_best_only=True, verbose=True)

history = model.fit(ft, steps_per_epoch=len(ft), callbacks=[es, mc], epochs=150, verbose=verbose)

这个方案中,ModelCheckpoint会在每个epoch结束后自动判断当前loss是否为最优,仅保存最优状态的模型,完全不受早停是否触发的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:53:15