模型学习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的学习率(参见Keras,PyTorch和Tensorflow中的默认值),这确实是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)