我正在查看一个基本的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,损失在大约四分之一时代后迅速降至低值。然而,对于亚当,损失甚至在十个纪元后都没有减少。我很好奇为什么会这样。在我看来,这些应该具有几乎相同的性能。

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

为了节省您一点点的代码挖掘,以下是超参数:


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在当今几乎可以与您投入其中的任何东西上一起出名)。

关于python - 模型使用SGD学习,但不使用Adam学习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55770783/

10-14 01:10