模型学习SGD但不学习Adam

问题描述 投票:1回答:1

我正在经历一个基本的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
machine-learning pytorch mnist
1个回答
3
投票

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

所以,我建议改为

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

或者干脆

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

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

© www.soinside.com 2019 - 2024. All rights reserved.