news 2026/8/27 16:35:03

1900行深度学习工具库全解析:Dive-Into-Deep-Learning-PyTorch-PDF的d2lzh.py自定义层与训练函数设计原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1900行深度学习工具库全解析:Dive-Into-Deep-Learning-PyTorch-PDF的d2lzh.py自定义层与训练函数设计原理

1900行深度学习工具库全解析:Dive-Into-Deep-Learning-PyTorch-PDF的d2lzh.py自定义层与训练函数设计原理

【免费下载链接】Dive-Into-Deep-Learning-PyTorch-PDF本项目对中文版《动手学深度学习》中的代码进行了PyTorch实现并整理为PDF版本供下载项目地址: https://gitcode.com/gh_mirrors/di/Dive-Into-Deep-Learning-PyTorch-PDF

Dive-Into-Deep-Learning-PyTorch-PDF 项目将中文版《动手学深度学习》全书代码重新整理为 PyTorch 实现,并打包为可下载的 PDF 版本。全书代码共用一个约 1900 行的自定义工具库 d2lzh.py,里面封装了自定义层(Flatten、全局平均池化、残差块)、统一的训练函数族、数据集加载器与可视化函数。本文带你拆解这个工具库的设计原理,帮助你快速读懂并复用全书 9 章的全部示例代码。

d2lzh.py 是什么:全书共用的深度学习工具库

如果你按章节顺序跑过 notebook,会发现每个文件开头都有同一句import d2lzh as d2l。这个工具库相当于全书的"地基",主要包含 4 类构件:

构件类型代表函数/类作用
自定义层FlattenLayerGlobalAvgPool2dResidual补齐 PyTorch 官方 API 中教学需要的层
训练函数族train_ch3train_ch5train_ch7train统一封装"前向-求梯度-更新-评估"循环
数据工具load_data_fashion_mnistdata_iter_randomdata_iter_consecutive一行代码加载并切分数据集
可视化/评估semilogyshow_imagesevaluate_accuracy快速绘制训练曲线、计算准确率

文件顶部还自动完成了两件大事:选择 GPU/CPU 运行设备(code/d2lzh.py),以及定义语义分割用的 VOC 颜色映射表(code/d2lzh.py),后续章节直接复用。

项目目录结构:9 章 notebook 与配套数据

项目结构非常清爽,核心资料分布如下:

  • 代码:code/ 目录下有 Ch1 预备知识.ipynb、Ch2 深度学习基础.ipynb、Ch3 深度学习计算.ipynb、Ch4 卷积神经网络.ipynb、Ch5 循环神经网络.ipynb、Ch6 优化算法.ipynb、Ch7 计算性能.ipynb、Ch8 计算机视觉.ipynb、Ch9 自然语言处理.ipynb,以及共用的 d2lzh.py
  • 数据:data/ 存放各章节数据集(Fashion-MNIST、周杰伦歌词、皮卡丘等)
  • 全书PDF:Dive Into Deep LearningV1.1.pdf,可直接下载离线阅读

README 特别提醒:d2lzh.py 必须与各 notebook 放在同一文件夹下(见 README.md 的"备注"一节),否则会因找不到模块而报错。

快速上手:三步跑通全部 notebook

  1. 获取项目git clone https://gitcode.com/gh_mirrors/di/Dive-Into-Deep-Learning-PyTorch-PDF
  2. 安装环境:按 README.md 的"环境"一节安装 matplotlib、torch、torchvision、torchtext
  3. 打开 notebook:用 Jupyter 依次运行 Ch1 到 Ch9,工具库自动被导入,无需额外配置

自定义层设计原理:补齐 PyTorch 教学所需的三层

自定义层是 d2lzh.py 最有价值的部分。原书需要"从零开始实现"某些结构,而 PyTorch 官方 API 没有直接对应,作者就手动封装了nn.Module子类。

FlattenLayer:卷积网通向全连接层的"桥梁"

CNN 输出的特征图是四维张量(batch, 通道, 高, 宽),而全连接层只接受二维输入。FlattenLayer用一行view完成降维:把后三维拍平(code/d2lzh.py)。这是 LeNet、VGG、ResNet 等章节里反复出现的过渡层。

GlobalAvgPool2d:把"最后的空间维度"变成分类能力

全局平均池化层没有独立的 PyTorch 模块,作者在forward中把池化窗口大小动态设置为输入的高和宽,一步将(batch, 512, 7, 7)压成(batch, 512, 1, 1)(code/d2lzh.py),从而替代传统"拍平+大矩阵"的参数膨胀结构。

Residual:残差块让 ResNet 一次成型

Residual类完整实现了"3×3卷积→BN→ReLU→3×3卷积→BN→跳跃相加"的结构,并通过use_1x1conv参数处理输入输出通道数不一致的情况(code/d2lzh.py)。再配合resnet_block的批量组装函数,resnet18就能用十余行代码搭出完整的 18 层残差网络(code/d2lzh.py)——这就是"积木式"网络构造思想的典型体现。

训练函数族深度解读:梯度清零、设备迁移与多GPU并行

