TensorFlow数据流图

TensorFlow学习笔记(一)数据流图

TensorFlow处理的对象是图,对于图而言有两个重要的属性:边和点。在TensorFlow的数据流图中,边是有向边,指明了数据的流向,而点则代表一个个操作。

边有两类分别是张量(Tensor)和稀疏张量(Sparse Tensor)。Tensor可以简单的理解为数据,在TensorFlow中我们用于计算的数据维度都比较高,张量是对高维数据很好的一个抽象,在TensorFlow中,我们会用多维数组来形容。数据的维度越高,数据量也会随之增加,但很多时候数据的分布却比较稀疏,有的值可能为0或者对我们没有什么用处,如果全部存下来就会浪费空间,这就好比数据结构中图的存储分为邻接矩阵和邻接表,它们的思想比较类似。当我们把其中有意义的数据、高维数据的形状以及其他的诸如下标、值存储下来,而不必要存储整个数组,通过key-value的方式来表达高维数据,这就是稀疏张量。无论是张量还是稀疏张量,在数据流图中,它们都会沿着一条条有向边从一个节点流动到另一个节点。

对于节点,我们从模型训练的角度来抽象,可以分为3类,计算节点(Operation)、存储节点(Variable)、数据节点(Placeholder)。

1.计算节点(Operation)

顾名思义,计算节点就是用来计算的一些操作,除了计算之外还包括一些逻辑操作、神经网络的操作等等

2.存储节点(Variable)

Variable也是变量的意思,在TensorFlow的数据流图中有两个重要的变量:权重(W)和偏置(b),我们要做的就是在一轮轮迭代中不断更新W和b,所以说这两个模型参数会一直存在,对于这样的参数,就会用Variable的形式来存储,而普通的张量(Tensor)在使用过后就会丢弃。这就好比C/C++中的全局变量。

3.数据节点(Placeholder)

在数据流图中,当我们搭建好模型之后,其中的逻辑就已经确定了,不会再变化,但是有一些数据是从图外传递进来的,例如在验证mnist数据集,我们从数据集中引入train和test的时候会使用placeholder的方式将它们传入图中。

当完成数据流图的搭建和外部数据的传入后,我们就可以执行图了,这个过程涉及到图论中的拓扑的概念(数据结构中有关拓扑排序),第一步是找到图中入度为零的节点,把它放进执行队列中执行,接着这个点及它的边会从图中消失,再从图中剩下的点中找入度为零的点继续这个过程,如果同时有多个入度为零的点,则同时执行(并行计算)。直到完成一整个图的计算,也就完成了一次迭代。

数据流图的优势

1.并行计算速度快

2.分布式计算快(CPUs,GPUs,TPUs)

3.预编译优化(XLA)(把一些小的算子整合成一个大的算子,尤其是在分布式运行时,可以把一些跨设备,跨进程的操作合并到同一个进程,同一个设备中进行计算,可以显著提高效率)

4.可移植性好(与TensorFlow的架构方式有关)

相关文章:

  • 2021-06-05
  • 2022-12-23
  • 2021-07-03
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-20
  • 2021-08-01
  • 2021-12-27
  • 2021-06-22
相关资源
相似解决方案