在 pytorch 中的一个简单测试中,我想查看非叶张量中的 grad,因此我使用retain_grad():
import torch
a = torch.tensor([1.], requires_grad=True)
y = torch.zeros((10))
gt = torch.zeros((10))
y[0] = a
y[1] = y[0] * 2
y.retain_grad()
loss = torch.sum((y-gt) ** 2)
loss.backward()
print(y.grad)
Run Code Online (Sandbox Code Playgroud)
它给了我一个正常的输出:
tensor([2., 4., 0., 0., 0., 0., 0., 0., 0., 0.])
Run Code Online (Sandbox Code Playgroud)
但是当我在 y[1] 之前和 y[0] 分配之后使用保留 grad() 时:
import torch
a = torch.tensor([1.], requires_grad=True)
y = torch.zeros((10))
gt = torch.zeros((10))
y[0] = a
y.retain_grad()
y[1] = y[0] * 2
loss = torch.sum((y-gt) ** 2)
loss.backward()
print(y.grad)
Run Code Online (Sandbox Code Playgroud)
现在输出更改为:
tensor([10., …Run Code Online (Sandbox Code Playgroud)