如何在TensorFlow中从Callback历史中提取并保存最优损失对应的模型
解决方案
假设你使用的是TensorFlow/Keras框架的EarlyStopping回调,可通过以下方式获取并保存最优epoch对应的模型:
训练前配置回调参数(推荐方案)
在初始化EarlyStopping时开启restore_best_weights参数,训练结束后模型会自动加载监控指标最优的epoch权重,直接保存即可:
- 导入并配置回调
from tensorflow.keras.callbacks import EarlyStopping early_stop_cb = EarlyStopping( monitor="val_loss", # 按实际需求替换为你要跟踪的指标,比如loss、val_acc等 patience=10, # 连续多少轮指标无提升后触发早停 restore_best_weights=True, # 核心参数:训练结束后自动恢复最优轮次的权重 verbose=1 )
- 训练时传入回调
# 以自编码器训练为例,按需修改你的fit参数 history = autoencoder.fit( x_train, x_train, epochs=200, validation_data=(x_val, x_val), callbacks=[early_stop_cb] )
- 训练完成后直接保存模型,此时模型已对应最小损失的epoch权重
# 保存完整模型(包含结构和权重) autoencoder.save("best_autoencoder.h5") # 仅保存权重(需提前保留模型结构代码) autoencoder.save_weights("best_autoencoder_weights.h5")
特殊情况处理
如果你已经完成训练,且初始化EarlyStopping时没有设置restore_best_weights=True,无法从当前训练完成的模型中回溯获取最优epoch的权重,只能重新训练时加上上述参数。
内容的提问来源于stack exchange,提问作者mlhub
相关产品推荐
相关产品推荐

