我是 pytorch 的新手。我想了解为什么我们不能在包含大小为 [2,2] 的张量的变量上调用向后函数。 如果我们确实想在包含大小为[2,2]的张量的变量上调用它,我们必须首先定义一个梯度张量,然后在包含定义梯度的张量的变量上调用向后函数.
最佳答案
来自 autograd
的教程
If you want to compute the derivatives, you can call .backward() on a Variable. If Variable is a scalar (i.e. it holds a one element data), you don’t need to specify any arguments to backward(), however if it has more elements, you need to specify a grad_output argument that is a tensor of matching shape.
基本上,要启动链式法则,您需要在输出端设置一个梯度,以使其运行。如果输出是一个标量损失函数(它通常是 - 通常你从损失变量开始向后传递),它的隐含值为 1.0
来自教程:
let's backprop now out.backward() is equivalent to doing out.backward(torch.Tensor([1.0]))
但也许您只想更新一个子图(在网络深处的某个地方)...而 Variable
的值是一个权重矩阵。然后你必须告诉它从哪里开始。来自他们的一位首席开发人员(在链接中的某处)
是的,没错。我们只支持标量微分 函数,所以如果你想从一个非标量值向后开始 你需要提供dout/dy
梯度参数
https://discuss.pytorch.org/t/how-the-backward-works-for-torch-variable/907/8好的解释
Pytorch, what are the gradient arguments很好的解释
http://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html教程
关于python - 为什么应该仅在 1 个元素张量或梯度 w.r.t 到 Variable 上调用 backward 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264443/