目录

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入门:计算图相关推荐

  1. tensorflow 入门

    基本使用 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

  2. Tensorflow入门——训练结果的保存与加载

    2019独角兽企业重金招聘Python工程师标准>>> 训练完成以后我们就可以直接使用训练好的模板进行预测了 但是每次在预测之前都要进行训练,不是一个常规操作,毕竟有些复杂的模型需要 ...

  3. TensorFlow入门:第一个机器学习Demo

    TensorFlow入门:第一个机器学习Demo 2017年12月13日 20:10:23 阅读数:8604 本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,因 ...

  4. 从 TensorFlow 入门机器学习

    写在前面:紧跟时代步伐,开始学习机器学习,抱着争取在毕业之前多看看各个方向是什么样子的心态,发现这是一个很有潜力也很有趣的领域(keng).// 然后就开始补数学了-- 0 TensorFlow 介绍 ...

  5. tensorflow入门_TensorFlow法律和统计入门

    tensorflow入门 by Daniel Deutsch 由Daniel Deutsch TensorFlow法律和统计入门 (Get started with TensorFlow on law ...

  6. 吴恩达深度学习课程-Course 2 改善深层神经网络 第三周 TensorFlow入门编程作业

    虽然申请书的ddl临近,但还是先写写编程作业- 编程作业的代码用的是tf1,而我的环境为tf2,所以 TensorFlow入门 TensorFlow教程 1 - 探索Tensorflow库 1.1 - ...

  7. TensorFlow入门教程(1)安装、基础、Tensorboard

    TensorFlow入门教程 本教程适合人群: - 会些python但不是特别精通 - 机器学习的初学者 本教程预计耗时: - 2-3小时 本教程预计效果: - 掌握TensorFlow的基础操作 - ...

  8. 一文带你看懂!TensorFlow入门

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 TensorFlow入门 本文将初步向码农和程序媛们介绍如何使用TensorFlow进行编程.在阅读之前请先 安装TensorFlo ...

  9. 二、openCV+TensorFlow入门

    目录 一.openCV入门 1 - 简单图片操作 2 - 像素操作 二.TensorFlow入门 1 - TensorFlow常量变量 2 - TensorFlow运算本质 3 - TensorFlo ...

  10. TensorFlow入门笔记

    TensorFlow 入门笔记 (1)(个人学习使用) 环境配置 Ubuntu16.04(VMware Workstation Pro 14) Python2.7 TensorFlow1.3.0 Te ...

最新文章

  1. typedef的四个用途和两大陷阱
  2. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
  3. 增值税发票OCR识别
  4. PHPStorm默认在新窗口打开
  5. ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)
  6. 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...
  7. [react] react是哪个公司开发的
  8. 【目标检测】IoU、GIoU、DIoU、CIoU Loss详解及代码实现
  9. 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
  10. 网上讨论“电商平台打败了实体店”?
  11. word2vec模型
  12. [Multisim][模电实验]简易函数信号发生器的设计与实现_北京邮电大学2019级信通院电子电路实验下
  13. 几个互联网项目管理软件
  14. 计算机应用基础 第一次形成作业(计算机知识综合测试,在线答题)
  15. 【数据攻略】字节面试真题(含答案)+100道面试题库
  16. Android文档管理器
  17. WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)
  18. NVIDIA Jetson TX2 上手指南
  19. Apple Pay线上支付的流程和app应用内接入的方法
  20. java加密常用的方法_JAVA MD5 加密常用 方法

热门文章

  1. RESTful Web 服务 - 寻址
  2. IO:select、poll、epoll
  3. JVM: G1和CMS的区别
  4. GitHub 为什么有些时候进去特变慢
  5. 在servlet中设置的字符编码集为什么还会出现乱码(亲测)
  6. fileviewfinder.php,Laravel在FileViewFinder.php中查找视图的错误处理程序
  7. java随机数转换_Java获取随机数的3种方法(转)
  8. 数据中心消防设施常见安装间距汇总
  9. 数据中心业务价值永续的密码——施耐德电气全生命周期服务
  10. Py之Xlrd:Xlrd简介、安装、使用方法(读取xlsx文件的shee表头名/总行数/总列数、每一行的内容、指定列的内容)之详细攻略