
简介《动手学深度学习PyTorch》是一本面向深度学习入门与进阶读者的实践型电子书由Aston Zhang、Zachary C. Lipton、Mu Li和Alexander J. Smola共同撰写当前版本为Release 2.0.0-alpha2更新于2021年8月。全书围绕PyTorch框架展开开篇介绍安装配置与基本数据结构随后通过数据操作章节详细讲解张量创建、数学运算、广播机制、索引切片、内存优化以及与其他Python对象转换等实用技巧数据预处理章节则覆盖数据集读取、缺失值处理和转张量格式。后续还系统讲解线性代数中的标量、向量、矩阵、张量及范数等内容并延伸到神经网络、损失函数、反向传播、优化算法、CNN、RNN和NLP应用同时涉及GPU加速理论与实践并重。资源为1个PDF文件压缩包大小约22.13MB目录结构完整适合系统查阅。目前已有5934人学习使用是掌握PyTorch深度学习的扎实参考。 我就是靠啃这本PDF把深度学习基础打牢的。在做算法工程师这几年里翻得最多的资料就是《动手学深度学习》PyTorch版它不像很多厚得像砖头的教材那样一上来就堆公式而是每一章都配套可运行的代码让你在命令行里亲眼看着模型“学”起来。今天想结合我自己的学习路线和踩坑经历聊聊这本书究竟该怎么看、怎么用以及从PDF到真正上手之间你还差哪些关键步骤。1. 为什么这本书值得从头到尾“动手”过一遍1.1 它解决的不是“看不懂”而是“不会做”很多初学者拿到深度学习的资料第一反应是先去推数学公式、理解反向传播、搞懂矩阵求导结果推了两周线性代数连一个最简单的模型都没跑通。这其实是典型的路线错误。深度学习本质上是实验科学代码跑通了、损失下降了、精度提升了你对原理的理解才会自然跟上。《动手学深度学习》PyTorch版这套书的核心思路就是让你“先跑起来再搞懂为什么”。它的内容组织方式是每一个章节先抛出问题场景比如如何识别图片里的猫、如何预测房价再给出可运行的完整代码然后用公式和图示解释代码背后的数学原理。这个顺序特别重要因为大脑在“有一个具体可见的结果”之后再接收抽象推导记忆效率要高得多。比如第3章线性回归你会在几分钟内训练出一个预测房价的模型然后再去理解损失函数、梯度下降就不会觉得这些概念是空中楼阁。1.2 PDF形态反而更适合深度学习入门有人会问现在网上教程那么多视频课也一堆为什么还要看PDF我个人体验是读PDF的“主动学习”属性比看视频强太多。视频课容易出现一种假象——眼睛看着老师在敲代码耳朵听着讲解觉得“我都懂了”一关视频自己写就卡住。而PDF这种文字代码的载体逼迫你一个字一个字地读遇到不懂的地方停下来把手放到键盘上自己敲一遍这个从“看懂”到“写出来”的过程才是真正的学习。另一个实用好处是检索方便。这本书的PDF版本支持全文搜索比如你写代码时突然忘记了某个API的用法直接搜“transpose”或“view”就能定位到相应章节比翻纸质书快太多。我当年就是一边开着PyCharm敲代码一边开着PDF搜索查函数的参数含义效率非常高。而且PDF可以随意做高亮、注释、书签完全不心疼把书翻烂。1.3 适合哪些人拿来入门如果你符合下面任何一种情况这本书都是绝佳的起点在校学生刚学完Python基础想进入深度学习方向已经工作的开发者需要用计算机视觉、NLP技术解决业务问题但缺乏系统性理论基础准备算法岗面试需要快速建立深度学习知识体系同时积累实战代码量的人。它默认你会Python基础语法和基本线性代数概念但即使这两块薄弱书里的代码注释也足够详细搭配网上任何一门Python快速教程都能跟上。2. 动手之前先把PyTorch环境配好2.1 环境配置的坑九成出在版本匹配很多人一看《动手学深度学习》里的代码就迫不及待想跑结果连环境都没装明白。PyTorch环境搭建确实是新手遇到的第一道坎尤其在国内网络环境下下载慢、镜像配置错误、CUDA版本不匹配随便一个都能卡上半天。但我不想让你在这个环节消耗太多意志力因为环境问题本质上是经验问题踩过一次后面就会变成熟工。先说我的推荐方案用Anaconda创建独立的虚拟环境不要直接装在系统Python里。Anaconda的好处是环境隔离干净不同项目用不同Python版本和依赖库互相不干扰。打开命令行依次执行conda create -n d2l python3.9 conda activate d2l pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu这段代码创建了一个名为d2l的虚拟环境然后安装了CPU版PyTorch。如果你有NVIDIA独立显卡想用GPU加速需要先查看自己显卡支持的CUDA版本再安装对应的GPU版本。很多人误以为装上NVIDIA驱动就万事大吉其实PyTorch是通过CUDA工具包和显卡驱动协同工作的两者版本必须匹配。查看CUDA版本的命令nvidia-smi在输出结果的右上角能看到CUDA Version比如12.4那就可以安装对应cu124版本的PyTorch。2.2 一本书级的学习环境长什么样除了PyTorch本体还建议装Jupyter Notebook。这本PDF里的代码按章节组织成一个个notebook你一边读章节一边在notebook里填充执行代码交互体验非常好。安装只需要一行命令pip install jupyter d2l这个d2l库是书作者配套编写的工具包里有绘图函数、数据处理工具和模型训练的辅助方法书里的代码都会调用它。装好之后在命令行输入jupyter notebook浏览器就会弹出文件管理界面找到你下载好的notebook文件就能开始跑了。我用过的项目级环境配置流程是这样的Windows或者Linux下先确认Python版本在3.8到3.11之间安装时尽量用conda管理而不是全靠pip因为conda对二进制依赖的处理更稳装完一切之后写一个三行代码自测import torch print(torch.__version__) print(torch.cuda.is_available()) x torch.randn(3, 3) print(x)如果能看到版本号输出、CUDA可用状态你的机器不支持GPU则显示False属正常并且能打印出随机张量矩阵就说明环境已经通了。2.3 GPU和云平台怎么选书里大部分小实验用CPU也能跑只是速度慢一些。线性回归、Softmax分类、多层感知机这些基础模型CPU训练几十个epoch也就几分钟的事。但是到了第七章卷积神经网络、第八章循环神经网络尤其要训练图像数据集时CPU版本的训练时间会被拉长到难以忍受的程度。我的建议是如果条件允许一步到位装GPU版暂时没有独立显卡也可以先用Google Colab之类的云端notebook免费额度训练一些中小型模型绰绰有余。关于深度学习的环境搭建网上教程很多但绝大多数都忽略了一个关键点CUDA、cuDNN、PyTorch三者之间存在一个兼容矩阵不是随便下载最新版就能直接配合使用。所以我强烈建议在安装之前先去PyTorch官网那个“Get Started”页面选好你的操作系统、包管理器、CUDA版本它会自动生成对应的安装命令复制粘贴执行即可。这比你在网上找到的各种零散教程要可靠得多。3. 核心章节技术点拆解从自动求导到Transformer3.1 不要跳过自动求导直接进模型很多人学深度学习时有个坏习惯一上来就看卷积神经网络、看Transformer觉得那些才是“时髦”的东西。但如果你跳过前几章的基础后面大概率会在写代码时卡壳。《动手学深度学习》在第2章就安排了一个关键的概念——自动求导automatic differentiation。PyTorch的自动求导机制简单说就是当你定义一个张量并设置了requires_gradTruePyTorch会自动记录你在这个张量上做的所有运算然后当你调用backward()时它能自动计算出最终的损失函数对这个张量的梯度。这个机制省去了你手推导数、手写偏导链式法则的麻烦。打个比方这就像开车用自动挡你不用时刻判断该挂几挡变速箱会根据速度和油门自动切换。但是如果你不理解发动机和齿轮的基本原理遇到上坡下坡的特殊情况就不知道怎么应对。同理如果你不理解自动求导在做什么当需要自定义一个复杂模型、手动修改梯度时就会一头雾水。书里这一章的练习也很实在让你实现标量对向量的求导、向量对矩阵的求导并验证手动计算的结果和代码输出的结果是否一致。我建议你别跳过这个练习它只需要十几分钟但对后续理解“为什么我的梯度更新是这个方向”非常有帮助。3.2 数据加载器DataLoader的隐藏价值在进入经典的神经网络章节之前值得花点时间吃透DataLoader这个组件。很多教程只告诉你怎么用torch.utils.data.DataLoader去载入数据但《动手学深度学习》把这个过程拆开了数据从原始文件到Python对象再到Batch张量每一步都在做什么batch size变化对训练收敛速度的影响shuffle为什么能减少模型过拟合到特定训练顺序的风险。实际业务场景中数据加载往往是整个训练流程里最容易出问题的环节图像数据的尺寸不一致、文本数据的填充长度不一样、内存不足导致OOM这些都得靠你对数据加载流程的深刻理解去解决。书里把这块讲得浅显且系统跟着代码走一遍你就知道怎么用torchvision自带的数据集、怎么自定义Dataset类、怎么把transform做进去以后换到自己的项目里这些全都是复用性极强的技能。3.3 卷积神经网络看清楚每一层在干什么到了第七章书里开始讲卷积神经网络CNN。那一章的图解非常经典——你可以把卷积层想象成用一个放大镜在图片上滑动每滑动到一个位置就记录这个区域的特征得到一张新的“特征图”。多个卷积核叠加就相当于用不同角度的放大镜去观察同一个物体有的关注边缘、有的关注纹理、有的关注颜色变化最终组合起来形成对图片内容的整体理解。实操时最有价值的代码是手动打印每一层输出的张量形状。你定义一个包含卷积、池化、全连接层的网络然后把一张图片向量喂进去逐层打印shape。这个过程能直观看到数据从维度3×224×224的彩色图片一步步变成256个通道的特征图最后压平成向量送入全连接层。我当年就是通过这个练习彻底理解了CNN各层之间的数据流动面试时被问到“卷积层参数量怎么算”也能很快推导出来。书里还配套讲了现代CNN的几大经典结构AlexNet、VGG、NiN、GoogLeNet、ResNet。不需要每一行代码都背下来但一定要动手跑一遍观察不同网络的层数、参数量、训练时间差异。你会发现模型深度增加并不一定意味着效果更好如果没有任何残差连接等技巧深层网络反而会退化这个观察会帮你建立对“模型设计”的直觉。3.4 循环神经网络与Transformer的代码对比如果说CNN是“看图”那循环神经网络RNN和Transformer就是“读懂顺序”。书里从语言模型切入先讲怎么用一个接一个的Hidden State去预测下一个词。RNN的朴素代码实现并不复杂但有个致命弱点序列太长时最早的信息会在传递过程中被“稀释”掉就像传话游戏传到最后只剩几个零碎单词。Transformer的注意力机制把这套逻辑换了一个思路不再严格按顺序传递信息而是让序列中的每个元素直接跟所有其他元素计算相关性。这种“你看着我、我看着你”的机制让模型能在一句话里同时关注到最关键的几个词而不受距离限制。书里把缩放点积注意力Scaled Dot-Product Attention的数学公式和实现代码放在一起一步步拆解Q、K、V三个矩阵是怎么从输入张量里线性映射出来的。我的建议是把它的多头注意力Multi-Head Attention代码自己重写一遍不要直接复制。当你亲手实现过从一个QKV投影矩阵到多头拼接的完整过程你再看工业界部署的各类大模型架构就会有种“看穿底牌”的感觉。现在很多深度学习岗位的面试题会直接让你手写一个简化的注意力机制这本书的训练足够帮你应付这种场景了。3.5 优化算法与训练技巧验证你的模型真的在“学”在掌握了几大主流网络结构之后书里用相当篇幅讲解优化算法动量法、AdaGrad、RMSProp、Adam。这一章很多人一眼带过觉得“无非是换一个优化器”但我的经验是理解了这些算法的区别你才能在模型不收敛时快速定位问题。比如Adam自带自适应学习率通常比SGD更“好调参”但它有时候会收敛到泛化性能较差的局部最优动量法则能帮助SGD越过一些小的“坑”。书里的可视化插图把这些优化算法的更新轨迹画了出来一目了然。训练技巧部分还涵盖了正则化、Dropout、Batch Normalization、学习率调度等这些都是在实际项目中决定你模型能不能用的关键。以Batch Normalization为例它的作用是把每一层的数据分布拉回到标准正态分布附近让梯度传播更顺畅这样你可以使用更大的学习率训练速度显著提升。书里配套代码可以让你对比加与不加BN时同一网络在相同epoch内的训练精度差异这种“眼见为实”的学习方式比背诵知识点管用一百倍。4. 实操过程与避坑实录4.1 我的完整跑通路径我拿到这本书PDF之后的实操路径是这样的先花一晚上把Anaconda和PyTorch装好把notebook环境跑通然后用两到三周的业余时间按顺序过前面5章每天跑1-2个notebook重点不是尽快刷完而是把每段代码手动敲一遍观察输出到卷积神经网络和循环神经网络的章节我开始在本地准备一个小数据集比如书里自带的Fashion-MNIST把模型换成自己的数据来训练看准确率变化。这个过程花了大概一个半月但之后再看任何深度学习论文代码都不再有“阅读障碍”。具体到实操中的步骤我给自己的要求是看到一个章节先用5分钟浏览本节标题、公式和代码框架猜猜作者要做什么然后不看答案自己尝试实现核心函数卡住了再看PDF里的代码对照自己的写法思考差异最后跑通后用文字总结这段代码解决了什么问题。这套“先猜后看”的方法让学习效率提升特别明显也让我养成了阅读源码的习惯。4.2 环境配置和高版本PyTorch的匹配问题PyTorch版本迭代很快书里有些代码是用老版本API写的在高版本里可能会遇到API变动。最常见的就是部分函数移了位置或者改了名称比如torch.nn.functional里的某些函数参数调整了顺序。我的习惯是在遇到报错时先看错误信息的最后一行大部分情况会提示你函数已弃用或移动到新的模块下照着提示改就行。书里配套的d2l库也会随版本的迭代更新尽量保持与书的最新版本同步能减少不少麻烦。关于深度学习中“环境搭建”的热搜其实很多大家抱怨最多的就是“明明照教程装为什么还报错”。我经历过最典型的一次在一台Windows机器上装GPU版PyTorch明明显卡驱动是最新的torch.cuda.is_available()返回True但一训练就报CUDA error。排查后才发现是显卡驱动版本太新与已安装的CUDA工具包不兼容。这个问题的解决方法是先安装一个与PyTorch官网兼容矩阵匹配的CUDA Toolkit版本版本对应是很关键的因为PyTorch是动态链接CUDA的版本差太远就会出问题。4.3 训练时常见的几个致命细节下面这份速查表是我在反复跑这本书时经常用到的排查思路现象可能原因排查方向损失一直不下降学习率过大或过小尝试把学习率调低为原值的0.1倍或调高10倍观察变化训练集精度很高测试集很低过拟合增加Dropout、数据增强或减小模型容量GPU显存不足batch size太大减小batch size、降低图片分辨率数据加载特别慢DataLoader线程设置不足增大num_workers参数时刻报缺少某个模块但不缺虚拟环境混乱检查当前conda环境是否激活用conda list核对版本还有一个容易被忽视的点模型训练中保存和加载模型时是只保存参数model.state_dict()还是保存整个模型这两者在跨环境、跨版本时的兼容性差别很大。书里教的torch.save(model.state_dict(), model.pth)是最稳妥的方案加载时先重新实例化模型结构再load_state_dict这样即使PyTorch升级模型文件也基本不受影响。我在实际项目里吃过亏早期图省事直接保存整个模型换了一台机器加载直接报类定义缺失后来就老老实实用state_dict方式了。4.4 搜出来的“热门坑”和我的解法从网上反馈来看这本书的读者最常卡住的是第4章Softmax回归及第8章循环神经网络。前者因为涉及交叉熵损失函数和自定义训练循环的细节很多新手容易在维度变换上出错循环神经网络则因为隐藏状态传递的写法比较绕一不留神就把batch_size和seq_len的维度搞混了。我自己也在这两章花费的时间最多经验无非是遇到维度报错就打印每一个张量的shape一行一行对照公式理解。另一个常见问题是Python视觉库和深度学习库版本之间互相打架比如OpenCV、Pillow、Matplotlib之间兼容问题导致图像显示异常。这类问题多数出在conda把某些库的版本自动降级或升级了。我现在的经验是在学习阶段不要把太多库一股脑装进同一个环境一个虚拟环境只装当前项目需要的依赖书里需要的用pip install d2l一次装齐基本不会出大问题。5. 从PDF到真正“动手学”的进阶路径5.1 搭配视频课、代码仓库和社区讨论一起看如果你觉得单看PDF有点干可以找一找这本书配套的免费视频课。作者在讲课时不是照本宣科而是边写代码边讲解遇到报错还会现场debug这种“真实感”对初学者很有价值。我的建议是看视频前先自己跑一遍PDF对应章节的代码然后视频只看你卡住的部分这样的效率最高不会被视频节奏拖着走太久。代码仓库就更有用了。书在GitHub上的仓库包含了所有notebook、图示和练习题的参考答案你可以克隆到本地跟着跑。遇到某一章代码运行不了先去仓库的Issue区搜一搜大概率有人已经提了同样的问题并拿到了解决方案。再配合国内的深度学习社区知乎、CSDN、公众号文章里都有大量针对这本书的笔记和解读多看看不同的讲解角度总能找到适合你理解习惯的那一种。5.2 把书里的练习“魔改”成自己的项目我见过太多人认真看完这本书代码全部跑通了但合上书还是不知从何开始做自己的项目。问题出在他们一直停留在“照抄”阶段没有尝试过修改。一个很好的过渡练习是把书里用Fashion-MNIST数据集的分类任务换成你自己感兴趣的图片分类任务比如猫狗分类保持模型结构不变只需要替换数据加载和数据预处理部分。这个过程会让你迫于真实数据的“脏乱差”去处理各种问题图片尺寸大小不一、类别不均衡、数据量不足这些都是书里不会直接教你的东西。再进阶一点可以尝试把书里的单标签分类改成多标签分类或者把网络的最后一层换成多个输出头。这些改动虽然基础但可以让你真正理解模型的输入输出是怎么设计的而不是只会“拿着别人搭好的架子跑数据”。等你完成了一个属于自己的端到端项目——数据获取、数据清洗、模型选择、训练调参、评估报告——再回头看这本PDF你就会觉得每一页都读懂了七八分。5.3 这本书没覆盖但你现在可以主动去学的东西《动手学深度学习》PyTorch版的覆盖面已经很广但深度学习领域日新月异有几个方向是书里着墨不多但实际工作中高频用到的。一是分布式训练大模型不可能单卡训练你要至少了解梯度同步、数据并行和模型并行的基本思路二是模型部署训练完的模型要落地到移动端或者边缘设备需要会转成ONNX或用LibTorch做推理三是一些热门新架构比如基于Transformer的各种变体、扩散模型。这些都可以在吃透这本书之后再系统学习深度学习云平台和开源代码库也能给你提供足够多的实战素材。如果你未来想往算法方向深耕这本书只是火锅里的锅底后续还需要按需加菜读原版论文、复现顶会代码、参加Kaggle比赛。但好消息是锅底的味道对了后面加什么菜都容易煮熟。这本PDF带给你的最大价值是建立了一套“看到模型就知道大概怎么回事、看到代码就能上手调试”的基本功这个基本功在之后不管是搞科研、做业务还是面试求职都是实打实的底气。5.4 以终为始这本书最终能带给你什么我在团队里带过不少实习生观察下来有个规律凡是认真把《动手学深度学习》PyTorch版跟了一遍的入职后给个具体任务都能较快上手凡是只看过论文、没动手敲过代码的往往在环境配置、数据流水线、debug模型这些环节上卡壳很久导致产出效率很低。原因很简单深度学习是工程性很强的学科理论再漂亮最终都要在张量运算、梯度计算、显存管理这些细节中落地。这本书真正的学习成本不只是把代码跑通而是去理解每一处设计选择的“为什么”为什么用交叉熵做分类损失为什么CNN需要权值共享为什么注意力机制要缩放这些“为什么”积累起来你面对一个新模型时就有了“庖丁解牛”的视野看得见骨架和脉络而不是只看到密密麻麻的矩阵运算。如果你还在门口徘徊不妨就从下载这本书的PDF开始装上PyTorch把这本“最像实战的教材”一页一页“跑”到底。本文还有配套的精品资源点击获取