评价此页
★★★★★

torch.Tensor.backward#

Tensor.backward(gradient=None, retain_graph=None, create_graph=False, inputs=None)[source]#

计算当前张量相对于图叶的梯度。

使用链式法则对计算图进行微分。如果张量是非标量(即其数据元素多于一个)并且需要梯度,则该函数还需要指定一个 gradient。它应该是与 self 类型和形状匹配的张量,代表已微分函数相对于 self 的梯度。

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

注意

如果您在用户指定的 CUDA 流上下文中运行任何前向操作、创建 gradient 和/或调用 backward,请参阅 反向传播的流语义

注意

当提供了 inputs 并且给定的输入不是叶节点时,当前实现将调用其 grad_fn(尽管为了获得此梯度,这不是严格必需的)。这是一个用户不应依赖的实现细节。有关更多详细信息,请参阅 pytorch/pytorch#60521

参数
  • gradient (Tensor, 可选) – 与self函数相关的导数。如果self是标量,则可以省略此参数。默认为None

  • retain_graph (bool, 可选) – 如果为False,则用于计算梯度的图将被释放;如果为True,则会被保留。默认值为None,在这种情况下,值将从create_graph中推断(即,仅在请求高阶导数跟踪时才保留图)。请注意,在几乎所有情况下,将此选项设置为True都是不必要的,并且通常可以通过更有效的方式来解决。

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

  • inputs (Sequence[Tensor], 可选) – 将梯度累积到.grad中的输入。其他所有张量将被忽略。如果未提供,梯度将累积到用于计算tensors的所有叶子张量中。默认为None