1.requires_grad和grad_fn
为了便于在反向传播的过程中计算梯度,可以在使用grad_fn来保存该tensor的运算过程。当我们需要启动grad_fn时,需要将requires_grad设置为True。
t=torch.tensor([1.0,2.0,3.0],requires_grad=True) #这里的tensor必须为浮点型,否则会报错
print(t)
#tensor([1., 2., 3.], requires_grad=True)
t=t+2*t
print(t) #grad_fn记录了该tensor进行了相加操作
#tensor([3., 6., 9.], grad_fn=<AddBackward0>)
如果不希望记录这步操作,可以使用with torch.no_grad()
with torch.no_grad():
c=t+2*t
print(c)
#tensor([3., 6., 9.])
2.out.backward()
利用反向传播计算梯度,将结果累加到自变量x.grad
t=torch.tensor([1.0,2.0,3.0],requires_grad=True) #这里的tensor必须为浮点型,否则会报错
z=pow((t-1),2)
out=z.sum()
out.backward() #反向传播计算梯度,out必须为标量
print(t.grad) #out对t中的每个变量求偏导
#tensor([0., 2., 4.])
注意:(1)由于梯度时累加的,所以每次更新后需要清空梯度
(2)tensor.data用于获取tensor中的数据,不管requires_grad的取值
(3)requires_grad=True时,tensor不能直接转numpy,需要tensor.detach().numpy()