PyTorch学习:动态图和静态图的例子


Posted in Python onJanuary 06, 2020

动态图和静态图

目前神经网络框架分为静态图框架和动态图框架,PyTorch 和 TensorFlow、Caffe 等框架最大的区别就是他们拥有不同的计算图表现形式。 TensorFlow 使用静态图,这意味着我们先定义计算图,然后不断使用它,而在 PyTorch 中,每次都会重新构建一个新的计算图。通过这次课程,我们会了解静态图和动态图之间的优缺点。

对于使用者来说,两种形式的计算图有着非常大的区别,同时静态图和动态图都有他们各自的优点,比如动态图比较方便debug,使用者能够用任何他们喜欢的方式进行debug,同时非常直观,而静态图是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。

# tensorflow
import tensorflow as tf
first_counter = tf.constant(0)
second_counter = tf.constant(10)
# tensorflow
import tensorflow as tf
first_counter = tf.constant(0)
second_counter = tf.constant(10)
def cond(first_counter, second_counter, *args):
  return first_counter < second_counter
def body(first_counter, second_counter):
  first_counter = tf.add(first_counter, 2)
  second_counter = tf.add(second_counter, 1)
  return first_counter, second_counter
c1, c2 = tf.while_loop(cond, body, [first_counter, second_counter])
with tf.Session() as sess:
  counter_1_res, counter_2_res = sess.run([c1, c2])
print(counter_1_res)
print(counter_2_res)

可以看到 TensorFlow 需要将整个图构建成静态的,换句话说,每次运行的时候图都是一样的,是不能够改变的,所以不能直接使用 Python 的 while 循环语句,需要使用辅助函数 tf.while_loop 写成 TensorFlow 内部的形式

# pytorch
import torch
first_counter = torch.Tensor([0])
second_counter = torch.Tensor([10])
 
while (first_counter < second_counter)[0]:
  first_counter += 2
  second_counter += 1
 
print(first_counter)
print(second_counter)

可以看到 PyTorch 的写法跟 Python 的写法是完全一致的,没有任何额外的学习成本

以上这篇PyTorch学习:动态图和静态图的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python sort、sorted高级排序技巧
Nov 21 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
python读取文本绘制动态速度曲线
Jun 21 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
centos7中安装python3.6.4的教程
Dec 11 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
python游戏开发的五个案例分享
Mar 09 Python
Python一行代码实现自动发邮件功能
May 30 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
pytorch动态网络以及权重共享实例
Jan 06 #Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 #Python
pytorch中的自定义反向传播,求导实例
Jan 06 #Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 #Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 #Python
基于python+selenium的二次封装的实现
Jan 06 #Python
Python使用Tkinter实现滚动抽奖器效果
Jan 06 #Python
You might like
Zerg建筑一览
2020/03/14 星际争霸
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
基于JQUERY的多级联动代码
2012/01/24 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python实现简单的计时器功能函数
2015/03/14 Python
Python运算符重载用法实例分析
2015/06/01 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
小学毕业感言500字
2014/02/28 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
老师对学生的寄语
2014/04/09 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
商业门面租房协议书
2014/11/25 职场文书
以权谋私检举信范文
2015/03/02 职场文书