第 1 章 · 张量装备库 本章要回答的三个问题:张量凭什么成为整个框架的地基?同一份数据为什么经常需要来回变形?广播机制在替我们偷懒还是在埋雷?这一章的答案,决定后面五章你能走多稳。 为什么会有这一章 远征开始前要清点装备。深度学习里的"装备"就是张量:数据是张量,模型参数是张量,梯度还是张量。你在后面章节见到的每一行 PyTorch 代码,几乎都在搬运、变换、计算张量。 麻烦在于,初学者往往在这一章留下隐性欠账。举个我们在实战里反复见到的例子:有人把形状为 64×10 的 batch 标签和 64×1 的网络输出直接送进损失函数,报错信息里写着断言失败,他盯着代码看了半小时,最后发现是标签少了一维。
本章要回答的三个问题:张量凭什么成为整个框架的地基?同一份数据为什么经常需要来回变形?广播机制在替我们偷懒还是在埋雷?这一章的答案,决定后面五章你能走多稳。
远征开始前要清点装备。深度学习里的"装备"就是张量:数据是张量,模型参数是张量,梯度还是张量。你在后面章节见到的每一行 PyTorch 代码,几乎都在搬运、变换、计算张量。
麻烦在于,初学者往往在这一章留下隐性欠账。举个我们在实战里反复见到的例子:有人把形状为 64×10 的 batch 标签和 64×1 的网络输出直接送进损失函数,报错信息里写着断言失败,他盯着代码看了半小时,最后发现是标签少了一维。这类问题的根源不是"不懂 API",而是脑子里没有张量形状的工作模型——每一维是什么、什么时候会加维、什么时候会压维。这一章就是来补这笔账的。
还有一个容易被忽略的点:张量不是 NumPy 数组的换皮。它带着三件 NumPy 没有的行头——requires_grad 决定它是否参与求导,device 决定它住在内存还是显存,计算图把它与其他张量连成网。这三件行头正是第 4 章反向传令的全部伏笔。
对照下面这份知识点清单逐条自检,每一条都对应本章一节里可以动手验证的内容:
shape 与 dtype;requires_grad 标记需要求导的张量,解释 tensor.detach() 与 torch.no_grad() 各自切断的是什么;reshape 与 view 的差异,知道什么条件下 view 会报错、为什么 contiguous 会出现在报错信息里;unsqueeze、squeeze、permute、expand 完成实际任务里最常出现的三种变形:加 batch 维、调通道顺序、广播复制;| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 1.1 PyTorch 全景与远征路线图 | 这个框架由哪几层构成,本册沿哪条路线走 | 一张分层架构图 + 环境自检代码 |
| 1.2 张量:远征装备箱 | 张量是什么、怎么造、带哪些属性 | 创建与属性查看的全套写法 |
| 1.3 张量操作与形状变换 | 形状怎么变、广播怎么算 | 变形四件套与广播规则 |
三节是递进的:先认全局,再认单个装备,最后学装备间的组合手法。
nn.Module 时会用到);问:我已经会 NumPy 了,这章能跳吗? 不建议整章跳,但可以快进。1.2 节的"三根线"(求导、设备、计算图)是 NumPy 完全没有的概念,恰好又是第 4 章的全部伏笔;1.3 节的 view 与连续性知识,在卷积实战里每周都要用。有 NumPy 底子的人过这一章大约省一半时间,但省时间不等于省内容。
问:需要先装好 GPU 环境吗? 不需要。本册全部代码在 CPU 上可复现,贯穿案例的训练以秒计。有显卡当然更好,4.2 节的混合精度实验在 GPU 上才出真实收益——但没有它,学习路径不受任何影响,装环境的拖延症不该挡住第一行代码。
问:张量的 API 那么多,记不住怎么办? 这一章不要求你记住 API,要求你记住"形状与属性"的心智模型。四件套、广播规则这些骨架建立后,具体函数名查一下文档就能用——反过来说,只背 API 不建模型的人,遇到形状报错依然寸步难行。
装备清点完毕,第 2 章就开始组队:把张量装进层里,把层装进 nn.Module,搭出能做前向计算的网络骨架。1.3 节学的变形四件套会在 2.3 节的卷积与池化里高频出现——通道维的位置错了,卷积层会当场罢工。带着 1.3 节的形状直觉进入第 2 章,你会轻松得多。