张量是机器学习系统使用的数据结构,了解它们是您应该早期建立的一项基本技能。张量是数字数据的容器。这是我们存储将在系统中使用的信息的方式。
三个主要属性定义张量:
- 等级rank
- 它的形状shape
- 其数据类型datatype
张量的等级Rank
张量的等级rank是指张量的轴数。例子:
- 矩阵的等级是2,因为它有两个轴。
- 向量的等级为1,因为它具有单个轴。
张量的形状Shape
张量的形状描述了沿每个轴的维数。例:
- 方阵(square matrix)可具有(3,3)维度。
- 等级为3的张量可以具有(2、5、7)维度。
张量的数据类型
张量的数据类型是指其中包含的数据类型。例如,当使用Python的numpy库,以下是一些受支持的数据类型:
- float32
- float64
- uint8
- int32
- int64
在前面使用了术语“向量”和“矩阵”来指代具有特定等级(分别为1和2)的张量。我们在描述张量时也可以使用这些数学概念。
- 标量scalar
标量(或0维度D的张量)的等级为0,并且包含一个数字。这些也称为“ 0维张量”。下图显示了如何使用numpy构造0D张量。注意它的形状和等级(.ndim属性。)
import numpy as np; |
结果:0
- 向量
向量(或一维张量)的等级为1,代表数字数组。下面显示了形状为(4,)的向量。请注意其等级(.ndim属性)如何为1。
import numpy as np; |
结果:1
- 矩阵
矩阵(或2D张量)的等级为2,代表向量数组。矩阵的两个轴通常称为“行”和“列”。下面显示了形状为(3,4)的矩阵。
import numpy as np; |
结果:2
- 高维
可以通过将低维张量包装在数组中来获得高维张量(3D,4D等)。例如,将2D张量打包成一个数组可得到3D张量。将其包装在另一个阵列中可以得到4D张量,依此类推。
import numpy as np; |
[[1,11,21,31] |
[2,12,22,32] |
[3,13,23,33]); |
结果:3
以下是一些常见的张量表示形式:
- 向量:1D-(特征feature)
- 序列Sequences:2D-(时间步长timesteps,特征)
- 图片:3D-(高度,宽度,通道)
- 视频:4D-(帧,高度,宽度,通道)
通常,机器学习算法一次处理一个数据子集(称为“批处理”。)使用一批数据时,张量的第一个轴保留用于批处理的大小(样本数)。
例如,如果您处理2D张量(矩阵),则它们中的一批将总共具有3个维: (样本,行,列)请注意,第一个轴是批次中的矩阵数。
按照相同的逻辑,可以将一批图像表示为4D张量:
- (样本,高度,宽度,通道)
以及一批视频作为5D张量:
- (样本,帧,高度,宽度,通道)