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中sleep函数用法实例分析
Apr 29 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
树莓派实现移动拍照
Jun 22 Python
python 实现将多条曲线画在一幅图上的方法
Jul 07 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
解决Python对齐文本字符串问题
Aug 28 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
Python headers请求头如何实现快速添加
Nov 03 Python
如何利用Python写个坦克大战
Nov 18 Python
Python自然语言处理之切分算法详解
Apr 25 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
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python实现Floyd算法
2018/01/03 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Python实现自动装机功能案例分析
2020/10/22 Python
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
Why we need EJB
2016/10/20 面试题
法人授权委托书格式
2014/04/08 职场文书
吨的认识教学反思
2014/04/27 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
Oracle笔记
2021/04/05 Oracle
Tomcat配置访问日志和线程数
2022/05/06 Servers