1.3 TensorFlow 数据模型
TensorFlow 的命名源于其运行原理:“Tensor”的本义是“张量”,我们可以简单地把它理解为多维数组,它表明了在TensorFlow框架中所使用的数据结构;而“Flow”的本义是“流”,它表示在TensorFlow中会进行端到端的数据流动。由此可知,TensorFlow的运行过程可以看作张量之间通过计算相互转化的过程。
作为TensorFlow中数据的表示形式,张量是一个定义在一些向量空间和一些对偶空间的笛卡儿积上的多重线性映射。我们可以把任意的N阶张量简单地理解为N维数组,如零阶张量为标量,一阶张量为向量,二阶张量则为矩阵。但实际上,张量只是对TensorFlow 中运算结果的引用,在张量中并没有保存具体的数值,保存的只是如何得到这些数字的计算过程。
我们通过以下代码对张量的构造和属性进行说明:
运行以上代码,可以得到打印的结果:
Tensor("Add:0",shape=(1,2),dtype=float32)
从打印结果可以看出,每个张量主要包含三个属性:名字(name)、维度(shape)和数据类型(dtype)。
(1)名字。名字是张量在计算图中的唯一标识。计算图上的每个节点都代表了一个计算,计算的结果又保存在张量中,因此张量和计算图中的节点是一一对应的,而名字给出了每个张量在计算图中对应节点的命名。节点的名字通过“name:src_output”的形式给出。其中,name 表示节点的名称;src_output 表示当前张量来自节点的第几个输出。上述打印结果中的"Add:0"表示张量是节点“Add”输出的第一个结果(结果编号从0开始)。
(2)维度。维度给出了一个张量的维度信息。上述打印结果中的shape=(1,2),说明计算结果是一个1×2大小的矩阵。
(3)数据类型。数据类型描述了张量的数据类型,每个张量都会有唯一的数据类型。上述打印结果中的dtype=float32,表示计算结果矩阵中的数值是32位浮点型。TensorFlow会对参与运算的所有张量进行类型检查,当发现类型不匹配时会报错。