✅ 一、n维数组(张量,Tensor)
1. 定义
张量(Tensor)是一个通用的n维数组数据结构。
它的维度(维数)决定了它的形状,例如:
维度 | 名称 | 举例 | 说明 |
---|---|---|---|
0维 | 标量(scalar) | 3.14 | 单个数 |
1维 | 向量(vector) | [1.0, 2.0, 3.0] | 数组 |
2维 | 矩阵(matrix) | [[1, 2], [3, 4]] | 表格或图像灰度图 |
3维+ | 张量(tensor) | 图像 RGB、视频帧序列、语言嵌入序列等 | 高维结构 |
张量是深度学习中数据与模型参数的统一表示方式。
2. 张量类 vs NumPy ndarray
特性 | NumPy ndarray | 深度学习框架中的 Tensor(如 PyTorch 的 Tensor 、MXNet 的 ndarray ) |
---|---|---|
存储 | CPU | 可选 CPU 或 GPU |
运算 | 支持高效线性代数、广播等 | 同样支持,并加入自动梯度求导 |
自动微分 | ❌ 不支持 | ✅ 支持自动求导(如 .backward() ) |
深度学习适配 | ❌ 需手动构建计算图 | ✅ 支持构建神经网络计算图和参数优化 |
3. 自动微分(Autograd)
张量类不仅能存储数据,还能追踪计算过程并自动求导,这是深度学习训练的关键。
🔍 二、困难点详细讲解
✳️ 难点 1:张量不是只是“多维数组”,而是带“功能”的对象!
🧠 思维误区:“张量和NumPy数组一样,都是装数据的盒子。”
❌ 这只是张量的外壳。
✅ 实际上,深度学习框架中的张量像一个会思考的盒子,它不仅能存储数据,还能:
-
记住数据是怎么一步步计算出来的
-
知道如何“反推”出梯度
-
可以告诉优化器怎么更新参数
📦 想象一下一个“有记忆力的盒子”,每当你对它进行加、乘、卷积等操作,它都悄悄记下这些“动作”,等你说“请反向传播”时,它就能“回忆”每一步,并算出梯度!
✳️ 难点 2:为什么GPU支持如此关键?
💡 深度学习中,数据和模型参数通常是成千上万个张量组成的高维结构。如果仅用CPU,计算效率非常低。
🖼 比如训练图像分类模型,每张图片是 3×224×224
的张量,一批数据是 32×3×224×224
,模型的权重也是张量……
👉 这些操作背后是大量矩阵运算,GPU的并行架构可以:
-
同时执行数万个加法/乘法
-
把训练时间从“几天”变成“几小时”
🎮 可以把GPU当成张量的“运动场”,能让它们一起飞速奔跑,而CPU就像慢悠悠的小路。
✳️ 难点 3:自动微分是怎么“自动”的?
🧪 假设你有个函数:
y = x ** 2 + 3 * x
如果 x = Tensor(2.0, requires_grad=True)
你计算 y
后,调用 y.backward()
,系统就会自动计算:
dy/dx = 2x + 3 → dy/dx = 7.0
🤖 为什么能自动?
因为张量记录了每个操作的**“链条”,一旦你告诉它“反向传播”,它就能自动应用链式法则**:
y ← x**2 (grad: 2x)
y ← 3*x (grad: 3)
Total grad = 2x + 3
✅ 总结回顾
项目 | 内容 |
---|---|
张量定义 | 通用的n维数组 |
与NumPy区别 | 支持GPU & 自动微分 |
关键能力 | 高效计算 + 梯度追踪 |
应用场景 | 模型输入/输出/参数的基础单位 |