假设我有一个包含很多层的复杂模型。
当我获得模型的输出时,我计算损失。
现在,当我运行 loss.backward() 时,它会立即计算所有层的梯度。
但是是否可以一次运行backward()一层?
所以我想做的是首先获取第 1 层的梯度,将它们传递给优化器,然后立即将 grads 设置为 None 以释放内存。然后继续计算第 2 层的梯度,依此类推,直到使用循环到达最后一层。这可能吗?
是的,这是可能的,但这不是标准方法,可能需要一些手动干预。 PyTorch 处理梯度的典型方法是使用 loss.backward() 一次性计算所有梯度。您可以通过手动控制计算图和梯度来实现您的要求。
first a Forward Pass then a Layer-by-Layer Backward Pass