11.2 TensorFlow 数据流图
TensorFlow的数据流图(graph),类比于一个工厂流水线的设计图。 你要设计每一 个车间的功能,每一个车间与其上下游车间的关系, 保证原材料可以流畅地从第一车 间开始, 经过粗加工,精加工,装配,包装等等工序, 最后成为一个产品。 既然是 图, 一定包括「边」和「结点 node」。 又因为它一个有向图, 所以, 边是带箭头指 明数据的流动方向。 前面我们也多次提到, 一个概念的名字就是这个概念最简洁的 解释。 Tensor就是多维数据,Flow就是流动。 TensorFlow就是多维数据在有向图中流 动。
讲到这里,我们提出一个问题,为什么要用图的方式来描述一个映射关系呢?
想一下? ···
其原因并不仅仅是方便人们用眼睛观察,设计与分析模型。 还有另一个〸分重要 的考量:用图描述模型方案,便于利用图论做任务并行化。 随着计算图的逐步开展, 我们可以根据入度为零的节点把当前计算图分割成若干个子图, 每一个子图可被指派 到不同的计算设备(如 CPU 或 GPU)中去进行计算。
数据流图中, 对节点和边做了更细致地分类来满足具体的需求。 譬如, 节点被 分为计算节点(operation), 存储节点(variable), 数据节点(placeholder)。 其 中, 这里计算除了包括数学操作, 也包括逻辑运算; 存储节点主用于存权重 w i w_i wi 、偏 置 b b b 的。 数据节点是为了描述输入数据 x i x_i xi 的维度形状以及数据类型的。
有向边被分为张量(tensor)和稀疏张量(sparse tensor)。 其中,稀疏张量的引 入是为了省一些存储空间, 因为高维数据中大部分为零,都存下来太浪费磁盘。 你也可以理解为是种数据压缩后的普通张量。
总结一下, 深度神经网络结点之间的高度互连以传播和加工数据(消息), 而且,这些结点是天然并行工作的,极大地提高了工作效率。