工具库提供了多套训练函数,分别对应不同章节的教学需求,设计思路一脉相承:

  • train_ch3(code/d2lzh.py):面向"从零开始实现"。参数是裸张量,函数内部自己调sgd(params, lr, batch_size)更新,并兼容无优化器的场景,适合 2.x 章节的 softmax 回归教学
  • train_ch5(code/d2lzh.py):标准"优化器版"。开头net.to(device)把模型送上 GPU,每个 epoch 统计 loss、准确率与耗时,输出格式统一便于对比实验
  • traintrain_ch8(code/d2lzh.py):多 GPU 版。用nn.DataParallel(net, device_ids=[0, 1])实现双卡并行,供"微调"与"多GPU计算"章节使用
  • train_ch7/train_pytorch_ch7(code/d2lzh.py):优化算法章节专用。接收不同的optimizer_fn对比 SGD、动量、Adam 等算法,并顺手画出 loss 曲线
  • train_and_predict_rnn_pytorch(code/d2lzh.py):RNN 训练+文本生成一体。内含两个关键细节:state.detach()防止跨 batch 累积计算图、grad_clipping梯度裁剪防爆炸(code/d2lzh.py)

所有训练函数都遵循同一条"黄金循环":梯度清零 → 前向 → loss.backward() → optimizer.step() → 记录指标。掌握这一条,就看懂了全书所有训练代码。

数据加载与可视化函数:让示例代码一行就能跑

教学代码最忌"数据准备"拖后腿。d2lzh.py 用少量函数把繁琐工作全部吃掉:

  • load_data_fashion_mnist(code/d2lzh.py):自动下载、缩放、转 Tensor,并返回训练/测试两个 DataLoader,还贴心地按操作系统调整num_workers
  • data_iter_random/data_iter_consecutive(code/d2lzh.py):RNN 章节两种采样策略的生成器实现,用yield惰性产出小批量,内存占用极低
  • get_data_ch7(code/d2lzh.py):读取飞机机翼噪声数据并做标准化,供优化算法章节使用
  • semilogyshow_imagesshow_bboxes:对数坐标训练曲线、多子图网格、边界框标注等绘图函数,统一了全书图表风格
  • Benchmark(code/d2lzh.py):上下文管理器秒表,with d2l.Benchmark() as b:一行测耗时,专门服务第 7 章性能对比

目标检测与语义分割工具函数:进阶章节的幕后英雄

第 8 章涉及 SSD、FCN、U-Net 等复杂网络,工具库为此准备了一整组专业函数:

  • MultiBoxPrior(code/d2lzh.py):按 size 与 ratio 组合在特征图上批量生成锚框,作者还附上了按自己推导公式设计的MultiBoxPrior_My版本对照
  • compute_intersection/compute_jaccard(code/d2lzh.py):利用广播机制向量化计算 IoU,是 SSD 正负样本分配的核心
  • PiKachuDetDataset(code/d2lzh.py):皮卡丘检测数据集的Dataset实现,读取 label.json 生成"类别+边界框"标签
  • VOCSegDataset(code/d2lzh.py):VOC2012 语义分割预处理,包含随机裁剪、色彩空间转数值标签、均值方差归一化,可直接服务 U-Net 训练(对应 Ch8 U-Net.ipynb)
  • predict_sentiment(code/d2lzh.py):第 9 章情感分类的一键预测入口

总结:一份可下载的 PyTorch 版深度学习教材

d2lzh.py 的设计哲学可以概括为三点:教学优先(每个函数都对应书中某个小节)、分层封装(层→训练→数据→评估,职责清晰)、零配置(设备、数据、绘图全自动)。配合 pdf/ 目录下全书 PyTorch 版 PDF,你可以边读边跑,完整复现从线性回归到 U-Net 的全部实验。想动手试试,直接 clone 仓库、装好 PyTorch、打开 notebook 即可开始 🚀

【免费下载链接】Dive-Into-Deep-Learning-PyTorch-PDF本项目对中文版《动手学深度学习》中的代码进行了PyTorch实现并整理为PDF版本供下载项目地址: https://gitcode.com/gh_mirrors/di/Dive-Into-Deep-Learning-PyTorch-PDF

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 16:27:50

降漏写成法定义务之后,分区计量与工单闭环如何让地下漏点显形

城市供水管网漏损,长期以来是困扰供水行业的老大难问题。管网深埋地下、隐蔽性强,传统人工巡检难以第一时间发现暗漏,导致水资源浪费与供水安全隐患并存。随着新版《供水条例》将“严格控制供水管网漏损”写进法规,以及物联网、大…

作者头像 李华
网站建设 2026/8/27 16:26:32

八大网盘拿到真实直链:LinkSwift网盘直链解析工具实操指南

八大网盘拿到真实直链:LinkSwift网盘直链解析工具实操指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …

作者头像 李华
网站建设 2026/8/27 16:26:29

低成本LoRA微调ChatGLM3-6B:从数据准备到模型部署

简介:大模型微调是推动AI应用落地的关键环节,但全参微调动辄需要多张高端显卡,门槛极高。参数高效微调技术LoRA通过冻结原模型权重、仅训练低秩矩阵,将可训练参数量降低几个数量级。以ChatGLM3-6B为例,采用LoRA后&…

作者头像 李华
网站建设 2026/8/27 16:26:19

AI挖掘机落地指南:从感知、规划到真机部署的完整实践

最近土木圈里转得最多的一句话,除了热搜上的“土木工程专业没有毕业照”,就是“AI 带火挖掘机”。前者带着点自嘲,后者更像是行业在找出口。作为一个常年跟工程机械自动化打交道的从业者,我第一反应不是去争论“AI 能不能救土木”…

作者头像 李华