Autograd: 自动求导机制
PyTorch 中所有神经网络的核心是autograd
包。autograd
包为张量上的所有操作提供了自动求导。
torch.Tensor
是这个包的核心类。如果设置.requires_grad
为True
(True代表此变量处需要计算梯度,False代表不需要),那么将会追踪所有对于该张量的操作。 当完成计算后通过调用.backward()
,自动计算所有的梯度, 这个张量的所有梯度将会自动积累到.grad
属性。- 要阻止张量跟踪历史记录,可以调用
.detach()
方法将其与计算历史记录分离,并禁止跟踪它将来的计算记录。 - 为了防止跟踪历史记录(和使用内存),可以将代码块包装在
with torch.no_grad():
中。 在评估模型时特别有用,因为模型可能具有requires_grad = True
的可训练参数,但是我们不需要梯度计算。 Tensor
和Function
互相连接并生成一个非循环图,它表示和存储了完整的计算历史。 每个张量都有一个.grad_fn
属性,这个属性引用了一个创建了Tensor
的Function
(除非这个张量是用户手动创建的,即,这个张量的grad_fn
是None
)。- 如果需要计算导数,你可以在Tensor上调用.backward()。 如果Tensor是一个标量(即它包含一个元素数据)则不需要为backward()指定任何参数, 但是如果它有更多的元素,你需要指定一个gradient 参数来匹配张量的形状。
梯度的理解:对于函数的某个特定点,它的梯度就表示从该点出发,函数值增长最为迅猛的方向(direction of greatest increase of a function)。
参考:https://zhuanlan.zhihu.com/p/43492827
Autograd:PyTorch中的梯度计算:https://zhuanlan.zhihu.com/p/29904755
反向传播通俗教程👍:https://blog.csdn.net/weixin_38347387/article/details/82936585