2

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

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

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

我认为这对模型没有影响。使用 SGD 后,损失在大约四分之一纪元后迅速下降到低值。然而,对于 Adam,即使经过 10 个 epoch,损失也没有下降。我很好奇为什么会这样;在我看来,这些应该具有几乎相同的性能。

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

为了节省你一点点代码挖掘,这里是超参数:

  • lr=0.01
  • 动量=0.5
  • 批量大小=64
4

1 回答 1

5

Adam 以其默认参数开箱即用而闻名,在几乎所有框架中,它都包含 0.001 的学习率(请参阅 Keras、PyTorch 和 Tensorflow 中的默认值确实Adam 中建议的值纸

所以,我建议改为

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

或者干脆

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

为了保留lr其默认值(尽管我会说我很惊讶,因为 MNIST 现在以实际使用您可能投入的任何东西而闻名)。

于 2019-04-20T10:31:51.483 回答