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出现_warn_unsafe_extraction问题的方法
Mar 24 Python
python+pyqt实现右下角弹出框
Oct 26 Python
Django如何防止定时任务并发浅析
May 14 Python
Python 20行简单实现有道在线翻译的详解
May 15 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
python学生管理系统的实现
Apr 05 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
浅谈python锁与死锁问题
Aug 14 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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中require和include路径问题详解
2014/12/25 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
JS简单获得节点元素的方法示例
2018/02/10 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Unicode和Python的中文处理
2017/03/19 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
python如何读写json数据
2018/03/21 Python
python读取LMDB中图像的方法
2018/07/02 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
对python 自定义协议的方法详解
2019/02/13 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
迎新生晚会主持词
2015/06/30 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers