神经网络使用的数据存储在多维Numpy数组中,也叫张量(tensor)。
张量是一个数据容器,张量的维度(dimension)通常叫做轴(axis)。
1. 标量(0D张量)
仅含一个数字的张量叫做标量(scalar,也叫标量张量、零维张量、0D张量)。在Numpy中,一个float32或float64数字就是一个标量张量(或标量数组)。可以用ndim属性来查看一个Numpy张量的轴的个数。标量张量有0个轴(ndim == 0)。张量轴的个数也叫做阶(rank)。
eg:
2. 向量(1D张量)
数字组成的数字叫做向量(vector)或一维张量(1D张量)。
eg:
这个向量有5个元素,所以被称为5D向量。
注:5D向量和5D张量不同,5D向量只有一个轴,沿着轴有5个维度,而5D张量有5个轴,沿着每个轴可能有任意个维度
维度(dimensionality)可以表示沿着某个轴上的元素个数,也可以表示张量中轴的个数。
3. 矩阵(2D张量)
向量组成的数组叫矩阵(matrix)或二维张量(2D张量)。矩阵有2个轴(也叫行和列)。
4. 3D张量与更高维张量
将多个矩阵组成一个新的数组,可以得到一个3D张量。
将多个3D张量合成一个数组,可以创建一个4D张量。
以此类推,深度学习处理的一般是0D到4D的张量,但处理视频数据时可能会遇到5D张量。
5. 关键属性
1)轴的个数(阶)
例如,3D张量有3个轴,矩阵有2个轴,这在Numpy等python库中也叫做张量的ndim。
2)形状
整数元组,表示张量沿每个轴的维度大小(元素个数)。例如,矩阵的形状可以为(3,5),3D张量的形状可以为(3,3,5)。向量的形状只包含一个元素,比如(5,),而标量的形状为空,即()。
3)数据类型(在python库中通常叫做dtype)
例如,张量的类型可以是float32、unit8、float64等。
6. 现实世界中的数据张量
1)向量数据
2D张量,形状为 (samples, features)。
2)时间序列数据或序列数据
3D张量,形状为 (samples, timesteps, features)。
3)图像
4D张量,形状为 (samples, height, width, channels) 或 (samples, channels, height, width)。
4)视频
5D张量,形状为 (samples, frames, height, width, channels) 或 (samples, frames, channels, height, width)。
7. 广播
形状不同的张量相加,较小的张量会被广播(broadcast)以匹配较大张量的形状。广播包含以下两步:
1)向较小的张量添加轴(广播轴),使其ndim与较大的张量相同。
2)将较小的张量沿着新轴重复,使其形状与较大的张量相同。