理解张量的Rank和Shape

入门TensorFlow的第一道拦路虎就是对Tensor的理解。 以下是我在理解张量的过程中的一些总结。

什么是张量

这是bilibili搬运youtube的一个视频,很直观的解释了张量的含义。

张量是对标量,矢量,矩阵的推广。张量的表达看起来像是数组,其实每个值是在对应空间上的分量的大小。基向量和分量一起形成了张量的表达,他在物理学上的优点是,当基向量发生变化的时候(坐标系发生变化或者说是观察方向发生了变化),对应的分量也会发生变化,但整个张量却能保持不变。

下图是对张量从直观上给出的示意。一阶张量可以理解成一个向量,二阶张量可以理解成矩阵,三阶张量可以理解成立方体,四阶张量可以理解成立方体组成的一个向量,五阶张量可以理解成立方体组成的矩阵,依次类推。

什么是Rank

Rank就是上文所说的阶。他是指这个张量拥有的基底向量的数量,也就是他的方向的数量。从上图中其实能看明白为什么是一阶、二阶、三阶。下图是一个示意。

在实际操作中,可以理解成[的深度。例如:

rank=1: [0,1,2]

rank=2: [[0,1],[2,3]]

rank=3: [[[0,1],[2,3]],[[4,5],[6,7]]]

什么是Shape

shape是形状,他是指明每一层有多少个元素。比如[2,3,4]是指第一层2个元素,第二层3个元素,第三层4个元素,通过这个我们就可以知道这个张量一共有2 × 3 × 4=24 个元素。上面的rank=3的张量,他的shape是[4,2]。下面这个代码也能说明问题。

1
2
3
4
5
import tensorflow as tf
# 定义了一个张量,有6个元素,设置他的形状是[2.3]
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2,3])
with tf.Session() as session:
print(session.run(a))

打印的结果是

[[1 2 3]
[4 5 6]]

END