刚接触深度学习时,很多人会被一堆词劝退:标量、向量、矩阵、张量、维度、形状、通道、批次……这些词看起来像数学课,其实它们背后的核心很简单:深度学习处理的东西,本质上是一堆数字;这些概念只是说明数字被怎样摆放。

你可以先把它们理解成不同大小、不同结构的“数字容器”:

  • 标量:一个数字。
  • 向量:一排数字。
  • 矩阵:一张表格。
  • 张量:更通用的多维数字容器。

这篇文章不要求你有高等数学基础。我们只抓住一个目标:以后看到 shape = (32, 3, 224, 224) 这种写法时,你知道它大概在说什么。

先建立直觉:模型只认识数字#

人看到一张猫的图片,会说“这是一只猫”。但神经网络不能直接理解“猫”这个字,也不能像人一样直接理解图像含义。它真正拿到的是数字。

比如一张图片,在计算机里通常可以表示成很多像素点;每个像素点又可以用数字表示颜色。文本、声音、表格数据也一样,最后都要转成数字,模型才能计算。

所以深度学习里的问题,经常会变成:

这些数字怎么组织?模型每一步拿到的数字长什么样?

这就是标量、向量、矩阵、张量这些概念的用处。

标量、向量、矩阵、张量的递进关系

标量:一个单独的数字#

标量就是一个数。

例如:

3
0.01
-2.7

在深度学习中,很多结果都是标量:

  • 学习率 0.001 是一个标量。
  • 某次训练的损失值 1.26 是一个标量。
  • 一个分类结果的概率 0.87 也可以是一个标量。

标量没有方向,也没有一排、一列、几行几列这些结构。它就是一个孤零零的数字。

如果用“维度”来描述,标量通常可以理解为 0 维。这里的 0 维不是说它不重要,而是说它没有展开成列表或表格。

向量:一排数字#

向量是一组按顺序排好的数字。

例如:

[170, 65, 23]

你可以把它理解成一个人的三个特征:身高 170、体重 65、年龄 23。单个数字只能表达一个量,一排数字就可以一起描述一个对象。

在机器学习里,一个样本经常会被表示成一个向量:

[面积, 卧室数量, 楼层, 距离地铁距离]

如果我们要预测房价,就可以把每套房子变成这样一排数字。模型拿到的不是“这套房子不错”这种自然语言,而是一组可以计算的数。

向量通常可以理解为 1 维。这里的 1 维指的是它只有一个方向可以数:从左到右数第 1 个、第 2 个、第 3 个……

需要注意:数学里向量有更丰富的含义,比如方向、长度、空间位置。深度学习入门阶段,可以先把它看作“一排数字”。这个理解已经足够你读懂大部分代码里的形状。

矩阵:排成表格的数字#

矩阵就是二维的数字表格。

例如:

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

它有 2 行、3 列,所以形状可以写成:

(2, 3)

这和 Excel 表格很像。你可以按“第几行、第几列”找到一个数字。

矩阵在深度学习里很常见:

  • 一张灰度图片可以看成矩阵,因为每个像素只需要一个亮度值。
  • 一批样本的特征可以排成矩阵,每一行是一个样本,每一列是一个特征。
  • 神经网络中的权重也经常以矩阵形式存在。

举个小例子。假设有 3 套房子,每套房子有 4 个特征:

[
  [80, 2, 10, 500],
  [120, 3, 6, 800],
  [60, 1, 20, 300]
]

这就是一个 3 x 4 的矩阵。3 表示 3 个样本,4 表示每个样本有 4 个特征。

矩阵通常可以理解为 2 维,因为你需要两个位置才能确定一个数字:行和列。

张量:更通用的多维数字容器#

张量可以理解为标量、向量、矩阵的统一说法,也可以表示更高维的数字结构。

更口语一点说:

张量就是一个可以装数字的多维容器。

按照这个理解:

  • 标量是 0 维张量。
  • 向量是 1 维张量。
  • 矩阵是 2 维张量。
  • 三维、四维、五维的数据,也都可以叫张量。

深度学习框架里,比如 PyTorch、TensorFlow,经常直接把模型里的数据都叫 Tensor。这不是因为每个数据都神秘复杂,而是因为框架需要一个统一的数据结构来承载各种形状的数字。

维度和形状:读懂张量的关键#

学习张量时,最重要的不是背定义,而是看懂两个词:维度形状

维度可以理解为“需要几个坐标才能找到一个数字”。

  • 标量:直接就是一个数,不需要坐标。
  • 向量:需要 1 个位置,例如第几个。
  • 矩阵:需要 2 个位置,例如第几行、第几列。
  • 三维张量:需要 3 个位置,例如第几层、第几行、第几列。

形状则是在说“每个维度上有多少个元素”。

例如:

