pytorch入门教程 | 第二章:Autograd

autograd自动微分

假如我们有一个向量x=(1,1)当成input,经过一系列运算得到了output变量y,如下图所示:

如图所示,向量x经过与4和自身相乘之后得到向量z,z再求长度,得到y

我们想要求y关于x的微分时,pytorch会帮我们自动求解。

>>>from torch.autograd import Variable >>>import torch >>>x = Variable(torch.ones(2), requires_grad = True) #vairable是tensor的一个外包装 >>>z=4*x*x >>>y=z.norm() >>>y Variable containing: 5.6569 [torch.FloatTensor of size 1] 我们可以看到y的值与我们上图计算的结果一致

需要注意:autograd是专门为了BP算法设计的,所以这autograd只对输出值为标量的有用,因为损失函数的输出是一个标量。如果y是一个向量,那么backward()函数就会失效。不知道BP算法是什么的同学,估计也不知道什么是深度学习,建议先看Zen君提供的教材。

autograd的内部机理

我们之所以可以实现autograd多亏了Variable和Function这两种数据类型的功劳。要进行autograd必需先将tensor数据包成Variable。Varibale和tensor基本一致,所区别在于多了下面几个属性。

variable是tensor的外包装,variable类型变量的data属性存储着tensor数据,grad属性存储关于该变量的导数,creator是代表该变量的创造者

variable和function它们是彼此不分开的,先上图:

数据向前传输和向后传输生成导数的过程示意图

如图,假设我们有一个输入变量input(数据类型为Variable)input是用户输入的,所以其创造者creator为null值,input经过第一个数据操作operation1(比如加减乘除运算)得到output1变量(数据类型仍为Variable),这个过程中会自动生成一个function1的变量(数据类型为Function的一个实例),而output1的创造者就是这个function1。随后,output1再经过一个数据操作生成output2,这个过程也会生成另外一个实例function2,output2的创造者creator为function2。

在这个向前传播的过程中,function1和function2记录了数据input的所有操作历史,当output2运行其backward函数时,会使得function2和function1自动反向计算input的导数值并存储在grad属性中。

creator为null的变量才能被返回导数,比如input,若把整个操作流看成是一张图(Graph),那么像input这种creator为null的被称之为图的叶子(graph leaf)。而creator非null的变量比如output1和output2,是不能被返回导数的,它们的grad均为0。所以只有叶子节点才能被autograd。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

HDU3440 House Man

题意:有n栋房子,给出每栋房子的高度和开始时的相对位置,可以移动一些房子,但不能改变这些房子的相对位置,现在从最矮的房子开始,每次跳至比它高的第一栋房子, 而且...

2646
来自专栏AI研习社

如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程

AI 研习社按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI 研习社编译。 ? Jaso...

2757
来自专栏数据结构与算法

洛谷P3273 [SCOI2011]棘手的操作

题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第...

3137
来自专栏数据结构与算法

洛谷P2503 [HAOI2006]均分数据(模拟退火)

1460
来自专栏mathor

给定一个数组,求子数组的最大异或和

 直接说这道题时间复杂度O(n)的做法,构建前缀树。假设将0-0、0-1、0-2、...、0-i-1的异或结果全部装在前缀树中,那么以i结尾的最大异或和就是0到...

151
来自专栏数据结构与算法

LOJ #108. 多项式乘法

内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 这是一道...

3238
来自专栏瓜大三哥

matlab基础2

Matlab基本运算 数组: 数组的乘法和除法分别用“.*”和“./”表示。右除和左除的关系为:A./B=B.\A,其中A是被除数,B是除数。 size()和l...

2115
来自专栏北京马哥教育

Python神技能:六张表 搞定 Xpath 语法

1255
来自专栏Spark学习技巧

SparkMLlib的数据类型讲解

SparkMLlib的数据类型讲解 Mllib支持单机上存储的本地向量和矩阵,也支持由一个或者多个RDD支持的分布式矩阵。本地向量和本地矩阵是简单的数据模型,用...

2227
来自专栏有趣的Python

3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门

tensorflow基础入门 思考一个问题: 如何刚好学习TensorFlow 类比为一门开发语言,学会语法,api的调用, 原理性掌握。 语言的要素: 基础...

6408

扫描关注云+社区