2

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

4

1 回答 1

5

从教程开始autograd

如果要计算导数,可以在变量上调用 .backward()。如果变量是一个标量(即它保存一个元素数据),你不需要为backward()指定任何参数,但是如果它有更多元素,你需要指定一个grad_output参数,它是一个匹配形状的张量.

基本上,要开始链式法则,您需要在输出处使用渐变,以使其继续。如果输出是一个标量损失函数(它通常是 - 通常您在损失变量处开始反向传递),它的隐含值是 1.0

从教程:

现在让我们反向传播 out.backward() 相当于做 out.backward(torch.Tensor([1.0]))

但也许你只想更新一个子图(网络深处的某个地方)......并且 a 的值Variable是一个权重矩阵。然后你必须告诉它从哪里开始。来自他们的一位首席开发人员(链接中的某处)

对,那是正确的。我们只支持标量函数的微分,所以如果你想从一个非标量值向后开始,你需要提供dout / dy

梯度参数

https://discuss.pytorch.org/t/how-the-backward-works-for-torch-variable/907/8好的解释

Pytorch,什么是梯度参数很好的解释

http://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html教程

于 2017-07-02T00:13:18.323 回答