Keras:恢复训练的加载检查点模型会降低准确性吗?

Posted

技术标签:

【中文标题】Keras:恢复训练的加载检查点模型会降低准确性吗?【英文标题】:Keras: A loaded checkpoint model to resume a training could decrease the accuracy? 【发布时间】:2020-02-29 16:57:29 【问题描述】:

我的 keras 模板正在为我训练的每个最佳时间生成一个检查点。

但是我的网络中断了,当加载我的最后一个检查点并从上一季重新开始训练(使用 initial_epoch)时,准确率从 89.1(加载的模型值)下降到新训练的第一季的 83.6。这是恢复(重新开始)训练时的正常行为吗?因为当我的网络掉线的时候已经是第30个赛季了,准确率没有下降,也没有明显的提升,所以也没有产生新的checkpoint,逼得我回了几个epoch。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

保存和重新训练的问题在于,当您从训练模型开始重新训练到纪元 N 时,在纪元 N+1 它没有保留历史记录。

场景:

您正在训练一个模型 30 个 epoch。在 epoch 15,您的准确度为 88%(假设您根据最佳验证准确度保存模型)。不幸的是,发生了一些事情,你的训练崩溃了。但是,由于您使用检查点进行了训练,因此您在第 15 轮获得了结果模型,在您的程序崩溃之前。

如果您从 epoch 15 开始重新训练,之前的 validation_accuracies(因为您现在“从头开始”再次训练)将不会“在任何地方被记住”。如果您在 epoch 16 获得 84% 的验证准确度,您的 'best_model'(带有 88% acc)将被 epoch 16 模型覆盖,因为 没有先前的保存/内部历史数据训练/验证准确度。在后台,在新的再训练中,84% 将与 -inf 进行比较,因此它将保存 epoch 16 模型。

解决方案是从头开始重新训练,或者使用上一次训练的列表(手动或从 Callback 获得)初始化第二次训练验证精度。这样,在您的时代结束时,Keras 在后台比较的最大准确度将是88%(在场景中)而不是-inf

【讨论】:

谢谢,廷布斯。我现在明白了。 :) 关闭主题。

以上是关于Keras:恢复训练的加载检查点模型会降低准确性吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyTorch 在预训练模型上添加新层? (给出了 Keras 示例。)

AI - TensorFlow - 示例05:保存和恢复模型

在 Keras 模型中优化准确性而不是损失

训练准确性增加,然后偶尔突然下降。使固定? [Keras] [TensorFlow 后端]

恢复培训 tf.keras Tensorboard

如果我将层传递给两个 Keras 模型并且只训练一个模型,那么在前者训练后两个模型会共享权重吗