跳到主要内容

数据截至 (上游 commit c187ef3271d5)

PyTorch 实战指南 — 全书拆解

30 秒导读: 这是一本 60 万字符的大部头,教的是深度学习 —— 让机器自己从大量例子里把规律找出来的一类做法,用的工具叫 PyTorch。

先把两个后面一直会出现的词定死。机器找出来的那条规律,存下来就是一个模型; 说穿了,它是一大堆可以调的数。

而把这些数一点点调对的那套动作,就叫训练

这本书和同类书最不一样的地方在最后三分之一。 别的书讲到「练出来了」就收尾, 这本继续往下走:怎么把这套动作交给框架去跑、怎么给它装上仪表看住它、 怎么把练好的东西变成一个别人在网上就能调用的服务。四步连成一条闭环。

而它真正的主张,书里从没写出来,是我们读完全书归纳的: 从第一个能跑的模型一路做到八种任务,变的只有三个零件,那根循环一个字没改过。 (范围是可以核的:原书第 2 到第 10 章 —— 也就是我们的第 02–09 章加第 12 章。 这个范围之外的几章各自在哪里断掉,下面 §2 的 ④ 用一张表列全了。)

本组文档是我们重写的完整拆解,十五章。读完不必看原书。

1. 这是谁在什么时候写的

作者Bert Gollnick —— 一位资深数据科学家,主攻可再生能源方向
背景在柏林工业大学读航空、在哈根大学读经济;多年讲授「让机器从数据里学规律」这类课程,近年也讲会写文章的那一类 AI1
成书2026 年第 1 版;德文写成、作者自己译成英文
面向谁会写 Python(函数、列表、字典、循环、numpy 和 pandas)的人;至于「让机器从数据里学规律」这方面的底子,书说最好有,但不是必须2
利益相关几乎没有。 全书只在讲「怎么让模型吐出程序能直接读的东西」那一节顺带提了一句作者自己另一本书,没有推销任何产品或平台

有两件事必须先说,否则会误读这本书。

第一,它是一本工程师写给工程师的书,不是教科书。 全书没有一篇论文被引用,也没有一个公式是可读的 (数学公式全部是图片,提取出来是空行)。每个机制都是「凭空出现、直接用起来」。 好处是上手极快;代价是你不会知道任何一件事的来历 —— 这些来历我们都补在了拆解里。

第二,它的代码是真跑过的,而且作者敢把难看的结果原样印出来。 第 06 章那次推荐推歪了、第 07 章造出来的数字有几个认不出来,他都照实写了。 这一点很难得。但也正因为代码是照着真实脚本抄进书里的,书里有若干处正文与代码对不上、 以及照抄跑不起来的地方 —— 我们逐条核过,每一处都给了行号,写在各章的「边界与局限」里。

2. 全书一条主线

这一节是这份拆解存在的理由:只读它、不看任何一章,你也能把这本书讲给别人听。 细节全部留给各章,这里只讲「发生了什么、为什么只能这样」。

① 编程的方向可以反过来

你写一个普通程序,是先把规则想清楚、写成代码,再喂数据。 这本书教的是把这件事倒过来:把数据和答案一起交出去,让机器自己把规则找出来。

找的办法朴素得出奇:猜一个答案 → 量一下差多远 → 把每个可以调的数朝 「差得少一点」的方向挪一丁点 → 再来一遍。重复几万次。

没有人告诉它规则,规则是这么试出来的副产品。(第 01 章)

② 于是问题变成:这件事怎么写成能跑的代码

写出来才发现,那个循环本身只有五行,难的是围着它的七道工序: 文字怎么变成数、缩放的时候该拿哪一部分数据算、数据怎么分小份喂、 存下来的到底是什么、以及最要命的那一条 —— 怎么判断它是真学会了,还是把手上这些例子背下来了。

这七道工序才是全书真正的地基。它没打好,后面十一章全是空中楼阁。(第 02 章)

③ 地基打完,第一个绕不过去的问题是「好不好」怎么答

预测一个数值时,看差多少就行。但要判断类别时不行 —— 一个「答对率」会骗人。

书里那份网络访问记录有九成本来就是正常流量,所以一台什么都不学、 永远只喊「正常」的机器也能拿到 90.2%。你报一个 96.8%,听起来漂亮, 其实只比它多对了 6.6 个百分点。

