autograd package
来源:https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html
- 如果属性:.requires_grad 的值是true,那么意味着所有的计算都会自动计算backword.当结束计算的时候,可以调用.backward(),所有的梯度都会自动被计算好。
- tensor的梯度可以查看属性.grad。
- 想停止一直反向计算梯度,可以调用.detach()
- 需要梯度时,可以设置属性requires_grad=True,不要时设置为False
- Tensor和Function是互相联系的。可以根据.grad_fn属性来查看是哪个函数create了这个tensor
- 如果想计算梯度,可以使用在tensor上调用.backward()
下面看一些实例:
x = torch.ones(2, 2, requires_grad=True)
print(x)
out:
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
y = x * x + 5
print(y)
print(y.grad_fn) # 查看是哪个函数创造了他
print("x.grad=", x.grad)
print("y.grad=", y.grad)
# print("y.backward", y.backward())
# backward()只能用于标量
out:
tensor([[6., 6.],
[6., 6.]], grad_fn=<AddBackward0>)
<AddBackward0 object at 0x0000017BA1AAD710>
x.grad= None
y.grad= None
z = y * y * 2 + 10
print(z)
out = z.mean()
print(out)
print(out.grad_fn)
print(out.backward())
out:
tensor([[82., 82.],
[82., 82.]], grad_fn=<AddBackward0>)
tensor(82., grad_fn=<MeanBackward0>)
<MeanBackward0 object at 0x0000017BA1AAD898>
None
print(out.grad)
print("z.grad=", z.grad)
print("y.grad=", y.grad)
print("x.grad=", x.grad)
out:
None
z.grad= None
y.grad= None
x.grad= tensor([[12., 12.],
[12., 12.]])
其实计算是计算雅可比矩阵。
这部分的内容还没有很理解,会后续继续学习。