一句话定义。 张量(Tensor)就是多维数组:一个把一堆数字按固定行列(以及更高维度)排列起来的容器。模型里的输入、权重、中间激活,全都是它。
从零维数到四维。
- 0 维:一个数,叫标量(scalar),比如学习率 0.001,形状记作
()。 - 1 维:一排数,叫向量(vector),比如一个词的词向量,形状
(768,)。 - 2 维:一张表格,叫矩阵(matrix),比如一层线性层的权重,形状
(768, 512)。 - 3 维:一摞表格,比如一张彩色图片
(高, 宽, 3),最后一维是 RGB 三个通道。 - 4 维:一摞图片,也就是一个批次(batch),
(batch, 高, 宽, 3)。
往上还能继续套,语音、视频、多模态数据都是这么一层层加维度的。
打个生活化的比方。 张量像装货的容器:标量是一个格子,向量是一排格子,矩阵是一层货架,三维是一整面货架墙,再加一维就是“第几号仓库”。而形状(shape)就是贴在箱子外面的规格标签——“24 瓶装”。你要是把 24 瓶装的箱子往 12 瓶的槽里塞,塞不进去,程序就报错。所谓“形状对不上”(shape mismatch),就是这件事。
和相邻概念的区别。
| 概念 | 是什么 | 常见于 |
|---|---|---|
| 矩阵 matrix | 二维数组,张量的一个特例 | 线性代数教材、表格数据 |
| ndarray | NumPy 的多维数组 | 数据预处理、科学计算 |
| Tensor | 多维数组,通常还带自动求导和 GPU 加速 | 深度学习框架 |
另外两点容易混淆:数学和物理里的“张量”指的是坐标变换下按特定规则变化的量,深度学习只是借了这个名字,日常语境里当多维数组理解就够了;框架里的 Tensor 和 NumPy 的 ndarray 在概念上几乎一样,额外能力具体支持到什么程度,以官方文档为准。
为什么值得在意。 实际工作里,模型的报错和 bug 十有八九出在形状上:少了一个维度、多了一个维度、批次维和特征维写反了。养成一个习惯:写每一层时先想清楚“输入什么形状、输出什么形状”,出错时先打印 shape 再看别的,往往比读十行代码都快。还有广播(broadcasting)机制,能让形状不同的张量也参与运算,方便是方便,但也容易制造“不报错、结果却是错的”的隐蔽 bug。
对不写代码的同事来说,记住一句就够:模型内部没有玄学,绝大多数运算就是多维数组之间的乘法和加法。理解了这一点,“AI 到底在算什么”就不再神秘了。