所以这一章立了三条规矩:把错拆成「误报」和「漏报」两种分开看、 把判定的那条线当成可拧的旋钮、以及永远和「瞎猜」比一次。(第 03 章)

④ 骨架和标尺都齐了,剩下六章变的只有三个零件

数据摆成什么形状 + 网络里放什么层 + 输出层配哪把尺
↑ ↑ ↑
└────────── 变的只有这三样 ──────────────┘

那个循环:原书第 2 到第 10 章 —— 我们的第 02–09 章加第 12 章 ——
一个字没改过。

图说:这是全书的骨架图。 接下来每一章看起来都是全新的东西 (照片、猜你喜欢、造图……),拆开看,变的只有这三样里的一两样。

其中有一节走得最远,值得单记一笔:它把整件事倒了过来 —— 网络锁死不动,被反复修改的是输入的那张图。 它证明了一件事: 那个循环里被挪动的东西,不一定是网络。(第 04 到第 09 章)

这句主张有边界,请连着边界一起记 —— 范围之外的几章,各有各的断口:

哪几章断在哪儿在哪儿讲
第 10、11 章那一类模型训不动,整章没有训练循环下面的 ⑤
第 13 章这段循环被整个抽走,交给框架下面的 ⑦
第 14 章循环还在,但换的不是三个零件,是「你能看见什么」下面的 ⑧
第 15 章不训练,只把练好的送出去下面的 ⑨

⑤ 到语言模型这里,规律断了一次

这一类模型自己训不动。 书自己声明了这是全书唯一的例外, 理由是它对网络要多大、要喂多少例子的要求太高。 (第 10 章开头讲这一条。顺带说清:书给的理由只有两句话,一个具体的数都没有 —— 这一点我们照实写了,没有替它补。)

所以整章讲的不是怎么练,而是怎么用别人已经练好的。 而「用」本身也是一门手艺 —— 从怎么把话说清楚,到怎么让它回一份 程序能直接读的东西,而不是一段给人看的文字。(第 10 章)

至于它内部怎么转,书号称要深潜,却停在了半路 —— 最关键的那一步全书一个字没讲。 这一步由我们补完。(第 11 章)

而且补完之后会看到一件书从不点破的事: 那一招你其实已经在照片的小方块上、 在关系网络的邻居上、在时间刻度上各撞见过一次。 四处是同一件事换了对象,我们在第 11 章把它们连起来。

⑥ 训不动的不只是语言模型

既然别人已经在一百万张图上练过一遍,自己的活就不该从零开始: 把主干锁住、只换最后那一小截,两千多张垃圾照片转十遍就到 76%。(第 12 章)

⑦ 八种任务讲完,同一段代码被抄了十九次

十九这个数是我们数出来的,不是书里的 —— 数的是原书第 2 到第 10 章之间, 那一行「每一轮循环」一共出现了几次(逐处的行号在第 13 章里)。

把这十九段逐字比一遍,会发现它们是同一段 —— 变的只有三样: 喂什么数据、网络里放什么层、用哪把尺量差距。 既然如此,它整个可以被抽走,交给一个框架去跑。(第 13 章)

⑧ 可它一旦被交出去,就变成了一个看不见的过程

书里对「靠打印语句和记性来调那些设定」的评语是:那是无能者的最后手段。 所以要给它装仪表 —— 跑的时候直接盯的、事后能复现的、能在云上一次比很多次的。(第 14 章)

⑨ 最后一步:练得再好,模型留在脚本里等于零

它现在只是硬盘上的一个文件,别人的程序调不到、点不着。 导成一份换个框架也能跑的通用格式 → 包成一个能被网络请求叫醒的服务 → 推上公网。(第 15 章)

而这本书自己的收尾,恰好是最好的反面教材。 那个已经上线的服务把两个类别的名字对错了位置 —— 拿一张松饼图去问它,它回答「吉娃娃 0.697」。书对此一字未评。

它想教的那句话,被它自己坐实了:能上线,不等于是对的。

这条落点只挂在「类别名对错位置」这一件事上。 书里另有一处独立的错 (把网络吐出来的原始分数当成了「有多大把握」),那一处在部署的代码里 已经被悄悄修好了,和类别名这条没有任何因果关系 —— 两者不许说成一条链。

3. 十五章地图

这张表不用记任何术语 —— 每一章后面写的是「读完你能回答什么问题」。

