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(即使获取此梯度并非严格必需)。这是用户不应依赖的实现细节。有关更多详细信息,请参阅 pytorch/pytorch#60521。- 参数
tensors (Sequence[Tensor] or Tensor or Sequence[GradientEdge] or GradientEdge) – 将计算其导数的张量。
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
。inputs (Sequence[Tensor] or Tensor or Sequence[GradientEdge], optional) – 将梯度累积到
.grad
中的输入。所有其他张量将被忽略。如果未提供,则梯度会累积到用于计算tensors
的所有叶子张量中。