TensorFlow中的计算图

原文链接: https://bss.csdn.net/m/zone/bdtc2019?utm_source=aicamp

TensorFlow中的计算图_第1张图片

作者 | stephenDC

来源 | 大数据与人工智能(ID:ai-big-data

1 什么是计算图?

一个机器学习任务的核心是模型的定义以及模型的参数求解方式,对这两者进行抽象之后,可以确定一个唯一的计算逻辑,将这个逻辑用图表示,称之为计算图。计算图表现为有向无环图,定义了数据的流转方式,数据的计算方式,以及各种计算之间的相互依赖关系等。
      

2 计算图的基本组成

TensorFlow的计算图粒度比较细,由节点和有向边组成(后来也加入了层)。相比之下,腾讯的开源机器学习平台Angel,其计算图的粒度较粗,由层(Layer)组成。很明显,粒度越细,灵活性越好;粒度越粗,开发效率越高。用Angel手动搭建模型,层层堆叠,几行代码就够了(事实上,Angel借鉴了Caffe的方式,可以直接读取Json文件,生成深度网络);但限制在于,只能使用官方已经实现的Layer,因此诸如RNN和DNN,Angel目前是不支持的,开发者也无法自己实现。因此,开发者可以根据自己的不同需求,选择相应的平台。

下面,我们简要介绍一下TensorFlow的基本组成,即节点和有向边。

2.1 节点
    
基于梯度下降求解的机器学习问题,一般分为前向求值和后向求梯度两个过程。其中,前向过程由用户指定,包括模型定义,目标函数、损失函数、激活函数的选取等;后向的计算过程,包括计算梯度,更新梯度等,在优化器中已经由TensorFlow实现,用户不必关心。

前向图中的节点,根据功能主要分为计算节点(Operation)、存储节点(Variable)和数据节点(Placeholder)3类

Operation :对应无状态的计算或控制操作,主要负责算法逻辑表达或者流程控制。

Variable :对应有状态的变量操作,通常用来存储模型参数。

Placeholder :用于定义输入数据的类型和形状等属性,是对数据的统一抽象。

后向图中的节点,也可以分为3类,如下:

梯度 :迭代过程中,模型参数的梯度。
参数更新操作: 根据优化器的优化算法,结合梯度更新相应的模型参数。
更新后的参数 :更新后的模型参数,用于模型的下一轮训练。

2.2 
    
计算图中的边是有向边,定义了操作之间的关系,分为两类:一类用来传输数据,称为数据边;另一类用来定义依赖关系,称为控制边。
 
所有的节点都通过数据边或者控制边连接,其中入度为0的节点没有前置依赖,可以立即执行;入度大于0的节点,要等待其依赖的所有节点执行结束之后,才可以执行。

3 计算图的运行

TensorFlow中可以定义多个计算图,不同计算图上的张量和运算相互独立,因此每一个计算图都是一个独立的计算逻辑。

3.1 图的启动
    
启动计算图的第一步是创建一个会话(Session)对象,如果没有任何的创建参数,会话构造器将启动默认图。一个Session可以运行多个计算图,一个计算图也可以在多个Session中运行。

3.2 运行方式
    
简单来说,计算图的运行参考了拓扑排序的思想,可以分为如下4个步骤:

  1. 以节点名称作为关键字、入度作为值,创建一张哈希表,并将此计算图中的所有节点放入哈希表中。
  2. 为此计算图创建一个可执行节点队列,将哈希表中入度为0的节点加入该队列,并从节点哈希表中删除这些节点。
  3. 依次执行队列中的每一个节点,执行成功之后将此节点输出指向的节点的入度减1,更新哈希表中对应节点的入度。
  4. 重复(2)和(3),直至可执行队列为空。
 
对于步骤(3)来说,可执行队列中的节点在资源允许的情况下,是可以并行执行。TensorFlow有灵活的硬件调度机制,来高效利用资源。

3.3 硬件调度 

在实现上,TensorFlow 将图形定义转换成分布式执行的操作,以充分利用可用的计算资源(如CPU或GPU)。一般你不需要显式指定使用CPU还是GPU,TensorFlow 能自动检测。如果检测到 GPU,TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作。
 
如果机器上有超过一个可用的 GPU,除第一个外的其它GPU默认是不参与计算的。为了让TensorFlow使用这些 GPU,开发者可以用with tf.device()语句将Operation明确指派给特定的CPU或GPU 来执行。

参考文献:

《深入理解TensorFlow架构设计与实现原理》 彭靖田、林健、白小龙
http://www.tensorfly.cn/tfdoc/get_started/basic_usage.html
https://blog.csdn.net/dcrmg/article/details/79028032

(*本文为 AI科技大本营转载文章, 载请微 信联系 1092722531


精彩推荐


2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。

即日起,限量 5 折票开售,数量有限,扫码购买,先到先得!

TensorFlow中的计算图_第2张图片

推荐阅读

  • 人体姿态估计的过去、现在和未来

  • 图灵奖得主Bengio再次警示:可解释因果关系是深度学习发展的当务之急

  • 技术领域有哪些接地气又好玩的应用?

  • Python新工具:用三行代码提取PDF表格数据

  • 国产嵌入式操作系统发展思考

  • 2019 年诺贝尔物理学奖揭晓!三得主让宇宙“彻底改观”!

  • 公链故事难再续?

  • 使用Vue.js开发微信小程序:开源框架mpvue解析

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

你可能感兴趣的:(TensorFlow中的计算图)