Как говорится в документе, неявно, grad не может быть создан для нескалярных выходных данных. y
- нескалярный тензор, и вы не можете y.backward()
напрямую. Но вы можете передать вектор назад, чтобы получить vector-Jacobian product
. Если вы не хотите менять грады, вы можете передать вектор со всеми элементами.
x = torch.tensor([2.,3.,4.], requires_grad=True)
y = x**2
y.backward() # error
y.backward(torch.tensor([1.,1.,1.])) # work
x.grad # tensor([4.,6.,8.])
# y.backward(torch.tensor([2.,2.,2.])) # change the passed vector.
# x.grad # tensor([8.,12.,16])