【问题标题】:Keras: A loaded checkpoint model to resume a training could decrease the accuracy?Keras:恢复训练的加载检查点模型会降低准确性吗?
【发布时间】:2020-02-29 16:57:29
【问题描述】:
我的 keras 模板正在为我训练的每个最佳时间生成一个检查点。
但是我的网络中断了,当加载我的最后一个检查点并从上一季重新开始训练(使用 initial_epoch)时,准确率从 89.1(加载的模型值)下降到新训练的第一季的 83.6。这是恢复(重新开始)训练时的正常行为吗?因为当我的网络掉线的时候已经是第30个赛季了,准确率没有下降,也没有明显的提升,所以也没有产生新的checkpoint,逼得我回了几个epoch。
提前感谢您的帮助。
【问题讨论】:
标签:
keras
floating-accuracy
checkpoint
resuming-training
【解决方案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。