так что просто быстрый ответ: и autograd.backward(loss)
, и loss.backward()
на самом деле одинаковы.Просто посмотрите на реализацию из tensor.backward()
(поскольку ваша потеря - просто тензор), где tensor.loss
просто вызывает autograd.backward(loss)
.
Что касается вашего второго вопроса: всякий раз, когда вы используетеготовый слой, такой как nn.Linear
, или свертки, или RNN, и т. д., все они используют атрибуты nn.Parameter
для хранения значений параметров.И, , как в документах написано , по умолчанию используется requires_grad=True
.
Обновление для продолжения в комментариях: Чтобы ответить, что происходит с тензорами, когда они находятся в обратном проходе, зависит от того, находится ли переменная на пути вычисления между «выходом» и листовой переменной, илине.Если нет, то не совсем понятно, что должен вычислять backprop - в конце концов, вся цель состоит в том, чтобы вычислять градиенты для параметров, то есть листовых переменных.Если тензор находится на этом пути, все градиенты обычно вычисляются автоматически.Более подробное обсуждение см. В этом вопросе и в этом руководстве из документации .