tf.callbacks.ModelCheckpoint告警:val_acc未识别,无法保存最优模型
解决ModelCheckpoint无法找到val_acc的问题
我一眼就看出问题所在了——你代码里的ModelCheckpoint监控的是val_acc,但你的训练日志里验证集的准确率指标明明是val_accuracy啊!这就是为什么每次训练到中途会弹出告警,直到 epoch 结束才显示正确的验证指标,但此时 checkpoint 已经跳过保存了。
解决方案
直接修改ModelCheckpoint的monitor参数,将val_acc替换为val_accuracy,修改后的回调代码如下:
callbacks = [ TensorBoard(log_dir=r'C:\Users\reda\Desktop\logs\{}'.format(Name), histogram_freq=1), ModelCheckpoint(filepath=r"C:\Users\reda\Desktop\checkpoints\{}".format(Name), monitor='val_accuracy', verbose=2, save_best_only=True, mode='max') ]
原因说明
这是TensorFlow版本差异导致的指标命名规则变化:
- 在TensorFlow 2.x及后续较新版本中,默认的准确率指标名称为
accuracy(训练集)和val_accuracy(验证集) - 旧版TensorFlow(如1.x)可能使用
acc和val_acc的命名方式
你的训练日志里明确显示每轮训练结束后输出的验证准确率是val_accuracy: 0.5000,只有让ModelCheckpoint的监控名称与实际输出的指标名称完全匹配,它才能正确识别验证集指标并完成最佳模型的保存。
内容的提问来源于stack exchange,提问作者Reda El Hail
相关产品推荐
相关产品推荐

