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。- 参数
-
-
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] 或 Tensor 或 Sequence[GradientEdge], 可选) – 需要计算梯度的输入,这些输入的梯度将被累积到
.grad
中。如果没有提供,则所有用于计算tensors
的叶 Tensor 将被默认选择。