博主最近在写这篇文章的时候,发现即使我使用了backward()
,也无法得到我想要的参数的梯度。
博主当然知道pytorch默认只保存叶结点的grad,对于那些中间结点的grad则是一律丢弃。博主当然也知道使用register_hook来获取中间结点的grad。然而这些都不能解决我的问题。我的问题代码如下:
import torch
import numpy as np
device = torch.device('cuda')
x = torch.tensor(np.random.normal(0, 1, [2,3]), requires_grad = True).to(device)
print("grad1: ",x.requires_grad)
y = 2 * x + 3
z = y.sum()
z.backward()
print("grad2: ",x.requires_grad)
print("grad3: ",x.</