Keras的initial_epoch是什么意思?

ibr*_*gon 6 machine-learning deep-learning keras

关于initial_epoch价值fitfit_generator方法,我有点困惑.这是文档:

initial_epoch:整数.开始训练的时期(对于恢复之前的训练运行很有用).

我明白,如果你从头开始训练,它就没用了.如果您训练了数据集并希望提高准确度或其他值(如果我错了就纠正我),这很有用.但我不确定它到底是做什么的.

毕竟,我有两个问题:

  1. 它的initial_epoch作用和用途是什么?
  2. initial_epoch什么时候可以使用?

    • 当我更改数据集时?
    • 当我改变学习率,优化器或丢失功能?
    • 他们都?

tod*_*day 16

由于在一些优化的,他们的一些内部值(例如学习率)的使用设定电流 epoch值,甚至你可能有(自定义)回调依赖于当前值epoch,该initial_epoch参数让你指定的初始值epoch从训练开始.

正如文件中指出,这主要是有用的,当你已经训练模型的一些时期,比如10,然后保存它,现在你要加载它,并恢复对另外10个时期的训练不中断的状态划时代的依赖对象(例如优化器).所以,你会设置initial_epoch=10(即我们已经训练了10个时期的模型)和epochs=20(不是10,因为时代的总数将达到20),然后一切重新开始,如果你最初训练模型20个时代在一个单一的培训会话.

但是,请注意,当使用Keras的内置优化器时,您不需要使用initial_epoch,因为它们在内部存储和更新其状态(不考虑当前时期的值),并且在保存模型时,优化器的状态将是也存储了.


Ger*_*y P 6

上面的答案是正确的,但重要的是要注意,如果您已经训练了 10 个 epoch,并设置 initial_epoch=10 和 epochs=20,那么您还会再训练 10 个 epoch,直到总共达到 20 个 epoch。例如,我训练了 2 个 epoch,然后设置 initial_epoch=2 和 epochs=4。结果是它又训练了 4-2=2 个 epoch。历史对象中的新数据从 epoch 3 开始。因此,返回的历史对象确实从 epoch 1 开始,正如您所期望的那样。换句话说,历史对象的状态不会从初始训练时期保留下来。如果你没有设置initial_epoch并且训练了2个epoch,那么用epochs=4重新运行fit_generator,它将从第二个epoch结束时保留的状态开始再训练4个epoch(假设你使用内置的优化器)。同样,历史对象状态不会从初始训练中保留下来,仅包含最后 4 个时期的数据。我注意到这一点是因为我绘制了验证损失与历元的关系图。