【问题标题】:Loss suddenly increases with Adam Optimizer in Tensorflow使用 Tensorflow 中的 Adam Optimizer,损失突然增加
【发布时间】:2017-07-02 11:01:23
【问题描述】:

我正在使用 CNN 执行回归任务。我使用 Tensorflow,优化器是 Adam。网络似乎收敛得很好,直到损失随着验证错误而突然增加。这是标签的损失图和分离的权重(优化器在它们的总和上运行)

我使用 l2 loss 进行权重正则化和标签。我对训练数据应用了一些随机性。我目前正在尝试 RSMProp 以查看行为是否发生变化,但重现错误至少需要 8 小时。

我想了解这是如何发生的。希望你能帮助我。

【问题讨论】:

  • 降低学习率?
  • 对于亚当来说,通常情况下你不需要在训练时降低学习率。过高的学习率会导致网络收敛到更差的损失值,对吧?在 RMSProp 运行之后,我可以尝试降低初始速率,但这意味着我认为这需要更多时间才能发生......
  • 等等,第一个情节是什么?这是训练损失对吗?但它会下降吗?那么问题出在哪里呢?你可以解释吗?如果您说的是组合损失,然后由权重正则化(这就是我解释它的方式)主导,也许可以使用一些 alpha 来设置两个损失组件的规模。
  • 是的,第一个图是没有减重的训练损失,第二个是只有减重的图。优化是在两者的总和上完成的!蓝线下降到 160k,橙色线下降到 325k,而黄色线即将上升,因为我取消了!由于比例是对数比例,所以在提到的迭代之后,蓝色和橙色的损失平均翻了一番,这不应该是正常的吗???
  • 损失的总和还在减少吗?

标签: tensorflow neural-network regression conv-neural-network


【解决方案1】:

我过去几个月的经历如下: Adam 非常易于使用,因为您不必过多地使用初始学习率,而且它几乎总是有效的。然而,当开始收敛时,亚当并没有真正为解决方案而烦恼,而是在更高的迭代中摇摆不定。而 SGD 给出了一个几乎完美的损失图,并且似乎在更高的迭代中收敛得更好。 但是改变设置的小部分需要调整 SGD 参数,否则你最终会得到 NaNs...对于架构和一般方法的实验,我喜欢 Adam,但如果你想获得一个所选架构的最佳版本,你应该使用SGD 并至少比较解决方案。

我还注意到,良好的初始 SGD 设置(学习率、权重衰减等)收敛速度与使用 Adam 一样快,至少对于我的设置而言。 希望这可以帮助你们中的一些人!

编辑:请注意,我最初的问题中的效果是正常的,即使是亚当。好像我有一个错误,但我真的不记得那里的问题了。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-04-25
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 2017-07-08
  • 2021-10-04
相关资源
最近更新 更多