torch.Tensor.backward#
- Tensor.backward(gradient=None, retain_graph=None, create_graph=False, inputs=None)[源代码]#
计算当前张量相对于图叶的梯度。
该图使用链式法则进行区分。如果张量是非标量(即其数据包含多个元素)并且需要梯度,则该函数还需要指定一个
gradient
。它应该是与self
具有匹配类型和形状的张量,代表被微分函数相对于self
的梯度。此函数会累积叶节点的梯度 — 您可能需要在调用它之前将
.grad
属性归零或将其设置为None
。有关累积梯度的内存布局的详细信息,请参阅 默认梯度布局。注意
如果您在用户指定的 CUDA 流上下文中运行任何前向操作、创建
gradient
以及/或调用backward
,请参阅 反向传播的流语义。注意
当提供了
inputs
并且给定的输入不是叶节点时,当前实现将调用其 grad_fn(尽管为了获得该梯度,这并不是严格必需的)。这是一个用户不应依赖的实现细节。有关更多详细信息,请参阅 pytorch/pytorch#60521。- 参数
gradient (Tensor, optional) – 被微分函数相对于
self
的梯度。如果self
是标量,则可以省略此参数。默认为None
。retain_graph (bool, optional) – 如果为
False
,则用于计算梯度的图将被释放;如果为True
,则将被保留。默认为None
,在这种情况下,该值是从create_graph
推断的(即,只有在请求更高阶导数跟踪时才会保留图)。请注意,在几乎所有情况下,将此选项设置为True
都是不必要的,并且通常可以通过更有效的方式解决。create_graph (bool, optional) – 如果为
True
,将构建导数的图,从而能够计算更高阶的导数积。默认为False
。inputs (Sequence[Tensor], optional) – 将在其上将梯度累积到
.grad
中的输入。所有其他张量将被忽略。如果未提供,则梯度将累积到用于计算tensors
的所有叶张量中。默认为None
。