0

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

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

在此先感谢您的帮助。

4

1 回答 1

3

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

设想:

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

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

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

于 2019-11-04T12:02:54.083 回答