在Keras中确定模型拟合的轮数

4

我试图自动确定Keras自编码器何时收敛。例如,查看此链接中的“让我们构建最简单的自编码器”。epoch数量在50个时(当损失值收敛时),是硬编码的。然而,如果您不知道数字是50,您该如何使用Keras进行编码?您只需不断调用fit()吗?

1个回答

11

这个问题实际上非常广泛而且困难。有许多技术可以设置epoch的数量:

  • 提前停止- 在这种情况下,您将epoch的数量设置为非常高的数字,并在接下来的epoch没有令人满意的改进时关闭训练。在Keras中,您有一个特殊的对象叫做EarlyStopping可以为您完成此工作。
  • 模型检查点 - 在这里,您再次设置非常高的epoch数,然后只保存相对于所选择的指标最佳的模型。同样,在这种情况下,您有一个特殊的回调函数

当然,还有其他情况,例如使用强化学习来找到停止时间或更复杂的情况,例如在贝叶斯超参数设置中选择此选项,但这些方法通常更难以实现且不会带来任何改善。

确定的一点是,重新启动fit方法可能会导致意外行为,因为模型的许多内部状态被重置,这可能会导致不稳定性。对于这种情况,我强烈建议您使用train_on_batch,该方法不会重置模型状态并且可以实现许多高级训练场景。


1
不错的答案!但是在使用提前停止时要小心。有时模型可能会经历鞍点,在这种情况下,模型正在缓慢变得更好,但实际上它前面存在巨大的损失减少。然而,当您的损失不会太多动,并且准确性不高时,才会出现这种情况。我通常会训练多个模型并设置检查点,这是您提到的第二个选项。 - Amir Zadeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接