torch.Tensor.backward¶
- Tensor.backward(gradient=None, retain_graph=None, create_graph=False, inputs=None)[source]¶
计算当前张量相对于图叶的梯度。
使用链式法则对图进行微分。如果张量是非标量(即其数据包含多个元素)并且需要梯度,则该函数还要求指定一个
gradient
。它应该是一个类型和形状匹配的张量,表示微分函数相对于self
的梯度。此函数在叶节点中累积梯度 - 您可能需要在调用它之前将
.grad
属性清零或设置为None
。有关累积梯度的内存布局的详细信息,请参阅 默认梯度布局。注意
如果您在用户指定的 CUDA 流上下文运行任何前向操作、创建
gradient
或调用backward
,请参阅 反向传递的流语义。注意
当提供
inputs
并且给定输入不是叶节点时,当前实现将调用其 grad_fn(尽管严格来说不需要获取此梯度)。这是一个用户不应依赖的实现细节。有关更多详细信息,请参阅 https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780。- 参数
gradient (Tensor, 可选) – 相对于
self
微分函数的梯度。如果self
是标量,则可以省略此参数。retain_graph (bool, 可选) – 如果为
False
,用于计算梯度的图将被释放。请注意,在几乎所有情况下,将此选项设置为 True 都是不必要的,并且通常可以通过更高效的方式解决。默认为create_graph
的值。create_graph (bool, 可选) – 如果为
True
,将构建导数图,允许计算高阶导数积。默认为False
。inputs (序列 的 Tensor, 可选) – 将累积梯度的输入。所有其他张量将被忽略。如果没有提供,则将梯度累积到用于计算
tensors
的所有叶张量中。