torch.autograd.backward¶
- torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None, inputs=None)[源代码]¶
计算给定张量相对于图叶的梯度之和。
该图使用链式法则进行微分。如果任何一个
张量是非标量(即它们的数据包含多个元素)并且需要 梯度,那么将计算雅可比向量积,在这种情况下,函数还需要指定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。- Parameters
grad_tensors (Sequence[Tensor 或 None] 或 Tensor, 可选) – 雅可比向量积中的“向量”,通常是相对于相应张量每个元素的梯度。对于标量张量或不需要梯度的张量,可以指定 None 值。如果所有 grad_tensors 都可以接受 None 值,则此参数是可选的。
retain_graph (bool, 可选) – 如果
False,用于计算梯度的图将被释放。请注意,在几乎所有情况下,将此选项设置为True是不必要的,通常可以通过更高效的方式解决。默认为create_graph的值。create_graph (bool, 可选) – 如果
True,将构建导数的图,允许计算高阶导数乘积。默认为False。输入(序列[张量] 或 张量 或 序列[梯度边],可选) – 相对于其梯度将被累积到
.grad的输入。所有其他张量将被忽略。如果未提供,梯度将累积到所有用于计算tensors的叶子张量中。