来源:https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html
如果属性:.requires_grad 的值是true,那么意味着所有的计算都会自动计算backword.当结束计算的时候,可以调用.backward(),所有的梯度都会自动被计算好。tensor的梯度可以查看属性.grad。想停止一直反向计算梯度,可以调用.detach()需要梯度时,可以设置属性requires_grad=True,不要时设置为FalseTensor和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.]])其实计算是计算雅可比矩阵。
这部分的内容还没有很理解,会后续继续学习。
