参考 Automatic differentiation package - torch.autograd - 云+社区 - 腾讯云
torch.autograd提供实现任意标量值函数的自动微分的类和函数。它只需要对现有代码进行最小的更改—您只需要声明张量s,对于该张量,应该使用requires_grad=True关键字计算梯度。
torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None)[source]
计算给定张量w.r.t.图叶的梯度和。用链式法则对图求导。如果任何张量是非标量的(即它们的数据有多个元素),并且需要梯度,那么将计算雅可比向量积,在这种情况下,函数还需要指定grad_tensors。它应该是一个长度匹配的序列,包含雅可比向量积中的“向量”,通常是微分函数w.r.t.对应的张量的梯度(对于所有不需要梯度张量的张量,None都是可接受的值)。这个函数在叶子中积累梯度——您可能需要在调用它之前将它们归零。
参数
-
tensors (sequence of Tensor) – 将计算其导数的张量。
-
grad_tensors (sequence of (Tensor or None)) – 雅可比向量积中的“向量”,通常是对相应张量的每个元素的w.r.t.梯度。对于标量张量或不需要grad的张量,不能指定任何值。如果一个None值对所有grad_tensors都是可接受的,那么这个参数是可选的。
-
retain_graph (bool, optional) – 如果为False,用于计算grad的图将被释放。请注意,几乎在所有情况下,都不需要将此选项设置为True,而且通常可以以更有效的方式解决此问题。默认值为create_graph。
-
create_graph (bool, optional) – 如果为真,将构造导数的图,从而计算高阶导数乘积。默认值为False。
torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)[source]
计算并返回输出梯度和输入梯度的和。grad_output应该是包含Jacobian-vector积中的“向量”的长度匹配输出序列,通常是预先计算的梯度w.r.t。如果输出不需要require_grad,则梯度可以为None)。如果only_input为真,函数将只返回梯度w.r的列表。t指定的输入。如果为False,那么梯度w.r.t.仍然会计算所有剩余的叶子,并将其累积到.grad属性中。
Parameters
-
outputs (sequence of Tensor) – 微分函数的输出。
-
inputs (sequence of Tensor) – 输入w.r.t.,梯度将返回(而不是累积到.grad中)。
-
grad_outputs (sequence of Tensor) – 雅可比向量积中的“向量”。通常对每个输出进行w.r.t.梯度。对于标量张量或不需要grad的张量,不能指定任何值。如果一个None值对所有grad_tensors都是可接受的,那么这个参数是可选的。默认值:没有。
-
retain_graph (bool, optional) – 如果为False,用于计算grad的图将被释放。请注意,几乎在所有情况下,都不需要将此选项设置为True,而且通常可以以更有效的方式解决此问题。默认值为create_graph。
-
create_graph (bool, optional) – 如果为真,将构造导数的图,从而计算高阶导数乘积。默认值:False。
-
allow_unused (bool, optional) – 如果为False,则指定计算输出时未使用的输入(因此它们的grad始终为零)是错误的。默认值为False。
Locally disabling gradient computation
class torch.autograd.
no_grad
[source]
上下文管理器,禁用梯度计算。当您确信不会调用tensor.backr()时,禁用梯度计算对于推断非常有用。它将减少计算的内存消耗,否则,requires_grad=True。在这种模式下,即使输入requires_grad=True,每个计算的结果都将是requires_grad=False。当使用enable_grad上下文管理器时,此模式没有效果。它不会影响其他线程中的计算。还可以用作装饰器。
Example:
>>> x = torch.tensor([1], requires_grad=True)
>>> with torch.no_grad():
... y = x * 2
>>> y.requires_grad
False
>>> @torch.no_grad()
... def doubler(x):
... return x * 2
>>> z = doubler(x)
>>> z.requires_grad
False
class torch.autograd.
enable_grad
[source]
上下文管理器,支持梯度计算。如果通过no_grad或set_grad_enabled禁用梯度计算,则启用梯度计算。这个上下文管理器是线程本地的;它不会影响其他线程中的计算。还可以用作装饰器。
例:
>>> x = torch.tensor([1], requires_grad=True)
>>> with torch.no_grad():
... with torch.enable_grad():
... y = x * 2
>>> y.requires_grad
True
>>> y.backward()
>>> x.grad
>>> @torch.enable_grad()
... def doubler(x):
... return x * 2
>>> with torch.no_grad():
... z = doubler(x)
>>> z.requires_grad
True
class torch.autograd.
set_grad_enabled
(mode)[source]
将梯度计算设置为on或off.set_grad_enabled的上下文管理器将根据其参数模式启用或禁用梯度。它可以用作上下文管理器或函数。当使用enable_grad上下文管理器时,set_grad_enabled(False)没有效果。这个上下文管理器是线程本地的;它不会影响其他线程中的计算。
Parameters
mode (bool) – Flag whether to enable grad (True
), or disable (False
). This can be used to conditionally enable gradients.
Example:
>>> x = torch.tensor([1],