当前位置: 首页 > news >正文

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),仅供参考

http://www.cnnetsun.cn/news/4249541.html

相关文章:

  • 从 Docker 到 Kubernetes:node-oracledb 容器化部署的 6 个关键决策与避坑指南
  • 定制laravel-logger:扩展自定义路由、视图与活动模型的完整指南
  • 降漏写成法定义务之后,分区计量与工单闭环如何让地下漏点显形
  • 八大网盘拿到真实直链:LinkSwift网盘直链解析工具实操指南
  • 低成本LoRA微调ChatGLM3-6B:从数据准备到模型部署
  • AI挖掘机落地指南:从感知、规划到真机部署的完整实践
  • PaperTodo 快速上手:10 分钟把今天的待办贴到桌面
  • material-scrolling源码精读:RecyclerViewHolder如何桥接ObservableRecyclerView滚动状态
  • axure-cn Axure 汉化语言包安装教程:15 分钟让 RP 9/10/11 变成中文界面
  • 如何为 doc2dash 编写自定义解析器:从 Parser 协议到 Patcher 的完整插件开发指南
  • WinScript 快速上手指南:把 Windows 精简、隐私与性能优化变成勾选操作
  • PDF补丁丁完全使用指南:免费开源PDF工具箱,书签编辑与批量处理快速上手
  • 灰色预测GM(1,1)模型:小样本时间序列预测的数学建模利器
  • 基于springboot的英语课程教学管理系统毕业设计项目源码
  • 【AI大模型】一文搞懂多模态大模型,从“文字专家“到“全能感知者“,零基础小白收藏这一篇就够了!!
  • 3步搭好企业微信审批超时提醒系统:EasyWeChat审批监控完整指南
  • GNOME 系统监视器 Applet:3 步快速在状态栏显示 CPU、内存与网速
  • 神奇弹幕 MagicalDanmaku 使用指南:一款免费的 B 站直播场控机器人如何接管你的直播间
  • 6 个下游聚合有 1 个 hang 住,Tomcat 200 个线程全卡死:CompletableFuture 编排的 4 个隐形约定
  • SillyTavern 性能优化:5 步快速提速清单,让角色卡和聊天变快变轻(附 config.yaml 参数速查)
  • 一条链接搞定B站视频下载与AI总结
  • 低剖面180W AC-DC电源设计:从效率到散热的全流程解析
  • MSLab 入门指南:用 3 条 PowerShell 命令搭出 Azure Local 测试集群
  • 为什么Venice值得关注:LinkedIn开源的行星级派生数据平台完整指南
  • KISS-Matcher是什么:MIT开源的3D点云配准利器,一文读懂FastRobust全局配准的完整原理
  • MT-GNN:连续时间网格演化与度量张量嵌入的脑形态预测
  • OBS 直播按键显示怎么做?Input Overlay 免费插件 5 分钟配置教程
  • 免费开源 Crimson 字体完整使用指南
  • AI奖励作弊第一课:ai-safety-gridworlds的tomato_watering浇番茄环境实战教程
  • 审查员常用链接