前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyTorch 60分钟入门系列之自动求导

PyTorch 60分钟入门系列之自动求导

作者头像
AI异构
发布2020-07-29 15:00:40
3550
发布2020-07-29 15:00:40
举报
文章被收录于专栏:AI异构AI异构

Autograd:自动求导

在PyTorch中所有神经网络的核心是autograd软件包。我们先来简单介绍一下这个,然后再构建第一个神经网络。 autograd包为Tensors上的所有操作提供了自动求导。它是一个运行过程中定义的框架(define-by-run),这意味着反向传播是由代码的运行方式来定义的,并且每一次迭代都可能不同。

张量(Tensor)->0.4版本前是Variable

torch.Tensor是包的中心类。如果你将属性.requires_grad设置为True,它将开始追踪所有的操作。当你完成了计算过程,你可以调用.backward(),之后所有的梯度计算都是自动的。Tensor的梯度将累积到.grad属性中。

要停止跟踪历史记录的Tensor,可以调用.detach()将其从计算历史记录中分离出来,并防止跟踪将来的计算。

为了防止跟踪历史记录(和使用内存),你也可以用torch.no_grad()包装代码块。 这在评估模型时特别有用,因为该模型可能具有require_grad = True的可训练参数,但我们不需要梯度值。

还有一个类对于autograd实现非常重要:一个Function

TensorFunction是相互关联的,并建立一个非循环图,它编码构建了完整的计算过程。 每个变量都有一个.grad_fn属性,该属性反应在已创建Tensor的函数上(用户创建的Tensor除外 - 它们的grad_fnNone)。

如果你想计算导数,可以在Tensor上调用.backward()。如果Tensor是个标量(一个单元素数据),那么你不用为backward()指定任何参数,然而如果它有多个元素,你需要指定一个gradient参数,它是一个匹配尺寸的Tensor

.requires_grad_(...)就地更改现有张量的requires_grad标志。如果没有给出,函数输入标志默认为True。需要注意的是:python 的默认参数,调用的时候,test( ) 与 test(True)等价跟内部flag默认值无关。从打印看,内部flag默认值是False,但是输出结果flag为True

梯度(Gradients)

让我们使用反向传播out.backward(),它等同于out.backward(torch.Tensor(1))。

4.5矩阵的计算过程如下所示:

我们还可以使用autograd做一些疯狂的事情!

我们还可以通过使用torch.no_grad()包装代码块来停止autograd跟踪在张量上的历史记录,其中require_grad = True

参考

Deep Learning with PyTorch: A 60 Minute Blitz(https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI异构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Autograd:自动求导
    • 张量(Tensor)->0.4版本前是Variable
      • 梯度(Gradients)
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档