读完你就能回答
01 这台机器到底怎么转「练一个模型」拆开看是哪几个动作?为什么非得用 PyTorch 这种工具?
02 一个模型的完整诞生怎么知道它是真学会了,还是把答案背下来了? 这一章是地基,别跳
03 分类,和「好不好」到底怎么量一个「96.8% 答对」为什么可能毫无意义? 那条 0.5 的线是谁定的?
04 图像就是一摞数一张照片在机器眼里是什么?为什么不能像表格那样直接喂进去?
05 看得更细怎么框出每个东西在哪、怎么判到每个像素?为什么可以不改网络、只改图?
06 猜你喜欢是怎么猜的一个编号怎么变成一串有意义的数?为什么书里那次推荐推歪了?
07 让网络抄自己让它把输入原样吐回来,意义在哪?改一步之后,它凭什么能造出没见过的东西?
08 当「谁连着谁」本身就是信息关系怎么喂给模型?2708 篇论文只有 140 篇有人标过答案,怎么办?
09 顺序是命脉为什么按时间排的数据绝对不能随机打乱切分?网络怎么记住很久以前的事?
10 不训模型,用模型这一章为什么破例不练?按什么计费?三个旋钮各管什么?
11 一句话在里面怎么走全书最大的缺口在这里被补上:那个「每个词去看别的词」的分数到底怎么算出来的?
12 站在别人已经练好的本事上为什么不从零开始?「把网络锁死」这件事在书里其实是两件,差在哪?
13 把那段代码交出去那十九段真的是同一段吗? 交出去之后代码长什么样?
14 过程怎么才看得见三件观测工具各管一段,分工是什么?书里那个「一口气试很多组设定」其实什么也没试。
15 让模型走出脚本练完的东西怎么变成一个别人能调的服务?全书的落点在这一章。

推荐顺序: 01 → 02 必读,它们是后面所有章的前提;之后按兴趣挑。 唯一的例外是 11 —— 它是全书的机制枢纽,而且是我们补写最多的一章,别跳。

4. 这本书覆盖什么、不覆盖什么

这两张表和上面那张地图一个口径:不用记任何术语。

覆盖(而且讲得比多数材料清楚)—— 读完你能回答:

  • 「练一个模型」到底是哪几个动作,以及围着它的一整套工程件;
  • 判断类别的成绩为什么不能用一个数报,该看哪几个;
  • 照片、一堆编号、有连接关系的数据、按时间排的数据,各自要怎么摆才喂得进去;
  • 怎么让网络自己压缩自己,以及怎么让它造出新东西;
  • 怎么调用别人的语言模型,怎么让它按你要的格式回话;
  • 怎么站在别人已经练好的东西上,用几千张图做完本来要几十万张的事;
  • 练完之后的一整段:交给框架、装上仪表、导成通用格式、包成服务、推上公网 —— 这一段是它区别于同类书的地方;
  • 外加大量真实跑出来的数字,和几处作者照实印出来的失败结果。

不覆盖(别指望在这本里找):

缺什么说明
从零练一个语言模型前言明说不做;整本书里语言模型只出现在「怎么调用」这一侧
数学推导公式全部是图片,提取出来是空的 —— 这本书从头到尾「会用,不推导」
一类「只改一点点就能把现成模型改造到自己任务上」的省钱办法前言许诺第 10 章讲,正文一次都没出现 —— 这是全书唯一一处许诺落空
让模型自己接连做很多步事「先去查一下再答」「自己调用外部工具」「一次任务来回问答好几十次」一个字没有
今天造图最常用的那两套做法造图这一侧只讲到 2013 年那一代的做法,更早的对抗式做法和现在的主流做法都没提
它会不会说危险的话、怎么把它掰到人想要的方向、以及怎么给它打分排名完全不在范围内
怎么把训练摊到很多台机器上、怎么把练好的东西压小、怎么在生产环境里管很多份服务只在部署那一章顺带提了一句名字
人工给数据配答案这件事怎么组织只演示了工具界面,没讲怎么分工、怎么保证几个人标得一致

5. 我们的判断

判断(我们的,不是书里的):这本书的价值排序是 —— ① 工程闭环(不可替代) > ② 八种任务的上手路径(好,但别处也有) > ③ 机制讲解(够用,不深)。 引用它的时候引 ① 和 ②。要机制,库里另外两本 PyTorch 书讲得更透。 如果错,会错在: 如果读者要的恰恰是「一本书把八种任务各跑一遍」, 那么 ② 对他就是第一位的 —— 这条排序是按「别处能不能找到替代」排的, 不是按「哪一部分写得好」排的。

