张量(Tensor):可理解为一个 n 维矩阵,所有类型的数据,包括标量(Scalar)、矢量(Vector)、矩阵(Matrix) 等都是特殊类型的张量。
张量(Tensor): 是对矢量和矩阵向潜在的更高维度的泛化。TensorFlow 在内部将张量表示为基本数据类型的 n 维数组。
张量(Tensor) 所有维度数dim > 2的数组统称为张量。
张量的每个维度也做轴(Axis), 一般维度代表了具体的物理含义,比如Shape为[2,32,32,3]的张量共有4 维,如果表 示图片数据的话,每个维度/轴代表的含义分别是:
- 图片数量
- 图片高度
- 图片宽度
- 图片通道数
其中2 代表了 2 张图片,32代表了高宽均为32, 3 代表了 RGB 3 个通 道。张量的维度数以及每个维度所代表的具体物理含义需要由用户自行定义。
在TensorFlow中间,为了表达方便,一般把标量、向量、矩阵也统称为张量,不作区 分,需要根据张量的维度数和形状自行判断。
TensorFlow 支持以下三种类型的张量(Tensor):
- 常量constant:常量是其值不能改变的张量。
- 变量variable:当一个量在会话中的值需要更新时,使用变量来表示。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现。变量在使用前需要被显示初始化。另外需要注意的是,常量存储在计算图的定义中,每次加载图时都会加载相关变量。换句话说,它们是占用内存的。另一方面,变量又是分开存储的。它们可以存储在参数服务器上。
张量只能通过TensorFlow来创建,不能通过python的语法创建
一、张量“常量”、张量“变量”
1、张量“常量”/Tensor(tf.constant)
1.1 “标量型”张量
标量(Scalar)单个的实数,如1.2,3.4等,维度数(Dimension,也叫秩)为0
, shape为[]
实例:a = tf.constant(1.0) 即创建了一个张量(标量)
- shape为:[]
- 维度为:0
1.2 “向量型”张量
向量(Vector)n个实数的有序集合,通过中括号包裹,如[2], [1.2,3.4]等,维度数为
1
, 长度不定,shape为[n]
向量只可以通过数组list的形式进行创建。比如向量(1,2,2,5,6)和(1,2),只要它是一个向量,维度都是1,但是shape=[n]不一样,注意区分 维度 和 shape。
a = tf.constant ( [1.] )
一个元素的向量、一维、shape为1a = tf.constant ( [1.,2.,6.] )
三个元素的向量、一维、shape为3
1.3 “矩阵型”张量
矩阵(Matrix)n行 m 列实数的有序集合,如[[1,2], [3,4]],也可以写成:
[
1
2
3
4
]
\begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \end{bmatrix}
[1324]
1.3.1 二维张量
维度数为2 , 每个维度上的长度不定,shape为: [ n , m ] [n,m] [n,m]
例子:
a = tf.constant([[1,2], [3,4]])
二维 shape为:(2,2)
1.3.2 三维张量
维度数为3 , 每个维度上的长度不定,shape为: [ l , n , m ] [l, n,m] [l,n,m]
例子:
a = tf.constant
([
[[1,2],[6, 8]],
[[1,2],[6, 8].],
[[1,2],[6, 8]]
])
三维 shape为:(3,2,2)
2、张量“变量”(tf.Variable)【通常在神经网络中表示权重和偏置】
为了区分:
- 需要计算梯度信息的张量
- 不需要计算梯度信息的张量
TensorFlow增加了 一种专门的数据类型来支持梯度信息的记录:tf.Variable。
tf.Variable类型在普通的张量类型基础上添加了 name, trainable等属性来支持计算图的构建。
由于梯度运算会消耗大量的计算资源,而且会自动更新相关参数,
- 对于不需要的优化的张量,如神经网络的输入 X \textbf{X} X,不需要通过tf.Variable封装;
- 相反,对于需要计算梯度并优化的张量,如神经网络层的 W \textbf{W} W和 b \textbf{b} b , 需要通过tf.Variable包裹以便TensorFlow跟踪相关梯度信息。
通过tf.Variable。函数可以将普通张量转换为待优化张量:
张量“变量”通过使用变量类来创建。
变量的定义还包括应该初始化的常量/随机值。
下面的代码中创建了两个不同的张量变量 t_a 和 t_b。两者将被初始化为形状为 [50,50] 的随机均匀分布,最小值=0,最大值=10:
注意:变量通常在神经网络中表示权重和偏置。
待优化张量可看做普通张量的特殊类型,普通张量也可以通过GradientTape.watch()方法临时加入跟踪梯度信息的列表。
二、基本数据类型【int、float、double、bool、string】
1、创建不同基本数据类型的Tensor
2、基本数据类型转换:Cast
参考资料:
TensorFlow基础-数据类型
tensorflow2.0 基础一 常用数据类型及转换
tensorflow基础-数据类型
tensorflow基础之张量(Tensor)、阶(Rank)、计算图(Graph)、节点(Node)