我是pytorch的新手。我想理解为什么我们不能在包含张量大小的变量上调用后向函数[2,2]。 如果我们确实想要在包含张量大小的变量上调用它[2,2],我们必须首先定义一个梯度张量,然后在包含张量的变量上调用后向函数和定义的梯度
答案 0 :(得分:4)
来自autograd
如果要计算导数,可以在a上调用.backward() 变量。如果Variable是标量(即它包含一个元素数据), 你不需要为backward()指定任何参数,但是如果它 有更多的元素,你需要指定一个grad_output参数 一个匹配形状的张量。
基本上,为了启动链式规则,您需要一个渐变的输出,以实现它。如果输出是一个标量损失函数(它通常是 - 通常你在损失变量开始向后传递),它的隐含值为1.0
来自教程:
让我们的backprop现在out.backward()等同于做 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教程