Как сделать backprop в Pytorch (autograd.backward (loss) vs loss.backward ()) и где установить require_grad = True? - PullRequest
0 голосов
/ 13 марта 2019

Я уже некоторое время использую Pytorch.Один вопрос, который у меня возник в отношении backprop:

Допустим, у нас есть функция потерь для нейронной сети.Для выполнения backprop я видел две разные версии.Один как:

optimizer.zero_grad()
autograd.backward(loss)
optimizer.step()

, а другой как:

optimizer.zero_grad()
loss.backward()
optimizer.step()

Какой мне следует использовать?Есть ли разница между этими двумя версиями?

В качестве последнего вопроса, нужно ли нам указать requires_grad=True для параметров каждого слоя нашей сети, чтобы гарантировать, что их градиенты вычисляются в backprop?

Например, мне нужно указать его для слоя nn.Linear(hidden_size, output_size) внутри моей сети или для него по умолчанию автоматически установлено значение True?

1 Ответ

1 голос
/ 13 марта 2019

так что просто быстрый ответ: и autograd.backward(loss), и loss.backward() на самом деле одинаковы.Просто посмотрите на реализацию из tensor.backward() (поскольку ваша потеря - просто тензор), где tensor.loss просто вызывает autograd.backward(loss).

Что касается вашего второго вопроса: всякий раз, когда вы используетеготовый слой, такой как nn.Linear, или свертки, или RNN, и т. д., все они используют атрибуты nn.Parameter для хранения значений параметров.И, , как в документах написано , по умолчанию используется requires_grad=True.

Обновление для продолжения в комментариях: Чтобы ответить, что происходит с тензорами, когда они находятся в обратном проходе, зависит от того, находится ли переменная на пути вычисления между «выходом» и листовой переменной, илине.Если нет, то не совсем понятно, что должен вычислять backprop - в конце концов, вся цель состоит в том, чтобы вычислять градиенты для параметров, то есть листовых переменных.Если тензор находится на этом пути, все градиенты обычно вычисляются автоматически.Более подробное обсуждение см. В этом вопросе и в этом руководстве из документации .

...