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:保存和恢复模型