【发布时间】:2019-10-18 06:08:13
【问题描述】:
我的模型需要运行多个 epoch 才能获得不错的结果,并且在 Google Cloud 上使用 v100 需要几个小时。
由于我处于抢占式实例中,因此它会在训练过程中将我踢开。我希望能够从中断的地方继续。
在我的自定义回调中,我在 on_epoch_end 中运行 self.model.save(...)。如果在过去 50 个 epoch 中分数没有提高,它也会停止训练。
以下是我尝试的步骤:
- 我运行了 model.fit,直到第 250 轮后出现早期停止(最好成绩是在第 200 轮)
- 我加载了第 100 个 epoch 后保存的模型。
- 我使用 initial_epoch=100 运行 model.fit。 (从 Epoch 101 开始。)
但是,赶上第一次运行需要一段时间。此外,每个 epoch 的准确度得分也接近第一次运行,但更低。终于早停踢到了300左右,最后的分数比第一次还低。获得相同最终分数的唯一方法是从头开始创建模型并从 epoch 1 开始运行。
我还尝试使用 float(K.get_value(self.model.optimizer.lr)) 和 K.set_value(self.model.optimizer.lr, new_lr)。 但是,self.model.optimizer.lr 总是返回相同的数字。我认为这是因为亚当优化器从我用 Adam(lr=1e-4) 设置的初始 lr 计算出真正的 lr。
我想知道使用 Adam 优化器恢复训练的正确方法是什么?
【问题讨论】:
标签: python tensorflow machine-learning keras