在深度学习中,我们经常需要对函数求梯度(gradient)。PyTorch提供的autograd包能够根据输⼊和前向传播过程自动构建计算图,并执行反向传播。本节将介绍如何使用autograd包来进行自动求梯度的有关操作。
1、Tensor
创建⼀个Tensor并设置requires_grad属性为True:
x = torch.ones(2,2,requires_grad=True)
print(x)
print(x.grad_fn)
输出为:
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
None
再做⼀下运算操作:
y = x + 2
print(y)
print(y.grad_fn)
输出为:
tensor([[3., 3.],
[3., 3.]], grad_fn=<AddBackward0>)
<AddBackward0 object at 0x112480910>
注意x是直接创建的,所以它没有grad_fn , 而y是通过一个加法操作创建的,所以它有一个为的grad_fn.
像x这种直接创建的称为叶子节点,叶子节点对应的grad_fn为None。
2、梯度
因为out是一个标量,所以调用.backward()时不需要指定求导变量:
out.backward() # 等价于 out.backward(torch.tensor(1.))
我们来看看 out 关于 x 的梯度 :
print(x.grad)
输出为:
tensor([[4.5000, 4.5000],
[4.5000, 4.5000]])