torch.autograd.backward

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None, inputs=None)[源代码]

计算给定张量相对于图中叶子节点的梯度总和。

使用链式法则对图进行求导。如果 tensors 中的任何张量是非标量(即它们的数据包含多个元素),并且需要梯度,则会计算雅可比矩阵-向量积。在这种情况下,该函数还需要指定一个长度匹配的序列 grad_tensors,其中包含雅可比矩阵-向量积中的“向量”,通常是相对于相应张量求导得到的梯度。对于不需要梯度张量的所有张量,None 是一个有效的值。

此函数会在叶子节点中累积梯度 - 在调用之前,你需要将.grad属性设置为零或None。有关累积梯度的内存布局详情,请参见默认梯度布局

注意

当使用create_graph=True时,此方法会在参数及其梯度之间创建一个引用循环,可能导致内存泄漏。我们建议在创建图时使用autograd.grad来避免这种情况。如果必须使用此函数,请确保在使用后将参数的.grad字段重置为None,以打破循环并防止内存泄漏。

注意

如果你在用户指定的CUDA流上下文中执行前向操作、创建grad_tensors,以及调用backward,请参见反向传递的流语义

注意

当提供inputs且给定输入不是叶子节点时,当前实现会调用其grad_fn(尽管严格来说不需要这样做来获取梯度)。这是用户不应依赖的内部实现细节。更多详情请参见https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780

参数
  • tensors (Sequence[Tensor] 或 Tensor) – 用于计算导数的张量。

  • grad_tensors (Sequence[Tensor or None] or Tensor, 可选) – 在雅可比矩阵-向量积中的“向量”,通常是相对于相应张量的每个元素的梯度。对于标量张量或不需要计算梯度的张量,可以指定 None 值。如果所有 grad_tensors 的值都可以为 None,则此参数是可选的。

  • retain_graph (bool, optional) – 如果为 False,用于计算梯度的图将被释放。注意,在绝大多数情况下设置此选项为 True 是不必要的,并且通常可以使用更有效的方法解决。默认值与 create_graph 的值相同。

  • create_graph (bool, 可选) – 如果设置为 True,将构建导数的图,从而可以计算更高阶的导数乘积。默认值为 False

  • inputs (Sequence[Tensor] 或 TensorSequence[GradientEdge], 可选) – 需要计算梯度的输入,这些输入的梯度将被累积到 .grad 中。如果没有提供,则所有用于计算 tensors 的叶 Tensor 将被默认选择。

本页目录