Модель учится с SGD, но не Адам - PullRequest
1 голос
/ 20 апреля 2019

Я просматривал базовый пример 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 потери быстро упали до низких значений примерно через четверть эпохи.Однако с Адамом потери не уменьшились вообще даже после 10 эпох.Мне любопытно, почему это происходит;мне кажется, они должны иметь почти одинаковую производительность.

Я запустил это на Win10 / Py3.6 / PyTorch1.01 / CUDA9

И чтобы сэкономить вам немного времени на копание кода, здесьгиперпараммы:

  • lr = 0,01
  • импульс = 0,5
  • batch_size = 64

1 Ответ

3 голосов
/ 20 апреля 2019

Адам славится разработкой из коробки с параметрами по умолчанию , которые почти во всех системах включают скорость обучения 0,001 (см. Значения по умолчанию в Керас , PyTorch и Tensorflow ), что действительно является значением, предложенным в статье Адам .

Итак, я бы предложил изменить на

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

или просто

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

, чтобы оставить значение lr по умолчанию (хотя я бы сказал, что я удивлен, поскольку MNIST в настоящее время известен работой практически с чем угоднобрось в него).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...