判断(我们的,不是书里的):这本书最该被记住的一句话,书自己没写出来 —— 「换个任务」这件事,在 PyTorch 里只意味着换三个零件。 数据摆成什么形状、网络里放什么层、输出层配哪把尺。那个循环从头到尾没动过。 想明白这一条,面对一个全新的任务时,你就知道自己该问哪三个问题。 如果错,会错在: 如果某一类网络的循环里真有额外的机关 (比如第 07 章那种要在循环中间掷一次骰子的网络),这句话就说过满了 —— 但骨架不变,机关也只是塞进「算预测」那一步里。

判断(我们的,不是书里的):这本书的代码要当参考读,不要当模板抄。 我们逐章核出了二十来处正文与代码对不上、或者照抄跑不起来的地方: 有函数忘了写返回值的、有正文说 A 格式而代码按 B 格式算的、 有讲了一种结构却加载了另一种模型的、有把「和瞎猜比」那个对照拿模型自己的预测当答案的、 有一个「一口气试八组设定」的演示其实一组都没换成的、 还有把类别名对错位置、一路带到线上服务而且对着错误的输出一字未评的。 每一处我们都给了原文行号,你可以自己去看。 如果错,会错在: 如果这些是转码或排版事故、而作者的原始脚本是对的, 那么问题在这本书的制作而不在作者 —— 但对照着书敲代码的读者踩的坑是一样的。

判断(我们的,不是书里的):它对「怎么知道自己做得好不好」这件事,执行得不一致。 第 03 章立下了「必须和瞎猜比一次」这条规矩,第 04、07、08、12 章都执行了; 可第 06 章那个推荐系统一次都没比过 —— 而那正是全书唯一一次结果明显出错的地方。 如果比了,病因当场就会暴露。 另有两处执行得不干净:第 09 章的时序预测没有和「下个月 = 这个月」这个现成对照比过; 第 14 章讲了整整一章「怎么评估」,自己却一个准确率都没报。 如果错,会错在: 如果推荐这一类任务确实没有公认的简单对照可比, 这条批评就不公平 —— 但「按全站最受欢迎排个序」是现成的、几行代码就能跑的对照。

6. 许诺兑现表

这份拆解里每一处「第 N 章讲」「后面会讲」,都在这里记一行、逐行核过。 核的是两件事:那一章真的讲了吗?讲的是不是许诺的那件事,而不是同名的另一件事。

