TensorFlow 中的基本数据类型,它包含了数值型、字符串型和布尔型。
一、数值类型
-
标量
标量(Scalar) 单个的实数,如1.2, 3.4 等,维度数(Dimension,也叫秩)为0,shape 为[]
-
向量
向量(Vector) n 个实数的有序集合,通过中括号包裹,如[1.2],[1.2, 3.4]等,维度数为1,长度不定,shape 为[𝑛]与标量不同,向量的定义须通过List类型传给tf.constant()。
-
矩阵
-
张量
张量(Tensor) 所有维度数dim > 2的数组统称为张量。
张量的每个维度也做轴(Axis),一般维度代表了具体的物理含义,比如Shape 为[2,32,32,3]的张量共有4 维,如果表示图片数据的话,每个维度/轴代表的含义分别是:图片数量、图片高度、图片宽度、图片通道数,其中2 代表了2 张图片,32 代表了高宽均为32,3 代表了RGB 3 个通道。
张量的维度数以及每个维度所代表的具体物理含义需要由用户自行定义在 TensorFlow 中间,为了表达方便,一般把标量、向量、矩阵也统称为张量,不作区分,需要根据张量的维度数和形状自行判断。
必须通过TensorFlow 规定的方式去创建张量,而不能使用Python 语言的标准变量创建方式。
其中id 是TensorFlow 中内部索引对象的编号,shape 表示张量的形状,dtype 表示张量的数值精度,张量numpy()方法可以返回Numpy.array 类型的数据,方便导出数据到系统的其他模块:
二、字符串类型
TensorFlow 还支持字符串(String)类型的数据,例如在表示图片数据时,可以先记录图片的路径,再通过预处理函数根据路径读取图片张量。通过传入字符串对象即可创建字符串类型的张量:
三、布尔类型
为了方便表达比较运算操作的结果,TensorFlow 还支持布尔类型(Boolean, bool)的张
量。布尔类型的张量只需要传入Python 语言的布尔类型数据,转换成TensorFlow 内部布
尔型即可:
TensorFlow 的布尔类型和Python 语言的布尔类型并不对等,不能通用
四、数值精度
在创建张量时,可以指定张量的保存精度:
对于大部分深度学习算法,一般使用tf.int32, tf.float32 可满足运算精度要求,部分对
精度要求较高的算法,如强化学习,可以选择使用tf.int64, tf.float64 精度保存张量。
- 读取精度:
- 类型转换:
五、待优化张量
为了区分需要计算梯度信息的张量与不需要计算梯度信息的张量,TensorFlow 增加了一种专门的数据类型来支持梯度信息的记录:tf.Variable
tf.Variable 类型在普通的张量类型基础上添加了name,trainable 等属性来支持计算图的构建。
由于梯度运算会消耗大量的计算资源,而且会自动更新相关参数,对于不需要的优化的张量,如神经网络的输入X,不需要通过tf.Variable 封装;相反,对于需要计算梯度并优化的张量,如神经网络层的W和𝒃,需要通过tf.Variable 包裹以便TensorFlow 跟踪相关梯度信息。
其中张量的name 和 trainable 属性是Variable
特有的属性,
name 属性用于命名计算图中的变量,这套命名体系是TensorFlow 内部维护的,一般不需要用户关注name 属性;
trainable表征当前张量是否需要被优化,创建Variable 对象是默认启用优化标志,可以设置trainable=False 来设置张量不需要优化。
除了通过普通张量方式创建Variable,也可以直接创建:
、