TensorFlow自定义回调生成的val_f1_after_epoch无法被ModelCheckpoint监测怎么办
问题根源
你遇到这个警告的核心原因是回调的执行顺序错误。
TensorFlow Keras的回调是按照你传入model.fit()时callbacks参数里的列表顺序依次执行的。你现在的ModelCheckpoint回调执行顺序在自定义的Metrics回调之前:
ModelCheckpoint先运行,检查logs里有没有val_f1_after_epoch,此时你的自定义指标还没计算,也没写入logs,所以触发找不到指标的警告,跳过保存- 之后才执行
Metrics回调的on_epoch_end方法,把自定义指标写入logs,所以最终history.history里能看到这个指标,但保存阶段已经错过了
解决方案
调整callbacks列表的顺序,把自定义的Metrics回调放在ModelCheckpoint回调之前即可:
# 错误的顺序示例(你之前大概率是这么写的) # model.fit(..., callbacks=[checkpoint_cb, m4]) # 正确的顺序 model.fit( # 其余训练参数保持不变 callbacks=[m4, checkpoint_cb] )
你已经设置的checkpoint_cb._supports_tf_logs = False是正确配置,不需要修改,这个配置的作用是让Checkpoint可以读取普通Python数值类型的指标,而不是仅读取Tensor类型的内置指标。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

