张量在深度学习中就是带维度结构、支持自动微分与硬件加速的多维数组;它不是数组“映射成”的抽象概念,而是数组本身在框架中的增强实现,具备rank、shape、dtype、device和梯度追踪等关键能力。

多维数组在深度学习中不是“映射成”张量,而是**本身就是张量的实现形式**——张量在深度学习语境下,就是带维度结构、支持自动微分与硬件加速的多维数组。
张量即多维数组:去掉术语包袱
不必把“张量”想成高深数学对象。在PyTorch、TensorFlow或NumPy里,它就是你熟悉的数组,只是多了几项关键能力:
- 有明确的维度(rank)和形状(shape),比如
(32, 224, 224, 3)表示32张224×224像素的RGB图 - 携带数据类型(dtype),如
torch.float32或np.int64,影响内存与计算精度 - 可绑定设备(CPU/GPU),支持底层并行运算
- 支持梯度追踪(在PyTorch中启用
requires_grad=True后)
常见维度对应关系很直观
实际建模时,多维数组如何“成为”张量,取决于你组织数据的方式:
-
标量 → 0维张量:单个损失值
loss = torch.tensor(1.23) -
词向量序列 → 2D张量:batch_size × seq_len,如
(16, 512)表示16句、每句512个token -
彩色图像 → 3D张量:height × width × channels(NHWC格式),但PyTorch默认用channels-first,即
(3, 224, 224) -
图像批次 → 4D张量:batch × channel × height × width,即
(32, 3, 224, 224) -
视频片段 → 5D张量:batch × channel × frames × height × width,如
(8, 3, 16, 112, 112)
数组转张量的关键操作
从原始数组(如NumPy)到可用张量,常需三步对齐:
-
调整轴序:用
transpose或permute匹配框架预期,例如将NHWC转为NCHW:img_np.transpose(2, 0, 1) -
统一dtype:PyTorch默认
float32,NumPy常为float64,转换时显式指定:torch.tensor(arr, dtype=torch.float32) -
设备迁移:
.to('cuda')把CPU张量送入GPU,后续运算自动在GPU执行
为什么不能直接用普通数组?
因为深度学习需要的不只是存储——它依赖张量的“行为契约”:
- 算子(如
nn.Conv2d)只接受张量输入,内部会调用CUDA核或XLA编译器 - 反向传播需构建计算图,普通NumPy数组无此机制
- 广播规则、内存连续性检查、梯度累加等均由张量类统一管理











