Neural network 如何在Pytorch中进行backprop(autograd.backward(loss)vs loss.backward())以及在何处设置需要_grad=True?

Neural network 如何在Pytorch中进行backprop(autograd.backward(loss)vs loss.backward())以及在何处设置需要_grad=True?,neural-network,deep-learning,pytorch,backpropagation,Neural Network,Deep Learning,Pytorch,Backpropagation,我已经用了一段时间了。关于backprop,我有一个问题如下: 假设我们有一个神经网络的损失函数。对于backprop,我看到了两个不同的版本。一个像: optimizer.zero_grad() autograd.backward(loss) optimizer.step() 另一种是: optimizer.zero_grad() loss.backward() optimizer.step() 我应该用哪一个?这两个版本有什么不同吗 作为最后一个问题,我们是否需要为我们网络的每一层的参数

我已经用了一段时间了。关于backprop,我有一个问题如下:

假设我们有一个神经网络的损失函数。对于backprop,我看到了两个不同的版本。一个像:

optimizer.zero_grad()
autograd.backward(loss)
optimizer.step()
另一种是:

optimizer.zero_grad()
loss.backward()
optimizer.step()
我应该用哪一个?这两个版本有什么不同吗

作为最后一个问题,我们是否需要为我们网络的每一层的参数指定
requires_grad=True
,以确保在backprop中计算它们的梯度


例如,我是否需要为我的网络中的层
nn.Linear(隐藏大小,输出大小)
指定它,或者默认情况下它会自动设置为True?

所以请快速回答:
autograd.backward(loss)
loss.backward()
实际上是相同的。只要看看
tensor.backward()
(因为您的丢失只是一个张量),其中
tensor.loss
只调用
autograd.backward(loss)

至于你的第二个问题:当你使用预制层,如
nn.Linear
,或卷积,或RNN等,它们都依赖
nn.Parameter
属性来存储参数值。并且,
的默认值要求_grad=True


更新注释中的后续内容:回答张量在向后传递时发生的情况取决于变量是否位于“输出”和叶变量之间的计算路径上。如果不是,那么backprop应该计算什么并不完全清楚——毕竟,整个目的是计算参数的梯度,即叶变量。如果张量位于该路径上,则通常会自动计算所有梯度。有关更详细的讨论,请参阅和。

谢谢!解释得很好。还有一个问题,当您在网络中定义自己的张量变量时,您需要设置requires_grad=True还是像预制层的参数一样默认为True?谢谢!解释得很好。还有一个问题,当您在网络中定义自己的张量变量时,您需要设置requires_grad=True还是像预制层的参数一样默认为True?