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

发布于 2021-01-29 16:16:51

当最终张量中包含多个值时,可以使用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.])

我是否在这里遗漏了一些东西,还是可以假设自动分级仅在最终张量中具有单个值时才起作用?

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    参见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.])



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看