pytorch 动态图机制
一、动态图的推导
(1)计算图:是用来描述运算的有向无环图
(2)计算图有两个主要元素:结点(Node)和边(Edge)
(3)结点(Node):表示数据,如向量、矩阵、张量
(4)边(Edge):表示运算,如加、减、乘、除、卷积
示例图如下:
由图可知:y=a*b,其中a=x+w,b=w+1,因此y=a*b=(x+w)(w+1),a和b充当中间变量,pytorch
在计算的时候,会把计算过程用上面的动态图存储起来,计算y关于w的导数,如下:
上试中令w=1,x=2
采用pytorch进行代码实现,其过程如下:
import torch
w=torch.tensor([1.],requires_grad=True)
x=torch.tensor([2.],requires_grad=True)
a=w+x
b=w+1
y=a*b
y.backward()
print(w.grad)
输出结果:
tensor([5.])
在上图中,w和x是叶子节点,是整个计算图的根基。之所以采用叶子节点的概念,是为了角少内存,在反向传播结束之后,非叶子节点的的梯度会被释放,我们采用上述例子进行讲解:
import torch
w=torch.tensor([1.],requires_grad=True)
x=torch.tensor([2.],requires_grad=True)
a=w+x
b=w+1
y=a*b
y.backward()
print(w.is_leaf,x.is_leaf,a.is_leaf,b.is_leaf,y.is_leaf)
print(w.grad,x.grad,a.grad,b.grad,y.grad)
输出:
True True False False False
tensor([5.]) tensor([2.]) None None None
可以看出只有x和w是叶子节点,同时进行反向传播之后只有叶子节点值保存下来。
二、grand_fn
torch.tensor
有一个属性grad_fn
,grad_fn
的作用是记录创建该张量时所用的函数,这个属性反向传播的时候会用到。例如在上面的例子中,y.grad_fn=MulBackward0
,表示y是通过乘法得到的。所以求导的时候就是用乘法的求导法则。同样的,a.grad=AddBackward0
表示a是通过加法得到的,使用加法:
import torch
w=torch.tensor([1.],requires_grad=True)
x=torch.tensor([2.],requires_grad=True)
a=w+x
b=w+1
y=a*b
y.backward()
print(a.grad_fn)
print(b.grad_fn)
print(y.grad_fn)
print(w.grad_fn)
输出:
<AddBackward0 object at 0x0000023590AAB320>
<AddBackward0 object at 0x0000023590AAB240>
<MulBackward0 object at 0x0000023590AAFEF0>
None
由上述可知叶子节点的.grad_fn
是None。三、静态图
pytorch 动态图机制相关推荐
- PyTorch框架学习四——计算图与动态图机制
PyTorch框架学习四--计算图与动态图机制 一.计算图 二.动态图与静态图 三.torch.autograd 1.torch.autograd.backward() 2.torch.autogra ...
- 【PyTorch 】静态图与动态图机制
[PyTorch 学习笔记] 1.4 静态图与动态图机制 - 知乎 PyTorch 的动态图机制 PyTorch 采用的是动态图机制 (Dynamic Computational Graph),而 T ...
- pytorch——计算图与动态图机制
1.计算图 计算图是用来描述运算的有向无环图: 计算图有两个主要元素:结点(Node)和边(Edge): 结点表示数据,如向量.矩阵.张量,边表示运算,如加减乘除卷积等: 用计算图表示:y=(x+w) ...
- 可能是最详尽的PyTorch动态图解析
↑ 点击蓝字 关注视学算法 作者丨Gemfield@@知乎 来源丨https://zhuanlan.zhihu.com/p/61765561.https://zhuanlan.zhihu.com/p/ ...
- 详尽 | PyTorch动态图解析
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:深度学习这件小事 背景 PyTorch的动态图框架主要是 ...
- 收藏 | 可能是最详尽的PyTorch动态图解析
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Gemfield@@知乎 来源丨https://zhu ...
- 一文详解pytorch的“动态图”与“自动微分”技术
前言 众所周知,Pytorch是一个非常流行且深受好评的深度学习训练框架.这与它的两大特性"动态图"."自动微分"有非常大的关系."动态图" ...
- 【深度学习】村通网之——谈谈Tensorflow Eager Execution机制之静态图和动态图的区别(一)
文章目录 前言 介绍 搭建静态图 搭建动态图 前言 随着TensorFlow 1.4 Eager Execution的出现,TensorFlow的使用出现了革命性的变化. 介绍 我很早就听说过这样一句 ...
- PyTorch 的 Autograd、计算图、叶子张量、inplace 操作、动态图,静态图(来自知乎)
本博文来自:https://zhuanlan.zhihu.com/p/69294347 非常感谢此博主! PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里呢 ...
- pytorch入门学习(四)-----计算图与动态图
计算图: 用来描述运算的有向无环图有两个主要元素,结点note 边edge结点表示数据,如向量,矩阵,张量边表示运算,如加减乘除使用计算图主要是为了求导方便, 只需要沿着计算图的方向找到需要求导对象的 ...
最新文章
- 怎么设计一个合适的延时队列?
- linux 脚本判断一个目录不存在
- linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改
- OpenGL着色器基础
- win7下简单FTP服务器搭建
- PAT甲级题目翻译+答案 AcWing(高精度)
- 关情纸尾-----UIKit基础--QQ自定义布心布局
- HTML特殊符号/特殊字符
- PHP array_count_values() 函数用于统计数组中所有值出现的次数。
- php百度坐标转腾讯坐标,PHP腾讯与百度坐标转换
- 在线JSON压缩工具
- Java好学吗?Java能做什么?如何快速入门Java?
- linux waitpid子进程,关于waitpid()函数的问题,为什么最后子进程没退出来啊?...
- 追赶法 matlab编程,科学网—数值分析----三对角方程组的追赶法matlab程序 - 殷春武的博文...
- html5 cuplayer,PlayerLite免费flv与mp4网页视频播放器
- 合唱队形c语言编程,洛谷 P1091 合唱队形
- Debian旧版本下载
- 最大数 (Java算法每日一题)
- Python模糊匹配 | 刷英语六级段落匹配只需要3秒?
- 【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)