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
相关产品推荐
相关产品推荐

