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

Keras: A loaded checkpoint model to resume a training could decrease the accuracy?

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

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

在此先感谢您的帮助。

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

场景:

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

如果你从纪元 15 开始重新训练,之前的 validation_accuracies(因为你现在再次“从头开始”训练),将不会是 'remembered anywhere'。如果你在 epoch 16 获得 84% 的验证准确率,你的 'best_model'(使用 88% acc)将被 epoch 16 模型覆盖,因为没有 no saved/internal 先前 training/validation 精度的历史数据。在引擎盖下,在新的再训练中,84% 将与 -inf 进行比较,因此它将保存 epoch 16 模型。

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