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 类构件:
| 构件类型 | 代表函数/类 | 作用 |
|---|---|---|
| 自定义层 | FlattenLayer、GlobalAvgPool2d、Residual | 补齐 PyTorch 官方 API 中教学需要的层 |
| 训练函数族 | train_ch3、train_ch5、train_ch7、train | 统一封装"前向-求梯度-更新-评估"循环 |
| 数据工具 | load_data_fashion_mnist、data_iter_random、data_iter_consecutive | 一行代码加载并切分数据集 |
| 可视化/评估 | semilogy、show_images、evaluate_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
- 获取项目:
git clone https://gitcode.com/gh_mirrors/di/Dive-Into-Deep-Learning-PyTorch-PDF - 安装环境:按 README.md 的"环境"一节安装 matplotlib、torch、torchvision、torchtext
- 打开 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、准确率与耗时,输出格式统一便于对比实验train与train_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_workersdata_iter_random/data_iter_consecutive(code/d2lzh.py):RNN 章节两种采样策略的生成器实现,用yield惰性产出小批量,内存占用极低get_data_ch7(code/d2lzh.py):读取飞机机翼噪声数据并做标准化,供优化算法章节使用semilogy、show_images、show_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),仅供参考
