TensorFlow入门:计算图
目录
1. 介绍
2. 什么是数据流图(Data Flow Graph)?
3. 基本概念
3.1 计算图(The computation graph)
1. 构建图
2. 启动图
1. 介绍
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。它是谷歌基于DistBelief进行研发的第二代人工智能学习系统。2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。
2. 什么是数据流图(Data Flow Graph)?
数据流图用“节点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点”一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以运输“size可动态调整”的多维数组,即“张量”(tensor)。一旦输入端所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行计算。
3. 基本概念
使用TensorFlow前必须明白的基本概念:
- 图(Graph):图描述了计算的过程,TensorFlow使用图来表示计算任务。
- 张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。
- 操作(op):图中的节点被称为op(operation的缩写),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。 op=节点
- 会话(Session):图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或GPU之类的设备上执行。
- 变量(Variable):运行过程中可以被改变,用于维护状态。
3.1 计算图(The computation graph)
Tensorflow是一种计算图模型,即用图的形式来表示运算过程的一种模型。Tensorflow程序一般分为图的构建和图的执行两个阶段。构建阶段,也称为图的定义阶段,在构建阶段op的执行步骤被描述成一个图,每次运算的的结果以及原始的输入数据都可称为一个节点(operation ,缩写为op)。在执行阶段,使用会话执行图中的op。
1. 构建图
构建阶段:只在图中定义所需要的运算,而没有去执行运算
构建图的第一步是创建源op(sources op)。源op不需要任何输入,例如常量(Constant)。源op的输出被传递给其他op做运算。
在TensorFlow的Python库中,op构造器的返回值代表这个op的输出。这些返回值可以作为输入传递给其他op构造器。
TensorFlow的Python库中包含了一个默认的graph,可以在上面使用添加节点。如果你的程序需要多个graph那就需要使用Graph类管理多个graph。
import tensorflow as tf# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点,加到默认图中。构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入。返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)
默认图中包含了3个节点:两个constant() op和一个matmul() op。为了真正的执行矩阵相乘运算,并得到矩阵乘法的结果,你必须在会话中启动这个图。
2. 启动图
执行阶段:也就是在会话(session)中执行图模型中定义好的运算。
构造阶段完成后,才能在会话中启动图。启动图的第一步是创建一个Session对象。如果没有任何参数,会话构造器将启动默认图。
# 启动默认图模型
sess = tf.Session()# 调用run()方法启动、运行图模型
result = sess.run(product)
print result
# ==> [[ 12.]]# 任务完成, 关闭会话.
sess.close()# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数.
# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回
# 矩阵乘法 op 的输出.
#
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
#
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
#
# 返回值 'result' 是一个 numpy `ndarray` 对象.
Session对象在使用完成或需要关闭以释放资源。除了显示调用close外,也可以使用“with”代码块来自动完成关闭动作。
with tf.Session() as sess:
result = sess.run([product])
print result
此外,我们还可以利用CPU或GPU等计算资源分布式执行图的运算过程。一般我们无需显示的指定计算资源,Tensorflow可以自动地进行识别,如果检测到我们的GPU环境,会优先的利用GPU环境执行我们的程序。但如果我们的计算机中有多于一个可用的GPU,这就需要我们手动的指派GPU去执行特定的op。
如果检测到GPU,TensorFlow会使用第一个GPU来执行操作。如果机器上有多个GPU,除第一个GPU外的其他GPU是不参与计算的,为了使用这些GPU,你必须将op明确指派给他们执行。with…Device语句用来指派特定的CPU或GPU执行操作:
with tf.Session() as sess:with tf.device("/gpu:1"):matrix1 = tf.constant([[3., 3.]])matrix2 = tf.constant([[2.],[2.]])product = tf.matmul(matrix1, matrix2)
...
设备用字符串进行标识. 目前支持的设备包括:
- “/cpu:0”: 机器的 CPU.
- “/gpu:0”: 机器的第一个 GPU, 如果有的话.
- “/gpu:1”: 机器的第二个 GPU, 以此类推.
Tensorflow中还提供了默认会话的机制,我们通过调用函数as_default()生成默认会话。
import tensorflow as tfmatrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)sess = tf.Session()
with sess.as_default():print(sess.eval())
我们在启动默认会话后,可以通过调用eval()函数,直接输出变量的内容。
有时,我们需要在Jupyter或IPython等python交互式环境开发。Tensorflow为了满足用户的这一需求,提供了一种专门针对交互式环境开发的方法InteractiveSession():
import tensorflow as tfmatrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)sess = tf.InteractiveSession()
print(sess.eval())
以上就是交互式环境中经常会使用的InteractiveSession()方法,其创建sess对象后,可以直接输出运算结果。
为什么Tensorflow要使用图模型?图模型有什么优势呢?
首先,图模型的最大好处是节约系统开销,提高资源的利用率,可以更加高效的进行运算。因为我们在图的执行阶段,只需要运行我们需要的op,这样就大大的提高了资源的利用率;其次,这种结构有利于我们提取中间某些节点的结果,方便以后利用中间的节点去进行其它运算;还有就是这种结构对分布式运算更加友好,运算的过程可以分配给多个CPU或是GPU同时进行,提高运算效率;最后,因为图模型把运算分解成了很多个子环节,所以这种结构也让我们的求导变得更加方便。
参考:
1. Tensorflow中文社区
2. TensorFlow 教程 - 新手入门笔记
TensorFlow入门:计算图相关推荐
- tensorflow 入门
基本使用 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...
- Tensorflow入门——训练结果的保存与加载
2019独角兽企业重金招聘Python工程师标准>>> 训练完成以后我们就可以直接使用训练好的模板进行预测了 但是每次在预测之前都要进行训练,不是一个常规操作,毕竟有些复杂的模型需要 ...
- TensorFlow入门:第一个机器学习Demo
TensorFlow入门:第一个机器学习Demo 2017年12月13日 20:10:23 阅读数:8604 本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,因 ...
- 从 TensorFlow 入门机器学习
写在前面:紧跟时代步伐,开始学习机器学习,抱着争取在毕业之前多看看各个方向是什么样子的心态,发现这是一个很有潜力也很有趣的领域(keng).// 然后就开始补数学了-- 0 TensorFlow 介绍 ...
- tensorflow入门_TensorFlow法律和统计入门
tensorflow入门 by Daniel Deutsch 由Daniel Deutsch TensorFlow法律和统计入门 (Get started with TensorFlow on law ...
- 吴恩达深度学习课程-Course 2 改善深层神经网络 第三周 TensorFlow入门编程作业
虽然申请书的ddl临近,但还是先写写编程作业- 编程作业的代码用的是tf1,而我的环境为tf2,所以 TensorFlow入门 TensorFlow教程 1 - 探索Tensorflow库 1.1 - ...
- TensorFlow入门教程(1)安装、基础、Tensorboard
TensorFlow入门教程 本教程适合人群: - 会些python但不是特别精通 - 机器学习的初学者 本教程预计耗时: - 2-3小时 本教程预计效果: - 掌握TensorFlow的基础操作 - ...
- 一文带你看懂!TensorFlow入门
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 TensorFlow入门 本文将初步向码农和程序媛们介绍如何使用TensorFlow进行编程.在阅读之前请先 安装TensorFlo ...
- 二、openCV+TensorFlow入门
目录 一.openCV入门 1 - 简单图片操作 2 - 像素操作 二.TensorFlow入门 1 - TensorFlow常量变量 2 - TensorFlow运算本质 3 - TensorFlo ...
- TensorFlow入门笔记
TensorFlow 入门笔记 (1)(个人学习使用) 环境配置 Ubuntu16.04(VMware Workstation Pro 14) Python2.7 TensorFlow1.3.0 Te ...
最新文章
- typedef的四个用途和两大陷阱
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
- 增值税发票OCR识别
- PHPStorm默认在新窗口打开
- ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)
- 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...
- [react] react是哪个公司开发的
- 【目标检测】IoU、GIoU、DIoU、CIoU Loss详解及代码实现
- 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
- 网上讨论“电商平台打败了实体店”?
- word2vec模型
- [Multisim][模电实验]简易函数信号发生器的设计与实现_北京邮电大学2019级信通院电子电路实验下
- 几个互联网项目管理软件
- 计算机应用基础 第一次形成作业(计算机知识综合测试,在线答题)
- 【数据攻略】字节面试真题(含答案)+100道面试题库
- Android文档管理器
- WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)
- NVIDIA Jetson TX2 上手指南
- Apple Pay线上支付的流程和app应用内接入的方法
- java加密常用的方法_JAVA MD5 加密常用 方法
热门文章
- RESTful Web 服务 - 寻址
- IO:select、poll、epoll
- JVM: G1和CMS的区别
- GitHub 为什么有些时候进去特变慢
- 在servlet中设置的字符编码集为什么还会出现乱码(亲测)
- fileviewfinder.php,Laravel在FileViewFinder.php中查找视图的错误处理程序
- java随机数转换_Java获取随机数的3种方法(转)
- 数据中心消防设施常见安装间距汇总
- 数据中心业务价值永续的密码——施耐德电气全生命周期服务
- Py之Xlrd:Xlrd简介、安装、使用方法(读取xlsx文件的shee表头名/总行数/总列数、每一行的内容、指定列的内容)之详细攻略