模型学习SGD但不学习Adam

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模型学习SGD但不学习Adam相关的知识,希望对你有一定的参考价值。

我正在经历一个基本的PyTorch MNIST示例here,并注意到当我将优化器从SGD更改为Adam时,模型没有收敛。具体来说,我改变了第106行

optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)

optimizer = optim.Adam(model.parameters(), lr=args.lr)

我认为这对模型没有影响。随着SGD的损失,在大约四分之一的时间后,损失迅速降至低值。然而对于亚当来说,即使在10个时代之后,损失也没有下降。我很好奇为什么会这样;在我看来,这些应该具有几乎相同的性能。

我在Win10 / Py3.6 / PyTorch1.01 / CUDA9上运行了这个

为了节省一些代码挖掘,这里是hyperparams:

  • LR = 0.01
  • 动量= 0.5
  • 的batch_size = 64
答案

Adam以其默认的参数开箱即用,它在几乎所有框架中都包含0.001的学习率(参见KerasPyTorchTensorflow中的默认值),这确实是Adam paper中建议的值。 。

所以,我建议改为

optimizer = optim.Adam(model.parameters(), lr=0.001)

或者干脆

optimizer = optim.Adam(model.parameters())

为了让lr保持其默认值(虽然我会说我感到很惊讶,因为现在MNIST因为你可能投入的任何东西而实际工作)。

以上是关于模型学习SGD但不学习Adam的主要内容,如果未能解决你的问题,请参考以下文章

深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)

深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)

神经网络优化算法如何选择Adam,SGD

深度学习与CV教程 | 神经网络训练技巧 (下)

Adam优化器

优化器,sgd,adam等