Pytorch学习笔记(二)反向传播与梯度下降

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=)

如果不希望记录这步操作,可以使用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()

你可能感兴趣的:(pytorch,学习,深度学习)