













从一个数字,到一串数字,再到一张表格——当维度继续增加,我们就得到了张量。它是 AI 世界里描述数据最通用的容器。
先不看公式,看一张照片。一张 3×3 像素的彩色小图,每个像素有 R、G、B 三个亮度值。要完整描述这张图,你需要三个方向的坐标:第几行、第几列、哪个颜色通道。
这就是一个"三阶张量"——它不是什么神秘的新概念,只是"表格"这个想法沿着第三个方向又展开了一层。你可以把它理解成"多层叠在一起的矩阵"。
一句话理解:标量是一个点,向量是一排点,矩阵是一个面,张量是把"面"沿着更多方向堆叠起来。阶数(rank)就是"需要几个坐标才能定位一个元素"。
它们本质上是同一件事:一个用若干坐标索引取值的对象,只是索引的个数不同。
| 名称 | 阶数 | 需要几个坐标定位元素 | 记号 |
|---|---|---|---|
| 标量 | 0 | 0 个 | $s$ |
| 向量 | 1 | 1 个:第 $i$ 个 | $v_i$ |
| 矩阵 | 2 | 2 个:第 $i$ 行第 $j$ 列 | $M_{ij}$ |
| 张量 | $n$ | $n$ 个坐标 | $T_{i_1 i_2 \dots i_n}$ |
一个张量的"形状",描述的是它在每个方向上各有多少个元素。对于本讲的 3×3 RGB 图像:
$$ \text{shape}(T) = (3,\ 3,\ 3) \quad \text{对应 } (\text{行}, \text{列}, \text{通道}) $$
张量中元素的总个数,就是形状里所有数字的乘积:
$$ \text{元素总数} = \prod_{k=1}^{n} d_k $$
这里 $d_k$ 是第 $k$ 个维度的大小。上面例子中元素总数为 $3 \times 3 \times 3 = 27$。
形状相同的张量,加法就是对应位置的元素相加,这一点从向量、矩阵到高阶张量都是一致的:
$$ (A + B)_{i_1 i_2 \dots i_n} = A_{i_1 i_2 \dots i_n} + B_{i_1 i_2 \dots i_n} $$
用 NumPy 把上面 3×3 RGB 图像的例子跑一遍,直观感受"阶数"和"形状"这两个概念。
import numpy as np
# 模拟一张 3x3 像素的彩色小图,最后一维是 RGB 三个通道
image_tensor = np.random.randint(0, 256, size=(3, 3, 3))
print("阶数 (ndim):", image_tensor.ndim)
print("形状 (shape):", image_tensor.shape)
print("元素总数 (size):", image_tensor.size)
阶数 (ndim): 3 形状 (shape): (3, 3, 3) 元素总数 (size): 27
# 取第 0 行、第 1 列、G 通道(索引 1)的像素值
pixel_g = image_tensor[0, 1, 1]
print("该位置 G 通道值:", pixel_g)
# 取第 0 行、第 1 列的完整 RGB 三个值(一个 1 阶张量,即向量)
pixel_rgb = image_tensor[0, 1, :]
print("该位置 RGB 向量:", pixel_rgb)
该位置 G 通道值: 143 该位置 RGB 向量: [ 87 143 22]
观察一下:用切片 [0, 1, :] 从三阶张量里取出的结果是一个一阶张量(向量)。这说明"从高阶张量里固定几个坐标,会得到一个更低阶的张量"——这个规律在后面讲神经网络的批量数据处理时会反复用到。
下面用 Plotly 把这个 3×3×3 张量画成空间中的 27 个点:三个坐标轴分别对应"行、列、通道",每个点的颜色深浅代表该位置的数值大小。拖动鼠标可以旋转视角。
3×3×3 张量的空间分布 · 颜色越亮代表数值越大
注意观察:固定"通道"这一层不变,你会看到一个 3×3 的平面——那正是一个二阶张量(矩阵)。这也是为什么我们说"矩阵是张量的一个特例"。
张量之所以是深度学习框架(PyTorch、TensorFlow)里最核心的数据结构,是因为几乎所有 AI 数据都能自然地表示成张量:
| 数据类型 | 典型形状 | 各维度含义 |
|---|---|---|
| 一段文本的词向量 | (序列长度, 词向量维度) | 第几个词,词向量的第几维 |
| 一张彩色图片 | (高, 宽, 通道) | 行、列、RGB 通道 |
| 一批彩色图片 | (批大小, 高, 宽, 通道) | 第几张图,再加上图片本身的三个维度 |
| 一段视频 | (帧数, 高, 宽, 通道) | 第几帧,再加上单帧图片的三个维度 |
可以看到,"批大小(batch size)"这个训练时最常调的参数,本质上就是给张量多加了一个维度。理解了张量的阶数和形状,你在调试模型时看到 shape mismatch 报错,就能立刻定位是哪个维度对不上。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。