用backward函数求导,结果一直为None
下面是程序图,确保程序中的tensor都将requires_grad_()参数设置为TRUE
x = torch.ones(2, 2, requires_grad=True)
print(x)
# 针对张量做一个操作
y = x + 2
print(y)
# y 作为操作的结果被创建,所以它有 grad_fn
print(y.grad_fn)
# 针对张量做更多操作
z = y * y * 3
out = z.mean()
print(z, out)
console:
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
# 每个张量都有一个 .grad_fn 属性保存着创建了张量的 Function 的引用
tensor([[3., 3.],
[3., 3.]], grad_fn=<AddBackward0>) <AddBackward0 object at 0x000001989F20D7B8>
tensor([[27., 27.],
[27., 27.]], grad_fn=<MulBackward0>) tensor(27., grad_fn=<MeanBackward0>)
在使用PyTorch进行自动求导时,确保以下几点可以帮助您获得有效的梯度计算:
import torch
# 创建张量并设置requires_grad为True
x = torch.tensor(2.0, requires_grad=True)
# 定义一个计算图
y = x ** 2 + 3 * x + 1
# 执行反向传播
y.backward()
# 获取梯度值
print(x.grad) # 输出:tensor(7.)
确保在您的程序中按照上述步骤使用了这些要点。如果您仍然遇到问题并且backward()方法返回None,请检查您的计算图是否正确,并确保所有涉及梯度计算的张量都具有正确的属性设置。