这个自动求导功能其实就是利用了链式求导法则,利用反向传播来求出对应参数的偏导。0.41版本后,pytorch就直接将其合并进了Tensor类里面了。
Tensor类是autograd里面的核心类,通过属性.requires_grad,将其设置为True之后,就会在后续的操作中追踪其所有的操作,形成一个计算网络。然后就可以利用链式法则对其进行梯度传播了。完成计算之后,调用.backward()函数(即反向传播在pytorch里面的那个函数)就可以将该Tensor的所有梯度累积到.grad属性中。
另外一个很重要的类就是Function。Function里面记录的其实就是在前向传播的过程中该张量的计算操作,便于反向传播求导。Tensor.grad_fn属性就对应该类。
实例如下:
x = torch.ones(2, 2, requires_grad=True)
print(x)
print(x.grad_fn)
输出应为:
自己创建的张量x是默认没有grad_fn的,并且若无设置,requires_grad也会默认为false。
做加法运算后:
z = y * y * 3
out = z.mean()
print(z, out)
输出: