神经网络的数据

神经网络中使用的数据一般保存在Numpy数组中,也称为张量(tensor)。张量在机器学习领域非常重要,它是一个数据容器,其中所包含的数据基本上全部都是数值数据。矩阵是一个二维张量,张量是矩阵向任意维度的推广。张量的维度一般也称为

仅包含一个数字的张量称为标量,也称为零维张量或者0D张量。由数字组成的数组称为向量或者一维张量(1D张量),一维张量只有一个轴。这里有一个概念比较容易混淆,当一个向量中拥有多个元素时,可以称其为nD向量,例如包含9个元素的向量可以称为9D向量,但是不是9D张量。nD向量只能有一个轴,沿着轴可以有n个维度;但是nD张量有n个轴,每个轴都可以有任意个维度。维度既可以表示沿着某一个轴上元素的个数,也可以表示张量中轴的个数。在表示张量中轴的个数时,最为准确的称呼为n阶张量,但是nD张量更加常用。同理,矩阵是一个2D张量,多个矩阵会构成一个3D张量,也就是一个数据组成的立方体;多个矩阵组成一个数组,就形成了4D张量;以此类推就可以理解更高阶的张量组成。

张量一般由三个关键属性来定义:

  • :也就是轴的个数,在Python的Numpy中,也称为张量的ndim
  • 形状:一个整数元组,用于表示张量沿每个轴的维度大小。例如一个\(3\times5\)(三行五列)的矩阵,其形状为(3, 5),不同维度的张量的形状包含的元组元素个数不同。
  • 数据类型:张量中所包含的数据类型,在Python中称为dtype

通常来说,深度学习中所有数据张量的第一个轴(0轴)都是样本轴,或称为样本维度。并且深度学习模型不会同时处理整个数据集,而是将数据拆成小份,也称为批量,对于批量张量,第一个轴(0轴)称为批量轴或者批量维度

在现实世界中常见的数据张量主要有以下几种:

  • 向量数据:2D张量,形状为(samples, features)
  • 序列数据或者时间序列:3D张量,形状为(samples, timestamps, features)
  • 图像:4D张量,形状为(samples, height, width, channels)或者(samples, channels, height, width)
  • 视频:5D张量,形状为(samples, frames, height, width, channels)或者(samples, frames, channels, height, width)