• 文档 >
  • 自动微分包 - torch.autograd >
  • torch.autograd.backward
快捷键

torch.autograd.backward

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

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

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

此函数在叶节点中累积梯度 - 在调用之前,您可能需要将 .grad 属性清零或将它们设置为 None 。有关累积梯度的内存布局的详细信息,请参阅默认梯度布局。

注意

使用此方法与 create_graph=True 将导致参数及其梯度之间创建引用循环,这可能导致内存泄漏。我们建议在创建图时使用 autograd.grad 以避免此问题。如果您必须使用此函数,请确保在使用后重置参数的 .grad 字段为 None 以断开循环并避免泄漏。

注意

如果您运行任何前向操作,请创建 grad_tensors ,并在用户指定的 CUDA 流上下文中调用 backward ,有关反向传播的流语义,请参阅。

注意

当提供 inputs 且给定输入不是叶子节点时,当前实现将调用其 grad_fn(即使严格来说不需要获取这些梯度)。这是实现细节,用户不应依赖。有关更多详细信息,请参阅 https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780。

参数:
  • 张量(Sequence[Tensor]或 Tensor 或 Sequence[GradientEdge]或 GradientEdge)- 将计算其导数的张量。

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

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

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

  • inputs (Sequence[Tensor] 或 Tensor 或 Sequence[GradientEdge],可选) – 梯度将累积到 .grad 的输入。所有其他 Tensor 都将被忽略。如果不提供,则梯度将累积到用于计算 tensors 的所有叶 Tensor。


© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,主题由 Read the Docs 提供。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

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

查看资源