【文档学习】Pytorch——torch.autorgrad包

torch.autograd提供了实现自动计算任意标量值函数的类别核函数,需要手动修改现有代码(需要重新定义需要计算梯度Tensor,加上关键词requires_grad=True)。本文更新于2019.06.12。

torch.autograd.backward

在这里插入图片描述

torch.autograd.grad

在这里插入图片描述

局部梯度计算失效(Locally disabling gradient computation)

torch.autograd.no_grad

在这里插入图片描述

torch.autograd.enable_grad

在这里插入图片描述

torch.autograd.set_grad_enabled(mode)

在这里插入图片描述

In-place张量操作

在autograd中支持原位操作是很难的,PyTorch也不建议大家在大多数情况下使用这些操作。autograd的缓冲区冻结和再利用策略使其非常高效,因此极少数情况下才会为了减少内存使用而进行原位操作。除非任务内存消耗非常巨大,否则绝不要使用它们。

In-place正确性检查

所有张量都会跟踪发生在其上面的原位操作,如果检查到某个张量被保存下来用于某个函数的反向传播,但是后面它又被原位修改了,再反向传播开始的时候就会报错。这也确保了,如果你调用了原位函数而没有看见错误的情况下,所有梯度的计算应该都是正确的。

Variable(弃用)

在这里插入图片描述
Variable API已经被弃用了,即在调用tensor的autograd中,不再必需Variables。Autograd自动支持requires_grad为真的张量。下面给出了具体的修改:

  • Variable(tensor)Variable(tensor, requires_grad仍在使用,但是其返回Tensor而不是Variable。
  • var.datatensor.data是同一个东西。
  • 诸如var.backward()var.detach()var.register_hook()等操作现在都被移到张量上,方法名称相同。

此外,用户也可以利用创建requires_grad=True的张量来调用factory methods, 比如torch.randn()torch.zeros()torch.ones等,用法类似:
autograd_tensor = torch.randn((2,3,4),requires_grad=True)

Tensor autograd functions

torch.Tesnor

在这里插入图片描述

backward

在这里插入图片描述

detach

在这里插入图片描述

detach_

在这里插入图片描述

grad

在这里插入图片描述

is_leaf

在这里插入图片描述

register_hook

在这里插入图片描述

requires_grad

在这里插入图片描述

retain_grad

在这里插入图片描述

Function

在这里插入图片描述

backward

在这里插入图片描述

forward

在这里插入图片描述

Numerical gradient checking

torch.autograd.gradcheck

在这里插入图片描述
在这里插入图片描述

torch.autograd.gradgradcheck

在这里插入图片描述
在这里插入图片描述

Profiler(分析工具)

autograd包含了一个分析器,可以观察模型中不同操作子的损失(CPU和GPU上的)。目前有两种实现模式:只支持CPU的profile和基于nvprof的(CPU和GPU上都注册了)emit_nvtx

torch.autograd.profiler.profile

在这里插入图片描述

export_chrome_trace

在这里插入图片描述

key_averages

在这里插入图片描述

self_cpu_times_total

在这里插入图片描述

table

在这里插入图片描述

total_average

在这里插入图片描述

torch.autograd.profiler.emit_vntx

在这里插入图片描述

前向-反向相关

在查看用Nividia Visual Profiler中的emit_nvtx创建的profile时,将反向传播操作和左营的前向传播操作联系起来有时是很困难的。为了使这个任务更容易,emit_nvtx通过级联数字信息来排序其生成物。

在正向传播过程中,每个函数范围用seq=<N>装饰,每增加一个反向函数目标就给反向传播存储一个。因此,seq-<N>标注关系每个前向传播的函数范围,从而告诉用户一个反向传播的目标是否是由前向传播函数创建的。反向传播目标接收个数为N的序列。在反向传播过程中,top-level…
在这里插入图片描述
在这里插入图片描述

双反向

在这里插入图片描述

torch.autograd.profiler.load_nvprof

在这里插入图片描述

Anomaly detection(异常检测)

torch.autograd.detect_anomaly

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

torch.autograd.set_detect_anomaly

在这里插入图片描述
更多内容,欢迎加入星球讨论。
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值