许诺在哪许诺了什么应兑现在哪核过了吗
本页 30 秒导读末「那根循环没改过」这句话的范围之外,几章各在哪儿断本页 §2 ④ 的断口表✓ 同页兑现
本页 §2 ④ 断口表四处断口各自在哪一段讲本页 §2 ⑤(第 10、11 章)· ⑦(第 13 章)· ⑧(第 14 章)· ⑨(第 15 章)✓ 同页兑现,四处都在
本页 §2 ⑤语言模型为什么「训不动」10 §2但要注明:书给的理由只有两句话,没有具体的数
本页 §2 ⑤书停在半路的那一步、以及四处「同一招」怎么连11 §5(那一步) · 11 §7(四处)
本页 §2 ⑨松饼图为什么被答成吉娃娃15 §8 第 ⑧ 步与紧跟的判断块
本页 §2 ⑦那十九段循环是同一段13 §2(逐章计数与行号)
01 §5「每个可调的数该往哪边挪」那个信号的详细来历01 §7✓ 同章兑现
01 §6 末输出层与量差距的尺怎么配套03 §7
01 §9 判断块「循环里有额外机关」的那一类网络07 §7(把随机那一步绕过去)
01 §11那种「自己重建自己」的网络会正经用一次 tanh07 §8.1 第 ④ 步
02 §2 末类别太多时,把文字变成数的另一条路06 §5
02 §7 图说怎么在那条曲线上自动刹车、自动存最好的一份13 §5.2(刹车) · 13 §5.1(存最好的)
03 §2 末那张表里两把量差距的尺各叫什么03 §7✓ 同章兑现
03 §7那两件防身层为什么有效、边界在哪04 §7.1、§7.2正文原写「第 04 章第 6 节」,已按此表改成第 7 节
03 §7 末「网络最后一层吐的不是把握值」这条规矩一路管到第 15 章15 §7.2
03 §8 判断块那条判定线卡错的地方在哪里重犯、在哪里被修好04 §9 判断块(重犯) · 15 §7.2(修好)
03 §10把「喊得准」和「漏得少」合成一个数的那把尺04 §9 第 ⑪ 步
04 §8 末那套「切成小块当一串东西读」的结构内部怎么转11 全章(尤其 §5)
04 §8 中「把编号换成一串有意义的数」这件事第 11 章再讲一次11 §2.2
04 §9 第 ⑧ 步「只存最好的那一份」会变成一行现成的配置13 §5.1
04 §9 判断块类别名对错位置那条线在第 15 章收网15 §8 第 ⑤、⑧、⑨ 步
04 §11别人已经练好的那份东西怎么用12 全章
05 §2 末「每类几百张」怎么降到「每类几十张」12 §2 末的钩子兑现块
05 §6 第 ③ 步那个记录过程的工具是什么14 §4
05 §7 末「拿别人练好的接着往下练」这件事12 全章
05 §8 开头「把网络锁死」在这本书里是两件事12 §4
06 导语 · §5同一招用在词上是什么样11 §2.2
07 §8.1 第 ① 步为什么把像素缩放到 −1 到 +107 §8.1 第 ④ 步✓ 同章兑现
08 导语 · §5 · §9「给每个来源打分再加权」用在词上、以及那个分数怎么算11 §4(用在词上) · 11 §5(分数怎么算) · 11 §7(四处连起来)
09 导语 · §7 记账块 · §10那个输给 LSTM 的模型少了什么部件11 §3 末的判断块
09 §6.2 末 · §10 · §11「给每个来源打分」那个分数具体怎么算11 §5 与 §8 第 ⑦–⑨ 步
09 §8 末那套「把循环交出去」的框架13 全章
10 导语 · §12书停在半路的那一半由我们补11 §5
10 §3 末一段话被切成的那些小块是什么、为什么它们会变成成本问题10 §5✓ 同章兑现
10 §4 开头「公开」这个说法里的陷阱10 §4.1✓ 同章兑现
11 §7四处「同一招」各在哪一章04 §8 · 08 §5 · 09 §6.2✓ 回指,三处都在
13 导语 · §2 末「把练到一半的那份成果存下来」这件事叫什么13 §5.1✓ 同章兑现
13 导语交给框架之后:装上仪表、送出去14 全章 · 15 全章
13 §8 末「记到哪儿去、怎么看」14 §3、§4
14 §6 第 ③ 步网络分成两块的好处14 §6 第 ⑦ 步(网络结构那一行)✓ 同章兑现
15 §7 第 ② 步预处理为什么是最容易翻车的一步15 §7.1✓ 同章兑现
15 §8 第 ⑥、⑦ 步两家云各自怎么推上去(「细节在第 9 节」)15 §9.1(Heroku)· 15 §9.2(Microsoft Azure)✓ 同章兑现
15 §3.1「一个程序怎么被另一个程序叫到」和第 10 章讲的是同一件事10 §3✓ 回指

全表 43 行,逐行核过:每一处许诺都落到了具体的节,而且讲的是许诺的那件事。 只有第一行要额外注明 —— 我们许诺过「训不动的门槛」, 而书只给了定性的两句话、没有任何数字;这一点在第 10 章里照实写了,没有替它补。


拆解写于 2026-08-29,依据 2026 年英文版(Rheinwerk)。原始书籍文件不入库, 本组文档是我们自己的重写;每条引用都可用 node scripts/book-verify.mjs pytorch-the-practical-guide-to-building 回核。

Footnotes

  1. 出处:「作者简介」(text/16-fm-the-author.txt:3,搜「senior data scientist」)。原文:Bert Gollnick 是一位专攻可再生能源的资深数据科学家;他讲授数据科学与机器学习课程已有数年,近年也开始讲生成式 AI 与自然语言处理;他在柏林工业大学学航空、在哈根大学学经济。

  2. 出处:「前言」第 17-30 段(text/02-fm-preface.txt:20,搜「understanding of Python programming」)。原文列出的前提:会写函数、会用列表和字典这类数据结构并加以操作、会写循环(主要是 for 循环)、会用 numpy 和 pandas;机器学习基础「理想情况下有,但不是必须」。全书代码基于 Python 3.12.7(text/02-fm-preface.txt:142,搜「3.12.7」)。