Automatic differentiation package - torch.autograd

参考  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],
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanderer001

ROIAlign原理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值