【问题标题】:Pytorch. Can autograd be used when the final tensor has more than a single value in it?火炬。当最终张量中包含多个值时可以使用 autograd 吗?
【发布时间】:2019-04-15 20:28:04
【问题描述】:

当最终张量中包含多个值时可以使用 autograd 吗?

我尝试了以下方法。

x = torch.tensor([4.0, 5.0], requires_grad=True)
y = x ** 2

print(y)

y.backward()

抛出错误

RuntimeError: grad can be implicitly created only for scalar outputs

以下是有效的。

x = torch.tensor([4.0, 5.0], requires_grad=True)
y = x ** 2
y = torch.sum(y)
print(y)

y.backward()
print(x.grad)

输出如下

tensor(41., grad_fn=<SumBackward0>)
tensor([ 8., 10.])

我在这里遗漏了什么,还是我可以继续假设 autograd 仅在最终张量中包含单个值时才有效?

【问题讨论】:

    标签: python pytorch autograd


    【解决方案1】:

    https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#gradients

    y.backward()y.backward(torch.tensor(1.0)) 相同

    通常,输出是标量,因此标量作为默认选择传递给向后。但是,由于您的输出是二维的,您应该调用 y.backward(torch.tensor([1.0,1.0]))

    这将给出预期的结果,x.gradtensor([ 8., 10.])

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 1970-01-01
      • 2022-07-20
      • 2020-10-26
      • 2021-12-07
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2021-06-06
      相关资源
      最近更新 更多