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实现将Excel转换成为image的方法
Oct 23 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
python连接mysql有哪些方法
Jun 24 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
PyQt5 QDockWidget控件应用详解
Aug 12 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
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
PHP链表操作简单示例
2016/10/15 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
prototype1.4中文手册
2006/09/22 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
vue debug 二种方法
2018/09/16 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python 合并文件的具体实例
2013/08/08 Python
Python出现segfault错误解决方法
2016/04/16 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
Python中按键来获取指定的值
2019/03/02 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
优秀员工评语
2014/02/10 职场文书
《自然之道》教学反思
2014/02/11 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
道歉的话语大全
2015/05/12 职场文书
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis