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

Keras中EarlyStopping回调是否保存最优模型?如何仅保存最优模型?

Keras EarlyStopping与最优模型保存问题解答

嘿,我来给你把这个问题讲明白!

首先要明确一个关键点:你当前用的EarlyStopping回调本身不负责保存模型——它的核心作用只是监控val_loss,当连续YEARLY_STOPPING_PATIENCE_EPOCHS个epoch里val_loss都没有下降时,终止训练进程。这时候你最后得到的模型,是训练停止那个epoch的模型,也就是「基于val_loss的最优epoch」加上patience数之后的那个模型,并不是性能最优的那个。

那要怎么只保存最优模型呢?你需要搭配ModelCheckpoint回调一起使用,这个回调专门用来在训练过程中保存模型,而且可以设置只保存性能最优的版本。

修改后的代码示例

首先导入需要的回调类:

from keras.callbacks import EarlyStopping, ModelCheckpoint

然后定义两个回调,分工明确:

# 负责监控val_loss,触发停止训练
early_stopping = EarlyStopping(monitor='val_loss', patience=YEARLY_STOPPING_PATIENCE_EPOCHS)

# 负责保存val_loss最优的模型,save_best_only=True是关键
model_checkpoint = ModelCheckpoint(
    filepath='best_model.h5',  # 最优模型的保存路径和文件名
    monitor='val_loss',
    save_best_only=True,  # 只保存val_loss最低的那个模型
    verbose=1  # 每次保存时打印提示信息,方便跟踪
)

最后在训练时把两个回调都传入callbacks参数:

history = model.fit_generator(
    train_generator,
    steps_per_epoch=100,
    epochs=N_EPOCHS,
    validation_data=val_generator,  # 这里替换成你的验证数据生成器
    callbacks=[early_stopping, model_checkpoint]
)

效果说明

这样设置后,训练过程中每完成一个epoch,ModelCheckpoint就会对比当前的val_loss和之前的最小值:如果更优,就会覆盖保存best_model.h5;如果没有提升,就跳过保存。等到EarlyStopping触发停止训练时,best_model.h5里保存的就是基于val_loss的最优模型,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:48:02