为什么要将函数向后调用仅在1个元素张量上或使用渐变w.r.t到变量?

时间:2017-05-30 14:02:45

标签: python pytorch

我是pytorch的新手。我想理解为什么我们不能在包含张量大小的变量上调用后向函数[2,2]。 如果我们确实想要在包含张量大小的变量上调用它[2,2],我们必须首先定义一个梯度张量,然后在包含张量的变量上调用后向函数和定义的梯度

1 个答案:

答案 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教程