快捷方式

torch.autograd.backward

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

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

使用链式法则对图进行微分。如果任何 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] or Tensor) – 将计算其导数的张量。

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

  • retain_graph (bool, optional) – 如果 False,则将释放用于计算梯度的图。请注意,在几乎所有情况下,将此选项设置为 True 都是不需要的,并且通常可以通过更有效的方式解决。默认为 create_graph 的值。

  • create_graph (bool, optional) – 如果 True,则将构建导数的图,允许计算更高阶的导数积。默认为 False

  • 输入Sequence[张量] 或 张量Sequence[梯度边]可选) – 将要累积梯度的输入,累积到 .grad 中。所有其他张量将被忽略。如果未提供,则梯度将累积到用于计算 tensors 的所有叶子张量中。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源