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的条件语句与运算符优先级详解
Oct 13 Python
轻松实现python搭建微信公众平台
Feb 16 Python
python中pip的安装与使用教程
Aug 10 Python
python实现顺时针打印矩阵
Mar 02 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python psutil监控进程实例
Dec 17 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
Python操作注册表详细步骤介绍
Feb 05 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
python ssh 执行shell命令的示例
Sep 29 Python
关于Python使用turtle库画任意图的问题
Apr 01 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
数据库的日期格式转换
2006/10/09 PHP
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
php处理带有中文URL的方法
2016/07/11 PHP
js控制框架刷新
2008/08/01 Javascript
js 目录列举函数
2008/11/06 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
编写简单的Python程序来判断文本的语种
2015/04/07 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python文件操作函数用法实例详解
2019/12/24 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
教你怎样写好自我评价
2013/10/05 职场文书
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
党员党性分析材料
2014/02/17 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
办公室卫生管理制度
2015/08/04 职场文书
2019个人半年工作总结
2019/06/21 职场文书
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis