#python #machine-learning #pytorch #adam #sgd
#python #машинное обучение #pytorch #адам #sgd
Вопрос:
Я просматривал здесь базовый пример 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 эпох. Мне любопытно, почему это происходит; мне кажется, они должны иметь почти одинаковую производительность.
Я запустил это на Win10 / Py3.6 / PyTorch1.01 / CUDA9
И чтобы избавить вас от необходимости копаться в коде, вот гиперпараметры:
- lr = 0.01
- импульс = 0,5
- batch_size= 64
Ответ №1:
Adam известен тем, что работает «из коробки» со своими параметрами по умолчанию, которые почти во всех фреймворках включают скорость обучения 0,001 (см. Значения по умолчанию в Keras, PyTorch и Tensorflow), что действительно является значением, предложенным в статье Adam.
Итак, я бы предложил перейти на
optimizer = optim.Adam(model.parameters(), lr=0.001)
или просто
optimizer = optim.Adam(model.parameters())
чтобы оставить lr
значение по умолчанию (хотя я бы сказал, что я удивлен, поскольку MNIST в наши дни славится тем, что работает практически с тем, что вы можете в него добавить).