【PyTorch】计算图与动态图机制

计算图

Computational Graph

深度学习就是对张量进行一系列的操作,随着操作种类和数量的增多,会出现各种值得思考的问题。比如多个操作之间是否可以并行,如何协同底层的不同设备,如何避免冗余的操作,以实现最高效的计算效率,同时避免一些 bug。因此产生了计算图 (Computational Graph)。

基本概率

计算图是用来描述运算的有向无环图。
计算图有两个主要元素:结点(Node)和(Edge)。
结点表示数据,如向量、矩阵、张量
边表示运算,如加减乘除卷积等

用计算图表示:
y = (x + w) * (w + 1)
a = x + w
b = w + 1
y = a * b
在这里插入图片描述

计算图与梯度求导

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

y = (x + w) * (w + 1)

叶子结点:用户创建的结点成为叶子节点,如x与w
在这里插入图片描述
is_leaf:表示张量是否为叶子结点
grad_fn:记录创建该张量时所用的方法(函数)
在这里插入图片描述

PyTorch 的动态图机制

PyTorch 采用的是动态图机制 (Dynamic Computational Graph),而 Tensorflow 采用的是静态图机制 (Static Computational Graph)。
在这里插入图片描述

动态图 vs 静态图

Dynamic VS Static Computational Graphs
根据计算图搭建方式,可将计算图分为动态图和静态图。
在这里插入图片描述

动态图是运算和搭建同时进行,也就是可以先计算前面的节点的值,再根据这些值搭建后面的计算图。优点是灵活,易调节,易调试。PyTorch 里的很多写法跟其他 Python 库的代码的使用方法是完全一致的,没有任何额外的学习成本。

静态图是先搭建图,然后再输入数据进行运算。优点是高效,因为静态计算是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。但是不灵活。TensorFlow 每次运行的时候图都是一样的,是不能够改变的,所以不能直接使用 Python 的 while 循环语句,需要使用辅助函数 tf.while_loop 写成 TensorFlow 内部的形式。

参考链接

PyTorch 学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bosenya12

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值