为什么 Keras 会为单个 .fit 运行 写入多个 tensorboard 日志?

Why does Keras write multiple tensorboard logs for a single .fit run?

我是 运行 一个在 Google Cloud 上使用 Keras 和 tensorflow 后端的卷积网络模型,使用 tensorboard 回调来保存训练历史记录的 tfevents 日志。当我监控学习曲线时,我注意到在训练进行到一半时(学习曲线处于平稳状态),一个新的 tfevents 日志被保存到磁盘中。 TensorBoard 的学习曲线图显示,训练被重置为 epoch #1,val_loss 也被重置为 scratch。

这真的很奇怪。有谁知道这里发生了什么? Keras 在什么情况下会自动重启训练并保存新的 tfevents 日志?

原来这个问题只发生在我 运行 我的代码在 Google 云上,而不是在我的本地机器上。 Google 工程师确认的实际原因, 是 Google 的云维护,而不是 Keras! Google Compute Engine (GCE) 实例偶尔会在没有任何警告或事先通知的情况下关闭以进行维护(在回答此问题时也未记录)。维护将导致训练实例从头开始重新启动,因此生成新的 tfevents 日志并重置所有以前的进度。

解决这个问题的方法是经常保存检查点,加载以前的模型(如果存在),并在重启时恢复训练。请注意,使用 GCE 时,必须使用 Keras 中的自定义 Lambda 回调函数将检查点保存到 Google 云存储 (GCS),否则您的检查点将随着关闭而消失。