TensorFlow 入门
TensorFlow 数据模型一一张量
张量的概念
-
张量是 TensorFlow 管理数据的形式,在 TensorFlow程序中,所有的数据都通过张量的形式来表示。
-
从功能的角度上看,张量可以被简单理解为多维数组。
- 零阶张量表示标量(scalar),也就是一个数;
- 一阶张量为向量(vector),也就是一个一维数组;
- 第 n 阶张量可以理解为一个 n 维数组。
-
张量在 TensorFlow 中的实现并不是直接采用数组的形式,它只是对TensorFlow 中运算结果的引用。在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。
-
TensorFlow中的张量和 NumPy 中的数组不同,TensorFlow 计算的结果不是一个具体的数字,而且一个张量的结构。一个张量中主要保存了三个属性 : 名字(name)、维度(shape)和类型(type)。
# 以向量加法为例,当运行如下代码时,并不会得到加法的结果,而会得到对结果的一个引用。 import tensorflow as tf # tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中。 a = tf.constant([1.0, 2.0], name="a") b = tf.constant([2.0, 3.0], name="b") result = tf.add(a, b, name="add") print(result) # 输出:Tensor("add:0", shape=(2,), dtype=float32)
-
张量的第一个属性名字不仅是一个张量的唯一标识符,它同样也给出了这个张量是如何计算出来的。
-
TensorFlow 的计算都可以通过计算图 的模型来建立,而计算图上的每一个节点代表了 一个计算,计算的结果就保存在张量之中,所以张量和计算图上节点所代表的计算结果是对应的。
-
张量的命名可以通过 “node:src_output”的形式来给出。
- 其中 node 为节点的名称,src一output 表示当前张量来自节点的第几个输出。
- 比如“ add:0”就说明了 result 这个张量是计算节点“add” 输出的第一个结果(编号从0开始)。
-
张量的第二个属性是张量的维度(shape)。
- 这个属性描述了一个张量的维度信息。
- 比如shape=(2,)说明了张量 result 是一个一维数组,这个数组的长度为2。
-
张量的第三个属性是类型(type)。
- 每一个张量会有一个唯一的类型。
- TensorFlow 会对参与运算的所有张量进行类型的检查,当发现类型不匹配时会报错。
- 如果不指定类型,TensorFlow 会给出默认的类型,比如不带小数点的数会被默认为 int32,带小数点的会默认为 float32 。
- 因为使用默认类型有可能会导致潜在的类型不匹配问题,所以一般建议通过指定 dtype 来明确指出变量或者常量的类型。
张量的使用
- 张量使用主要可以总结为两大类。
- 第一类用途是对中间计算结果的引用。
- 当一个计算包含很多中间结果时,使用张量可以大大提高代码的可读性。
- 当计算的复杂度增加时(比如在构建深层神经网络时)通过张量来引用计算的中间结果可以使代码的可阅读性大大提升。
- 通过张量来存储中间结果可以方便获取中间结果。比如在卷积神经网络中,卷积层或者池化层有可能改变张量的维度,通过 result.get_shape 函数来获取结果张量的维度信息可以免去人工计算的麻烦。
- 使用张量的第二类情况是当计算图构造完成之后,张量可以用来获得计算结果,也就是得到真实的数字。
- 虽然张量本身没有存储具体的数字,但是通过会话,就可以得到这些具体的数字。
- 第一类用途是对中间计算结果的引用。