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 GAE、Django导出Excel的方法
Nov 24 Python
python实现2014火车票查询代码分享
Jan 10 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
python 二分查找和快速排序实例详解
Oct 13 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python时间序列按频率生成日期的方法
May 14 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
django如何自己创建一个中间件
Jul 24 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 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数组输出html表格的方法
2014/02/24 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python中设置变量访问权限的方法
2015/04/27 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
英语教学随笔感言
2014/02/20 职场文书
说明书怎么写
2014/05/06 职场文书
2015年安全生产责任书
2015/01/30 职场文书
红高粱观后感
2015/06/10 职场文书
证婚人致辞精选
2015/07/28 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS