张量相关操作
多维张量在物理上以一维的方式连续存储,通过定义维度和形状,在逻辑上把它理解为多维张量。(对于多维数组也同样适用)
维度变换
改变张量形状
使用tf.reshape
改变张量的形状,语法格式:
tf.reshape(tensor,shape)
例,将一维张量转换成三维张量:
a = tf.range(24)
print(a)
print(tf.reshape(a, [2, 3, 4]))
多维张量的轴
多维张量的维度表示多维张量的轴(axis
)。
张量的轴带有索引值,从维度最高到最低,使用数字0作为轴索引的开始,(可以理解为张量最外层到最内层的顺序)。也可以使用负数作为倒数的索引,-1表示索引值最大的轴,这一点与Python的列表一致。
增加维度
使用tf.expand_dims(input, axis)
增加张量维度,语法格式:
tf.expand_dims(input, axis)
示例,现有一个shape
为(2,2)的张量,为它在axis=0
方向上添加一个维度:
a = tf.constant([[1,2],[3,4]])
print(tf.shape(a))
a = tf.expand_dims(a, axis=0)
print(a)
需要注意的是,tf.expand_dims()
必须要明确指定axis
的值,指定顶哪个轴就在原张量基础上增加一个指定轴。如果上述代码指定axis=1
,那么a的shape
就会是(2, 1, 2)。
删除维度
删除维度用tf.squeeze()
函数,该函数语法格式:
tf.squeeze(input, axis=None)
该函数只能删除长度为1的维度,可以指定axis
,如果明确不指定axis
,会删除所有长度为1的维度,可以使用列表来指定多个要删除的维度。
例,原张量shape
为(1, 2 , 3, 1, 1, 4),如果分别指定删除全部长度为1的维度和,代码为:
a = tf.constant(1, shape=(1, 2, 3