[10, 20, 30]

它的形状是:

(3,)

表示这一排里有 3 个数字。

再看一个矩阵:

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

它的形状是:

(2, 3)

表示 2 行、3 列。

在深度学习里,shape 往往比变量名更诚实。变量名可能叫 x,看不出是什么;但 x.shape 能告诉你它到底是一个样本、一批样本,还是一批图片。

一张图片为什么也是张量?#

我们用图片举例,因为它最直观。

一张灰度图片只有明暗,没有颜色。假设它高 4、宽 5,那么可以用一个 4 x 5 的矩阵表示:每个位置放一个亮度值。

但彩色图片通常有红、绿、蓝三个通道,也就是 RGB。于是它不再只是一个二维表格,而是可以理解为三张表叠在一起:

  • 一张表记录红色强度。
  • 一张表记录绿色强度。
  • 一张表记录蓝色强度。

所以一张彩色图片经常可以表示成:

(3, H, W)

其中:

  • 3 表示 RGB 三个颜色通道。
  • H 表示图片高度。
  • W 表示图片宽度。

如果图片是 224 x 224,那么它可能写成:

(3, 224, 224)

这就是一个 3 维张量。

一批彩色图片的张量形状

为什么训练时经常多一个批次维度?#

实际训练神经网络时,模型通常不会一次只看一张图片,而是一次看一小批图片。这个“一小批”通常叫 batch,中文常说“批次”。

如果一张彩色图片的形状是:

(3, 224, 224)

那么 32 张图片一起放进模型时,形状可能变成:

(32, 3, 224, 224)

这 4 个数字可以这样读:

32:这一批里有 32 张图片
3 :每张图片有 3 个颜色通道
224:图片高度是 224
224:图片宽度是 224

这就是很多初学者第一次见到四维张量的地方。它并不是凭空多出来的复杂数学,而是因为我们把“很多张图片”打包在一起了。

张量里的维度顺序一定固定吗?#

不一定。

不同框架、不同模型、不同数据处理习惯,可能采用不同的维度顺序。例如图片数据常见两种写法:

NCHW = (批次, 通道, 高度, 宽度)
NHWC = (批次, 高度, 宽度, 通道)

PyTorch 里常见的是 NCHW,例如:

(32, 3, 224, 224)

TensorFlow 的很多场景里常见的是 NHWC,例如:

(32, 224, 224, 3)

这两个张量装的可能是同一批图片,只是维度排列顺序不同。

所以遇到张量时,不要只看它有几个维度,还要确认每个维度代表什么。很多模型报错,本质上就是“维度顺序放错了”。

一个特别实用的理解方法:从 shape 倒推含义#

如果你在代码里看到:

x.shape

输出:

(64, 10)

你可以先猜:这可能是 64 个样本,每个样本 10 个特征。

如果看到:

(16, 3, 224, 224)

你可以猜:这可能是 16 张彩色图片,每张图片 3 个通道,大小是 224 x 224。

如果看到:

(8, 128, 768)

在自然语言处理里,它可能表示:8 条文本,每条文本有 128 个 token,每个 token 被表示成 768 维向量。

这就是张量的核心价值:它让不同类型的数据都能变成统一的数字形状,然后交给模型做计算。

常见误区#

误区一:张量一定很高级,和普通数组不是一回事#

入门阶段可以先把张量理解成“多维数组”。它当然有数学背景,也有自动求导、GPU 加速等工程能力,但最基础的直觉就是:里面装着数字,并且这些数字有形状。

误区二:维度越高,模型就越厉害#

不是。维度高只说明数据组织更复杂,不代表模型一定更强。错误的维度反而会让模型无法运行,或者学到错误的东西。

误区三:只要数字总数一样,就可以随便 reshape#

也不是。

比如 12 个数字可以 reshape 成 (3, 4),也可以 reshape 成 (2, 6)。但形状改变后,每个维度的含义可能完全变了。模型关心的不只是有多少数字,还关心这些数字之间的结构关系。

举例说,一张图片的高和宽不能随便当成通道维度,否则模型看到的数据结构就乱了。

总结:把张量看成“有形状的数字”#

最后把这几个概念串起来:

概念可以怎么理解常见形状示例例子
标量一个数字()损失值、学习率
向量一排数字(3,)一个样本的特征
矩阵二维表格(2, 3)灰度图片、样本特征表
张量多维数字容器(32, 3, 224, 224)一批彩色图片

如果你是初学者,先记住这一句话就够了:

深度学习里的张量,就是模型用来装数据的多维数字容器;看懂它的 shape,就看懂了数据是怎么摆放的。

之后再学神经网络、卷积、注意力机制、反向传播时,你会不断遇到张量。只要你养成一个习惯:看到数据先看 shape,很多看起来复杂的问题都会变得清楚很多。