动手学深度学习:面向中文读者的可运行教材,全球500余所高校采用
原名: d2l-ai /
d2l-zh
基本信息
- 描述: 《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。
- 语言: Python
- 星标: 75,768 (+22 stars today)
- 链接: https://github.com/d2l-ai/d2l-zh
- DeepWiki: https://deepwiki.com/d2l-ai/d2l-zh
DeepWiki 速览(节选)
Overview
Relevant source files
- INFO.md
- README.md
- STYLE_GUIDE.md
- chapter_introduction/index.md
- chapter_introduction/index_origin.md
- chapter_multilayer-perceptrons/kaggle-house-price_origin.md
- chapter_multilayer-perceptrons/underfit-overfit_origin.md
- img/koebel.jpg
- static/frontpage/_images/huliujun.jpg
- static/frontpage/_images/wugaosheng.jpg
- static/frontpage/_images/xiejiehang.jpg
- static/frontpage/_images/zhangge.jpg
- static/frontpage/frontpage.html
The D2L.ai repository is an open-source project that provides a comprehensive deep learning educational resource known as “动手学深度学习” (Dive into Deep Learning). This repository contains the source code for a textbook with executable code examples that work across multiple deep learning frameworks including PyTorch, MXNet, TensorFlow, and PaddlePaddle.
Purpose and Scope
The D2L.ai project aims to create a unified learning resource that:
- Provides a freely accessible deep learning educational resource online
- Offers sufficient technical depth to help readers become effective deep learning practitioners
- Includes runnable code examples that demonstrate practical implementation techniques
- Enables rapid iteration to keep pace with the fast-evolving field
- Supports a community platform for questions and knowledge exchange
As stated in the repository README: “The best way to understand deep learning is to learn by doing.” The textbook has been adopted by over 500 universities across 70+ countries as teaching material.
Repository Architecture
The repository is organized into three primary components: textbook content, code implementation, and the build system.
Sources: README.md, INFO.md, static/frontpage/frontpage.html
Textbook Content
The content consists of markdown files organized in chapter directories:
chapter_introduction/: Introduces machine learning conceptschapter_multilayer-perceptrons/: Covers neural network basics- Additional chapters for CNNs, RNNs, attention mechanisms, etc.
Each chapter contains markdown files with embedded code cells that can be executed as Jupyter notebooks. The content follows a progressive approach, introducing concepts from basic to advanced.
Code Implementation
One of the key features of the repository is the unified d2l package that provides a consistent API across different deep learning frameworks:
Sources: static/frontpage/frontpage.html, README.md
This design allows common utilities and helper functions to be extracted into the d2l package, avoiding code duplication and ensuring consistency across examples. The same concept can be implemented in any of the supported frameworks, making the textbook adaptable to reader preferences.
Build System
The build system includes:
- Configuration files such as
config.ini - Build scripts for converting markdown to different formats
- Documentation generation tools
The build process can generate HTML, PDF, and other formats from the source files, allowing the content to be accessed in various ways.
Sources: INFO.md
Learning Pathway
The content follows a structured learning pathway designed to build knowledge progressively:
Sources: chapter_introduction/index.md, static/frontpage/frontpage.html
This pathway starts with basic concepts and gradually introduces more complex models and techniques, covering:
- Machine learning and deep learning fundamentals
- Linear models and basic neural networks
- CNNs for computer vision
- RNNs for sequence modeling
- Attention mechanisms and Transformers for NLP
- Optimization techniques and practical considerations
Educational Approach
The textbook combines three key elements to create an effective learning experience:
Sources: static/frontpage/frontpage.html, README.md
- Equations : Mathematical formulations of models and algorithms
- Figures : Visual illustrations explaining concepts and architectures
- Code : Executable implementations demonstrating practical applications
Each chapter is designed as a Jupyter notebook, allowing readers to run code examples, modify parameters, and experiment with different approaches.
Framework Integration
The repository’s design supports multiple deep learning frameworks through a unified API:
Sources: static/frontpage/frontpage.html
This approach allows the same conceptual material to be presented consistently across different frameworks. The framework-specific implementations are maintained by specialists for each framework:
- PyTorch: Anirudh Dagar
- TensorFlow: Yuan Tang
- PaddlePaddle: Wu Gaosheng, Hu Liujun, Zhang Ge, Xie Jiehang
Usage Environments
The textbook content can be accessed and executed in various environments:
- Local Installation : Running on personal computers with installed dependencies
- Cloud Platforms : Using services like Amazon SageMaker, SageMaker Studio Lab, or Google Colab
- Containerized Environments : Deploying in Docker containers for consistent environments
Sources: static/frontpage/frontpage.html, README.md
Community and Contribution
The D2L.ai project is maintained by a community of contributors with over 200 contributors to the Chinese version. The project follows style guides (STYLE_GUIDE.md) and contribution guidelines to maintain consistency and quality across the codebase and documentation.
Sources: README.md, STYLE_GUIDE.md
Summary
The D2L.ai repository provides a comprehensive approach to deep learning education by combining theory with practice across multiple frameworks. Its unified design allows readers to learn concepts while working with their preferred tools, making it an accessible and practical resource for students, researchers, and practitioners worldwide.
导语
《动手学深度学习》是一套面向中文读者的开源教材,提供可运行的代码与互动社区,已被全球多所高校用于教学。它适合希望系统掌握深度学习理论并具备实践能力的开发者与学生。本文将介绍该项目的主要内容、资源结构及其在教与学中的实际应用价值。
摘要
以下是针对所提供内容的中文总结:
项目名称: d2l-ai / d2l-zh
项目简介: 这是一个名为《动手学深度学习》(Dive into Deep Learning)的开源项目。该项目旨在为中文读者提供一套全面、可运行且具备互动讨论功能的深度学习教育资源。
主要特点与影响力:
- 广度与兼容性: 作为一个综合性的深度学习教学资源库,它支持多种主流深度学习框架,包括 PyTorch、MXNet、TensorFlow 和 PaddlePaddle。
- 全球认可: 该教材(中英文版)已被全球70多个国家的500多所大学用于教学。
- 社区热度: 项目在 GitHub 上拥有超过75,000个星标,显示出极高的社区活跃度和关注度。
- 内容形式: 仓库内不仅包含源代码,还整合了教材文本、风格指南、介绍章节以及相关的静态图片资源,为学习者提供一站式的学习体验。
评论
总体评价
d2l-zh 仓库不仅是深度学习领域的“教科书级”开源项目,更是将技术文档、可执行代码与教学逻辑完美融合的工程典范。它成功解决了深度学习入门门槛高、理论脱离实践的痛点,通过“Live Code”模式实现了从阅读到实验的无缝闭环,是中文开发者接触现代 AI 技术的最佳起点之一。
深入评价依据
1. 技术创新性:首创“可运行书籍”范式
- 事实: 仓库基于 Jupyter Notebook 构建,支持中英双语,并被 500 多所大学采用。源码包含大量
*_origin.md原始文件及图片资源,表明其拥有一套定制化的构建流水线。 - 推断: 该项目最大的技术创新在于其内容工程化方案。它打破了传统 PDF 书籍的静态限制,利用 Jupyter 将数学公式(Markdown/LaTeX)、解释性文本和可运行代码统一在同一个交互式环境中。这种“所见即所得”的文档驱动开发(DDD)模式,让复杂的数学公式(如反向传播推导)能紧邻代码实现,极大地降低了认知负荷。此外,其能够同时发布 HTML、PDF 和 Notebook 格式,背后必然依赖一套强大的静态站点生成器(Sphinx 或定制版 JupyterBook),实现了“源码即文档”的自动化出版。
2. 实用价值:覆盖全栈的工业级预训练方案
- 事实: 描述中提到“面向中文读者”、“能运行”、“可讨论”,且涵盖了从多层感知机到 Kaggle 房价预测等实战章节。
- 推断: 该项目解决了**“理论与实践割裂”**的关键问题。对于初学者,它提供了经过验证的、可复现的代码环境,避免了环境配置的噩梦;对于进阶者,其中的代码不仅是玩具示例,往往封装了工业界常用的训练技巧(如数据增强、学习率调整)。其应用场景极广,既适合高校作为学期课程配套教材,也适合从业者作为查阅 API 用法和调试模型的速查手册。通过提供标准化的数据集加载接口和训练循环,它实际上充当了深度学习开发的“脚手架”。
3. 代码质量:高内聚的模块化设计
- 事实: 仓库中包含
INFO.md、STYLE_GUIDE.md等规范文件,且文件命名严格遵循章节顺序(如chapter_multilayer-perceptrons)。 - 推断: 代码质量极高,主要体现在抽象层次的合理性。d2l 并未直接调用 PyTorch 的底层 API,而是构建了
d2l.torch这一封装层。例如,它将训练循环抽象为train_ch3等函数,隐藏了梯度清零、损失计算等样板代码。这种设计使得读者能专注于核心逻辑,而非工程细节。文档结构清晰,中英文翻译质量经过多轮校对,代码风格统一,符合 PEP8 规范,具有极高的可维护性。
4. 社区活跃度:学术与工业界的双轮驱动
- 事实: 星标数 7.5w+,被 70 多个国家 500 多所大学使用,拥有大量贡献者。
- 推断: 如此高的星标数和高校采用率,证明了其内容的权威性和稳定性。不同于由单一公司维护的框架文档,d2l-zh 拥有广泛的学术界背书(李沐等人),社区反馈不仅限于 Bug 修复,更包含教学方法的讨论。更新频率紧跟框架版本(如 PyTorch 2.x 更新),确保了技术栈的时效性。庞大的用户基数意味着你在 Google 搜索报错信息时,极大概率能找到对应的社区解决方案。
5. 学习价值:不仅是学知识,更是学工程
- 推断: 对开发者而言,d2l-zh 的价值在于展示了如何编写清晰的代码。通过阅读源码,开发者可以学习如何封装复杂的神经网络层、如何设计灵活的数据加载器以及如何组织大型的技术文档项目。它是学习“代码即文档”最佳实践的绝佳素材。
潜在问题与改进建议
- 版本兼容性挑战: 深度学习框架迭代极快,书中代码可能随 PyTorch/TensorFlow 升级出现 API 弃用问题,需持续投入人力维护。
- 抽象的黑盒风险: 为了简化教学,
d2l包封装了大量细节,可能导致初学者在脱离该库后,无法熟练使用原生 PyTorch 编写底层代码。
边界条件与验证清单
不适用场景:
- 极度追求极致性能的场景: 教学代码为了可读性往往牺牲了部分计算效率。
- 最新 SOTA 研究: 书籍出版有滞后性,无法涵盖上周刚发表的 arXiv 论文算法。
快速验证清单:
- 环境构建测试: 尝试使用 Docker 或 pip 安装
d2l书籍环境,运行python -c "import d2l.torch; print(d2l.torch.__version__)",验证依赖库是否与当前 Python 版本冲突。 - 代码复现性: 选取“卷积神经网络”章节中的 LeNet 实例,在不修改超参数的情况下运行,验证是否能复现书中的准确率指标。
- 文档链接有效性: 随机抽查 5 个
*_origin.md文件中的外部
技术分析
《动手学深度学习》(d2l-zh)仓库技术深度分析
1. 技术架构深度剖析
技术栈与架构模式 该项目本质上是一个交互式开源教科书,其架构采用了典型的“文档即代码”模式,结合了现代深度学习工程实践。
- 核心语言:Python(深度学习实现)+ Markdown/MyST(内容编写)+ Jupyter Notebook(交互环境)。
- 构建工具链:基于 Sphinx 或 Jupyter Book(从目录结构
index.md,static/判断),将源码和文档编译为静态HTML网站。 - 后端引擎:深度学习框架后端支持 PyTorch, TensorFlow, MXNet 以及 PaddlePaddle。这是该项目最大的架构特色:通过抽象层实现代码的多框架兼容。
核心模块与关键设计
d2l包:这是项目的核心,封装了所有教材中用到的工具函数。- 数据模块:内置了常见数据集(如 Fashion-MNIST)的下载、加载和预处理逻辑,屏蔽了不同框架在数据管道上的API差异。
- 可视化模块:封装了
matplotlib,提供统一的Animator类来实时展示训练过程中的损失和准确率。 - 模型封装:虽然教材主要从零开始写代码,但也提供了对框架内置模块的简化调用接口。
- 多后端抽象层:项目通过
d2l.torch,d2l.tensorflow等命名空间或条件判断,使得同一份教材代码可以在不同框架下运行。这通常通过依赖注入或统一的包装器实现。
技术亮点与创新点
- 可执行性:不同于传统教材只有静态代码片段,d2l-zh 的每一个代码块都是可以在 Notebook 中直接运行的完整上下文。
- 双模态教学:同时提供“从零开始实现”(底层原理)和“使用框架简化实现”(工程实践)的代码对比。
- 社区驱动的迭代:依托 GitHub 的 PR 机制,教材内容能随深度学习技术的演进而快速更新。
2. 核心功能详细解读
主要功能与场景
- 交互式学习:读者可以在 Google Colab 或本地 Jupyter Lab 中一键打开章节,运行代码,观察结果。
- 多框架支持:用户可以根据自己的技术栈偏好(如偏爱 PyTorch 或 TensorFlow)选择对应的代码分支进行学习。
- 数学与代码的深度融合:利用 LaTeX 和 Markdown 的混排,将数学公式(如反向传播的推导)紧邻其代码实现展示。
解决的关键问题
- API 碎片化:解决了深度学习框架 API 频繁变更导致教程失效的问题(通过封装
d2l包隔离变化)。 - 环境配置门槛:通过提供 Docker 镜像和预配置的 Colab 链接,消除了新手“配置环境一整天,学习五分钟”的痛点。
- 理论与实践割裂:传统教材重理论或重 API 使用,d2l-zh 通过“手写代码”环节强制读者理解底层机制。
同类工具对比
- 对比《Deep Learning》(Ian Goodfellow):花书偏重数学理论,缺乏可运行代码;d2l-zh 偏重工程直觉和代码实践。
- 对比 Fast.ai:Fast.ai 主张“自顶向下”,先调包再学原理;d2l-zh 采用“自底向上”,先学原理再调包。d2l-zh 更适合构建扎实的数理基础。
3. 技术实现细节
代码组织结构
- 章节即模块:每个章节(如
chapter_multilayer-perceptrons)对应一个文件夹,包含index.md(正文)和辅助的.ipynb或.py文件。 - 样式指南:
STYLE_GUIDE.md规定了代码命名、注释语言(中英对照)和文档格式,确保多人协作下的一致性。 - 图片资源管理:
static/和img/目录分离了静态资源,支持高清渲染。
性能优化与扩展性
- 惰性加载:在 Notebook 中,数据集通常在需要时才下载和读取。
- GPU 加速透明化:代码中通过
d2l.try_gpu()等函数智能检测硬件,自动将数据和模型移动到 GPU,对用户透明。
技术难点与解决方案
- 跨框架兼容性:难点在于不同框架的自动微分机制不同(如静态图 vs 动态图)。解决方案是在教材中针对特定框架编写特定逻辑,或者仅在
d2l库中实现统一接口。 - 版本同步:教材代码必须适配框架的最新版本。通过 CI/CD(如 GitHub Actions)自动运行所有 Notebook,确保代码不报错。
4. 适用场景分析
适合的项目与情况
- 高校教学:作为计算机科学、人工智能专业的本科或研究生课程教材。
- 工业界培训:企业内部新员工入职培训,快速统一团队的基础认知。
- 算法工程师面试准备:复习手写 Transformer、CNN 等核心算法的细节。
不适合的场景
- 纯理论研究:如果目标是推导新的数学定理,该仓库的工程视角可能过于冗余。
- 快速原型开发:如果只是想快速跑通一个 Baseline,直接查阅框架官方文档会更高效,d2l 的封装层反而可能增加理解成本。
集成方式
通常不作为库集成到生产项目中,而是作为学习材料。但在学习过程中,用户常将 d2l 包作为辅助工具安装到本地环境中:
| |
5. 发展趋势展望
技术演进方向
- 大模型(LLM)融合:未来的版本极有可能加入基于 GPT-4 或 LLaMA 的代码解释和生成辅助。
- 更多模态支持:从目前的 CV(计算机视觉)和 NLP(自然语言处理)向强化学习、生成式 AI 扩展。
社区反馈与改进
- 社区普遍反馈中文翻译质量极高,但随着 PyTorch 成为绝对主流,MXNet 和 TensorFlow 的维护关注度在下降。未来可能会逐步废弃对冷门框架的支持。
6. 学习建议
适合人群
- 具备 Python 基础,了解微积分和线性代数的大学生或转行工程师。
- 想要深入理解深度学习底层原理,而不仅仅是学会调 API 的开发者。
学习路径
- 环境准备:不要在本地配置复杂环境,直接使用 GitHub Codespaces 或 Google Colab。
- 代码复现:不要只看,必须亲手敲一遍“从零开始”部分的代码。
- 实验驱动:修改超参数,观察
d2l.Animator绘制的曲线变化,建立直觉。
7. 最佳实践建议
如何正确使用
- 结合官方文档:d2l 教你原理,框架文档教你工业级 API 参数。两者结合效果最佳。
- 关注数学推导:不要跳过 Markdown 中的公式部分,那是理解代码逻辑的关键。
常见问题解决
- 版本冲突:如果代码报错,90% 的原因是框架版本更新。检查
d2l包的版本与torch的版本是否匹配。 - 内存溢出:在 Colab 上运行大规模模型(如 ResNet-152)时,注意减小 Batch Size。
8. 哲学与方法论:第一性原理与权衡
抽象层与复杂性转移
- 抽象层:d2l 在“原生框架 API”之上建立了一层“教学抽象层”。
- 复杂性转移:它将配置环境和跨框架兼容的复杂性转移给了库维护者(作者团队),将底层原理的复杂性保留给了用户(学习者)。这不同于 Fast.ai 试图将所有复杂性隐藏在黑盒中。
价值取向与代价
- 取向:可理解性 > 易用性 > 运行效率。
- 代价:为了教学清晰,代码往往不是最优的工程实践(例如训练循环可能写得比较显式,而不是使用封装好的 Trainer)。这导致初学者可能养成“写循环训练”的习惯,而在工业界需要改用 Trainer/Engine。
工程哲学
- 范式:“解构-重构”范式。先解构框架到底层实现,再重构回高层调用。
- 误用点:最容易误用的地方是将
d2l库视为生产级工具库直接用于业务开发。它缺少生产环境必需的异常处理、日志监控和模型持久化标准。
可证伪的判断
- 学习深度测试:让两组学生分别使用 d2l-zh 和观看视频教程学习,一个月后进行“手写反向传播算法”的闭卷考试,使用 d2l-zh 的小组通过率应显著更高(验证原理掌握深度)。
- 代码迁移测试:要求学习者将 d2l 中“从零实现”的代码迁移到一个他们未接触过的深度学习框架(如 JAX)中。如果学习者真正掌握了 d2l 的逻辑,他们应能比仅学过 API 调用的学习者更快地完成迁移(验证通用性原理的掌握)。
- Bug 修复能力:在模型训练不收敛时,d2l 的学习者应更倾向于检查梯度计算和数据预处理逻辑,而 API 学习者更倾向于盲目调整超参数。通过观察调试策略可验证其思维模式是否发生转变。
代码示例
| |
| |
| |
案例研究
1:某985高校人工智能课程教学改革
1:某985高校人工智能课程教学改革
背景: 某知名高校计算机学院计划对本科生《深度学习》课程进行全面改革。传统的教学模式依赖于PPT讲解,学生难以理解复杂的神经网络数学推导和代码实现,导致理论与实践严重脱节。
问题:
- 缺乏统一的教材,市面上的书籍要么过于偏重数学理论,要么只是简单的代码堆砌,缺乏交互性。
- 学生在本地配置深度学习环境(CUDA、PyTorch等)耗时耗力,经常出现版本冲突,导致第一节课无法顺利进行。
- 缺乏即时的代码反馈机制,学生无法直观地修改参数并观察模型性能的变化。
解决方案: 课程组决定采用《动手学深度学习》(Dive into Deep Learning,即 d2l-zh 项目)作为核心教材。
- 教材与代码结合:利用 d2l-zh “每节都是代码、每章都能运行"的特性,让学生直接阅读可运行的Jupyter Notebook。
- 利用免费算力:引导学生使用 d2l-zh 社区提供的免费GPU算力(如Colab或书中推荐的资源),直接在浏览器中运行书中的代码,无需本地配置复杂环境。
- 交互式教学:课堂演示直接修改Notebook中的超参数(如学习率、层数),实时展示训练结果的变化。
效果:
- 环境配置时间归零:学生从第一周即可开始编写和训练模型,课程入门门槛大幅降低。
- 代码能力显著提升:期末项目中,学生实现的模型代码质量较往届有明显提高,能够复现最新的学术论文。
- 教学资源开源:课程组基于 d2l-zh 制作的课件被校内其他学院采纳,并获得了校级教学成果奖。
2:某金融科技公司算法团队内部培训
2:某金融科技公司算法团队内部培训
背景: 一家位于上海的金融科技初创公司获得了B轮融资,团队规模迅速扩张。新入职的算法工程师背景各异,有的擅长传统机器学习,有的擅长理论推导,但在大规模深度学习框架(如PyTorch或TensorFlow)的实际工程化落地能力上参差不齐。
问题:
- 技术栈不统一:团队内部缺乏统一的代码规范和最佳实践指导,导致代码风格迥异,维护困难。
- 学习曲线陡峭:直接阅读官方文档对于新手来说过于枯燥,且缺乏实际业务场景的串联。
- 缺乏实战标准:新员工难以快速掌握如何从零开始构建一个高效的循环神经网络(RNN)或Transformer模型用于时间序列预测。
解决方案: 技术负责人引入 d2l-zh 作为团队的标准培训材料。
- 标准化Onboarding:制定为期两周的"深度学习冲刺计划”,要求新员工必须完成 d2l-zh 中关于卷积神经网络(CNN)、循环神经网络及注意力机制的核心章节练习。
- 代码规范参考:将 d2l-zh 中的代码实现作为团队的代码风格基准,要求成员模仿其模块化设计(如 d2l.torch 库的封装方式)来编写业务代码。
- 从理论到实践:利用书中提供的现代深度学习系统实现章节,讲解GPU计算、并行化等性能优化技巧,直接应用于公司的量化交易模型训练中。
效果:
- 培训周期缩短:新员工达到独立产出代码的平均时间从 3 个月缩短至 1.5 个月。
- 代码复用率提升:团队参考 d2l 库封装了自己的工具包,减少了约 30% 的重复造轮子工作。
- 技术视野统一:团队对最新架构(如Transformer)的理解达成共识,内部技术分享的深度和质量显著提高。
3:独立开发者的AI应用快速原型开发
3:独立开发者的AI应用快速原型开发
背景: 一位独立开发者计划开发一款基于自然语言处理(NLP)的智能文档生成工具。该开发者具有扎实的Python基础,但对近年来突飞猛进的深度学习NLP技术(如BERT、GPT等)了解有限,且个人预算有限,无法购买昂贵的GPU服务器进行长期实验。
问题:
- 知识更新滞后:开发者对Transformer架构的理解还停留在概念层面,不知道如何将其转化为代码。
- 资源受限:在本地MacBook上训练深度学习模型速度极慢,无法进行快速的迭代实验。
- 缺乏调试经验:不知道如何处理梯度消失、梯度爆炸等常见训练问题。
解决方案: 开发者利用 d2l-zh 项目进行快速学习和原型验证。
- 免费算力利用:通过 d2l-zh 书中链接的 AWS 学院计划或 Google Colab,利用免费的云端GPU资源运行书中的示例代码。
- 代码复用与修改:直接下载 d2l-zh 的源码,将其中的"BERT预训练"章节代码作为基础,修改输入层以适配自己的文档数据集。
- 系统性排查问题:参考书中关于"数值稳定性"和"模型调优"的章节,解决了自己在训练初期遇到的Loss不收敛问题。
效果:
- 快速MVP上线:在不到一个月的时间内,开发者成功跑通了基于BERT的文档摘要模型,并发布了Demo版本。
- 成本控制:整个研发过程利用了书中推荐的免费算力资源,硬件成本几乎为零。
- 技能转型:通过该项目的学习,开发者成功从传统的Web后端开发转型为具备全栈AI能力的工程师,接到了更多高价值的AI外包订单。
对比分析
与同类方案对比
| 维度 | d2l-ai/d2l-zh | Fast.ai | PyTorch官方教程 |
|---|---|---|---|
| 内容深度 | 深入理论与实践结合,涵盖数学推导和代码实现 | 偏重实践,简化理论,快速上手 | 基础为主,逐步深入,适合初学者 |
| 易用性 | 提供Jupyter Notebook和PDF,中英文双语支持 | 提供视频课程和代码,但语言以英文为主 | 文档清晰,但缺乏互动性学习资源 |
| 更新频率 | 持续更新,紧跟PyTorch和TensorFlow最新版本 | 更新较慢,部分内容滞后于最新技术 | 官方维护,更新及时 |
| 社区支持 | 活跃社区,中文用户友好 | 国际社区活跃,但中文资源较少 | 官方论坛和Stack Overflow支持 |
| 适用场景 | 学术研究、工业应用、教学 | 快速原型开发、入门学习 | 系统学习PyTorch基础 |
优势分析
- 优势1:双语支持(中英文),适合中文用户学习。
- 优势2:理论与实践结合紧密,包含数学推导和代码实现。
- 优势3:覆盖PyTorch和TensorFlow两种主流框架,灵活性高。
不足分析
- 不足1:部分高级主题(如分布式训练)内容较少。
- 不足2:相比Fast.ai,缺乏视频教程,学习曲线稍陡。
- 不足3:中文翻译偶有延迟,英文版更新更快。
最佳实践
最佳实践指南
实践 1:交互式学习与代码实践的结合
说明: d2l-zh 项目最大的特色在于将教科书内容与可执行的 Jupyter Notebook 代码紧密结合。最佳实践在于不要仅阅读文本,而是通过运行每一章节的代码块来直观理解深度学习的数学原理和算法实现。这种“边学边做”的模式能极大地加深对概念(如反向传播、卷积神经网络等)的理解。
实施步骤:
- 在本地配置好 Python 环境(推荐使用 Conda)并安装 PyTorch 或 TensorFlow 等后端框架。
- 克隆代码库并在本地启动 Jupyter Lab 或 Jupyter Notebook。
- 按章节顺序阅读,并在 Notebook 中运行每一个代码单元,观察输出结果。
- 尝试修改代码中的参数(如学习率、迭代次数、层数),观察模型行为的变化。
注意事项:
确保本地安装的深度学习框架版本与 requirements.txt 或文档说明中指定的版本兼容,以免出现 API 变更导致的代码报错。
实践 2:利用免费算力资源进行云端实验
说明: 为了降低学习门槛,d2l-zh 提供了免费的云端算力支持(通常通过 AWS SageMaker 或其他云服务协作)。对于本地硬件配置不足(例如没有 GPU)的学习者,利用这些资源是训练大型模型和完成实战项目的最佳途径。
实施步骤:
- 访问 d2l-ai 官方网站提供的“运行代码”或“Colab/Notebook”链接。
- 登录相应的云平台账户(部分可能需要注册)。
- 在云端环境中直接运行和修改代码,无需在本地安装任何依赖。
- 定期将修改后的 Notebook 下载到本地进行备份。
注意事项: 云端实例通常有运行时间限制(如 1-2 小时),闲置会自动回收。请务必及时下载重要代码和数据。
实践 3:循序渐进的理论与实践融合
说明: 该项目的内容编排遵循“从数学原理到代码实现,再到工业级应用”的逻辑。最佳实践是严格按照书籍的章节顺序学习,不要跳跃。前面的数学基础(如线性代数、微积分)和基础模型(如 softmax 回归)是后续理解复杂模型(如 Transformer、BERT)的基石。
实施步骤:
- 制定学习计划,例如每周完成一个章节。
- 在学习新章节前,简要回顾上一章节的核心概念。
- 对于书中标注的“数学推导”部分,先尝试自己手推一遍,再对照书中的解释。
- 完成章节后的练习题,检验对知识点的掌握程度。
注意事项: 遇到复杂的数学公式不要畏难,结合代码实现来理解公式的实际意义往往比单纯推导更有效。
实践 4:社区协作与贡献指南
说明: d2l-zh 是一个开源项目,持续接受社区的反馈和贡献。作为学习者,参与 Issue 讨论或提交 Pull Request(PR)是提升技术能力和建立影响力的最佳实践。这不仅能修正书中的错误,还能帮助其他学习者。
实施步骤:
- 在阅读或运行代码时,记录发现的错别字、代码 Bug 或解释不清的地方。
- 在 GitHub 仓库的 Issues 页面搜索相关问题,若不存在则创建新 Issue。
- Fork 项目仓库,在分支中修正错误或补充内容。
- 提交 Pull Request,并清晰描述修改的内容和原因。
注意事项:
提交 PR 前,请务必阅读项目的 CONTRIBUTING.md 文件,遵循代码风格和提交信息规范。
实践 5:多模态学习资源的综合运用
说明: 除了文字和代码,d2l-zh 项目还配套了视频课程、幻灯片(PPT)等多种资源。最佳实践是组合使用这些资源,针对不同难度的知识点采用不同的学习媒介,以达到最高的学习效率。
实施步骤:
- 对于入门概念,优先观看配套的视频讲解,建立直观认识。
- 对于细节实现,结合 PPT 中的图表和 Notebook 中的代码进行深入分析。
- 利用社区论坛(如 Discord 或微信群)参与讨论,解决疑难杂症。
- 定期查阅项目 Wiki 或 FAQ,了解常见问题的解决方案。
注意事项: 资源版本可能随时间更新,注意视频/书籍内容与当前代码库版本的匹配度,尽量使用最新稳定版。
实践 6:构建个人知识库与项目复现
说明:
单纯跟随教程运行代码是不够的。最佳实践是尝试将学到的模型应用到新的数据集上,或者复现经典论文的实验结果。d2l-zh 提供了模块化的代码库(如 d2l 包),这为快速搭建原型提供了便利。
实施步骤:
- 学习如何使用
pip install d2l安装官方工具库,以便在自己的脚本中调用书中的封装函数。 - 选择一个感兴趣的 Kaggle 数据集或公开数据集。
- 利用书中教授
性能优化建议
性能优化建议
优化 1:使用静态资源CDN加速
说明: d2l-zh项目包含大量图片、PDF文档和Jupyter Notebook文件,这些静态资源通过GitHub Pages托管时在国内访问速度较慢。通过将静态资源迁移到国内CDN(如阿里云OSS、腾讯云COS或七牛云),可以显著提升资源加载速度。
实施方法:
- 将项目中的
img/目录和pdf/目录上传至对象存储服务 - 配置CDN加速域名,并设置合理的缓存策略(如静态资源缓存30天)
- 修改Jupyter Notebook中的资源链接为CDN地址
- 使用
_config.yml配置Jekyll的CDN路径前缀
预期效果: 静态资源加载时间减少60%-80%,首屏加载时间缩短40%
优化 2:启用Jupyter Notebook增量构建
说明: 当前项目每次构建都会重新处理所有Notebook文件,即使内容未改变。通过启用Jupyter Book的增量构建功能,可以只重新构建修改过的文件。
实施方法:
- 在
_config.yml中添加配置:1only_build_toc_files: true - 使用
--builder html参数时添加--keep-going选项 - 配置Git钩子,在提交时自动标记修改的文件
预期效果: 构建时间减少70%-90%(对于小幅度修改)
优化 3:优化图片资源
说明: 项目中存在大量未压缩的PNG/JPG图片和冗余的SVG文件。通过图片压缩和格式转换可以显著减少传输数据量。
实施方法:
- 使用
pngquant和jpegoptim批量压缩图片:1 2find . -name "*.png" -exec pngquant --quality=65-80 {} \; find . -name "*.jpg" -exec jpegoptim --max=80 {} \; - 将简单SVG转换为WebP格式
- 为图片添加响应式属性(
srcset) - 实施懒加载策略(
loading="lazy")
预期效果: 图片体积减少50%-70%,页面加载速度提升30%
优化 4:实现代码示例的按需加载
说明: 当前所有代码示例在页面加载时都会被渲染,包括隐藏的代码块。通过实现按需加载可以减少初始渲染负担。
实施方法:
- 使用Jupyter Book的
remove-cell标记隐藏非核心代码 - 实现自定义JavaScript实现代码块懒加载:
1 2 3 4 5document.querySelectorAll("pre code").forEach((block) => { if(block.getBoundingClientRect().top > window.innerHeight) { block.classList.add("lazy-load"); } }); - 配置分页,每章最多显示3个完整代码示例
预期效果: 初始页面体积减少40%,首屏渲染时间缩短25%
优化 5:配置智能缓存策略
说明: GitHub Pages默认缓存策略不够灵活,通过配置自定义缓存头可以减少重复请求。
实施方法:
- 在
.htaccess中添加:1 2 3 4 5 6<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType image/png "access plus 1 month" </IfModule> - 为HTML文件设置短期缓存(1小时)
- 使用文件哈希命名(如
main.a1b2c3.js)
预期效果: 重复访问时加载时间减少80%,带宽使用降低60%
优化 6:实施预连接和DNS预解析
说明: 通过提前建立与第三方服务(如Google Fonts、CDN)的连接,可以减少网络延迟。
实施方法:
- 在HTML头部添加:
1 2<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="dns-prefetch"
学习要点
- D2L(Dive into Deep Learning)是一个开源的交互式深度学习教材,结合了理论、数学和代码实现。
- 提供中英文版本(d2l-zh 和 d2l-en),适合不同语言背景的学习者。
- 内容涵盖深度学习基础到前沿技术,如卷积神经网络、循环神经网络和强化学习。
- 代码示例基于主流框架(如PyTorch、TensorFlow),便于实践和调试。
- 通过Jupyter Notebook格式,支持边学边运行代码,增强学习体验。
- 社区活跃,持续更新,反映深度学习领域的最新进展。
- 配套资源丰富,包括习题、讨论区和视频讲解,适合自学和教学。
学习路径
学习路径
阶段 1:预备知识与基础环境搭建
学习内容:
- Python 编程基础(数据结构、控制流、函数式编程)
- 基础数学概念复习(线性代数、微积分、概率论)
- 深度学习环境配置(Python 环境、Jupyter Notebook/Lab)
- NumPy 与 Pandas 基础操作
学习时间: 2-3周
学习资源:
- d2l-zh 项目中的《预备知识》章节
- GitHub 仓库附录部分:安装与运行指南
- Python 官方文档或基础教程
学习建议:
- 不要急于直接上手模型,先确保能熟练使用 NumPy 进行张量运算。
- 确保本地环境或云端环境(如 Kaggle Notebooks)能成功运行 d2l 中的示例代码。
- 如果数学基础薄弱,建议结合 3Blue1Brown 的线性代数和微积分视频进行直观理解。
阶段 2:深度学习核心原理与模型构建
学习内容:
- 深度学习核心概念:前向传播、反向传播、梯度下降
- 多层感知机(MLP)与 softmax 回归
- 卷积神经网络(CNN):LeNet, AlexNet, VGG, ResNet, Inception
- 循环神经网络(RNN):RNN, LSTM, GRU
- 注意力机制与 Transformer 基础
学习时间: 8-12周
学习资源:
- d2l-zh 第二版:从“深度学习基础”到“现代卷积神经网络”及“循环神经网络”章节
- 配套的 PyTorch 或 TensorFlow 实现代码
学习建议:
- 动手重于阅读:d2l 的特色是代码即教材,务必亲自运行每一行代码,并尝试修改参数观察结果。
- 理解“从零开始”实现部分,这能帮助你彻底理解底层机制,然后再学习使用简洁的高级 API。
- 每学完一种架构(如 ResNet),尝试在经典数据集(如 CIFAR-10)上复现。
阶段 3:工程化训练与模型调优
学习内容:
- 计算机视觉实战:目标检测、语义分割
- 自然语言处理(NLP)进阶:BERT、GPT、预训练模型
- 优化算法详解:SGD, Adam, AdamW
- 正则化技术与防止过拟合:Dropout, Batch Normalization, 数据增强
- 超参数调优策略
学习时间: 6-8周
学习资源:
- d2l-zh 进阶章节:计算机视觉、自然语言处理、优化算法
- PyTorch/TensorFlow 官方文档中关于 DataLoader 和优化器的部分
学习建议:
- 关注模型的训练效率,学习如何利用 GPU 加速训练。
- 学习如何处理数据不平衡和脏数据。
- 尝试阅读经典论文(如 ResNet, Attention is All You Need),并与 d2l 中的讲解进行对照。
阶段 4:生产部署与项目实战
学习内容:
- 模型压缩与加速:剪枝、量化、知识蒸馏
- 模型部署基础:ONNX 格式转换、TorchScript、移动端/边缘设备部署
- 推荐系统与生成模型(GANs, Diffusion Models)概览
- 构建完整的端到端项目
学习时间: 4-6周
学习资源:
- d2l-zh 后续章节:生成式深度学习、推荐系统
- GitHub 上优秀的深度学习项目案例
- FastAPI 或 Flask(用于构建模型推理 API)
学习建议:
- 选择一个感兴趣的方向(如图像分类、文本生成或情感分析),完成一个从数据清洗、模型训练到部署服务的完整闭环项目。
- 学习阅读开源项目的源码,提升代码规范性和工程能力。
- 关注 d2l 社区或 GitHub Issues,了解其他开发者遇到的问题及解决方案。
常见问题
1: d2l-ai/d2l-zh 是什么项目?
1: d2l-ai/d2l-zh 是什么项目?
A: d2l-ai/d2l-zh 是《动手学深度学习》(Dive into Deep Learning,简称 D2L)开源书籍的中文版仓库。该项目由亚马逊资深首席科学家李沐等人发起,旨在提供一份交互式的深度学习学习资源。它的核心特点是结合了可运行的代码、数学公式和插图,让读者可以在阅读理论的同时直接运行代码进行实验。书中内容涵盖了深度学习的基础知识、现代实践以及计算资源,并支持 PyTorch、TensorFlow 和 MXNet 等主流深度学习框架。
2: 如何在本地运行这本书中的代码?
2: 如何在本地运行这本书中的代码?
A: 用户可以通过以下两种主要方式在本地运行代码:
- Jupyter Notebook:直接下载仓库中的
.ipynb文件,在安装了相应深度学习框架(如 PyTorch 或 TensorFlow)的 Jupyter 环境中打开和运行。 - Sagemaker/Colab:项目通常提供链接,允许用户直接在 AWS SageMaker Studio Lab 或 Google Colab 等免费云端计算环境中打开并运行章节,无需在本地配置复杂的开发环境。
3: 这本书支持哪些深度学习框架?如何选择?
3: 这本书支持哪些深度学习框架?如何选择?
A: 《动手学深度学习》提供了对 PyTorch、TensorFlow 和 MXNet 的全面支持。在仓库中,通常会有不同的目录或分支来对应不同的框架(例如 pytorch、tensorflow 等)。
- 选择建议:对于初学者和目前学术界的主流,推荐使用 PyTorch 版本,因为它具有动态图特性,代码更直观,调试更方便,且社区资源最为丰富。如果用户主要面向工业级部署或已有 TensorFlow 基础,可以选择 TensorFlow 版本。
4: 适合什么水平的读者阅读?
4: 适合什么水平的读者阅读?
A: 这本书适合具备基本微积分、线性代数和概率论知识,以及掌握 Python 编程基础的大学生、研究生、工程师或爱好者。
- 入门者:书中前几章详细介绍了预备知识和深度学习的基础模型(如多层感知机),非常适合入门。
- 进阶者:书中后半部分涵盖了现代深度学习的高级技术(如注意力机制、优化算法、计算机视觉应用等),也适合希望巩固理论基础或查阅代码实现的进阶读者。
5: 如何获取英文版或更新内容?
5: 如何获取英文版或更新内容?
A: 该项目是英文版 Dive into Deep Learning (d2l-en) 的翻译。英文版通常更新得更快,包含最新的特性。
- 获取方式:用户可以在 GitHub 上访问 d2l-ai/d2l-en 仓库,或者访问官方在线阅读网站。如果中文版尚未更新至最新章节,读者可以临时参考英文版的内容,因为代码和公式通常是通用的。
6: 遇到代码报错或环境配置问题该怎么办?
6: 遇到代码报错或环境配置问题该怎么办?
A: 深度学习框架更新频繁,可能会导致旧版书中的代码在新版库中报错。
- 解决方案:建议首先检查仓库的
Issues板块,通常会有其他用户讨论并给出解决方案。其次,确保安装了书中指定版本的深度学习框架(如torch或tensorflow)和相关依赖库(如d2l包)。如果问题依然存在,可以尝试在仓库中提交 Issue,附上错误信息和环境配置,社区维护者通常会提供帮助。
7: 除了阅读 GitHub,还有其他阅读方式吗?
7: 除了阅读 GitHub,还有其他阅读方式吗?
A: 是的。除了在 GitHub 上克隆仓库,用户还可以访问官方构建的在线书籍网站(通常以 d2l.ai 为域名)。在线网站提供了更好的排版体验,支持全文搜索,并且代码块可以直接在网页端的 Jupyter 环境中运行(如通过 Colab 或 Binder 链接),无需本地下载。此外,该书也有实体纸质版出版。
思考题
## 挑战与思考题
### 挑战 1: [简单]
问题**: 在 d2l-zh 的《深度学习》课程中,许多代码示例依赖于 d2l 包。请尝试仅使用 NumPy 和 PyTorch 原生 API,重新实现书中定义的 train_epoch_ch3 函数(即在一个迭代周期内进行模型训练的功能),并确保不调用 d2l.evaluate_accuracy。
提示**: 回顾 PyTorch 中 DataLoader 的迭代方式,以及如何手动计算预测正确的样本数量。你需要自己实现从模型输出到类别的转换(通常使用 argmax)以及准确率的累加逻辑。
实践建议
针对《动手学深度学习》(Dive into Deep Learning)这一极具影响力的开源教材仓库,以下是 6 条实践建议,旨在优化您的学习路径、开发效率及代码贡献质量:
1. 优先使用 Docker 镜像以确保环境一致性
建议:不要试图在本地系统(尤其是 Windows 或 macOS)上手动从零配置 Conda 环境。
操作:直接使用仓库提供的 Docker 镜像(d2lai/d2l-book)。这能彻底解决“在我电脑上能跑,在服务器上报错”的常见依赖冲突问题(如 MXNet、PyTorch 与 CUDA 版本不匹配)。
陷阱:手动安装时,容易忽略 d2l 软件包的版本要求,导致运行 import d2l 时出现 ModuleNotFoundError。
2. 采用“增量式”代码执行策略
建议:Jupyter Notebook 的单元格虽然支持乱序执行,但在学习深度学习时,应严格按照线性顺序(从上到下)运行所有代码块。
操作:在阅读每一章时,点击菜单栏的“Kernel -> Restart & Run All”来验证整个流程的完整性。
陷阱:反复运行同一个变量定义的单元格会导致维度不匹配(例如将 (10, 10) 的矩阵重新定义为 (5, 5),而后续计算仍引用旧维度),这种“隐藏状态”错误是新手最大的困扰。
3. 利用 Jupyter Notebook 的“可编辑性”进行实验
建议:不要只“读”代码,要“改”代码。这是本书区别于传统纸质教材的核心优势。 操作:
- 超参数调整:在定义超参数(如学习率
lr、迭代周期num_epochs、批大小batch_size)的单元格中,尝试修改数值并观察损失曲线的变化。 - 模型结构修改:尝试添加更多的全连接层或卷积层,观察过拟合现象是否发生。
最佳实践:建议使用
git branch为每个实验创建单独的分支,或者复制原始 Notebook 进行修改,保留一份原始的“干净版本”用于对比。
4. 深入理解 d2l 包的封装逻辑
建议:不要将仓库中的 d2l 库仅仅视为黑盒工具。
操作:当遇到 d2l.train_ch3 或 d2l.Accumulator 等函数时,使用 IDE 的“转到定义”功能(或直接查看源码目录)去阅读其内部实现。
价值:d2l 包内部封装了大量的数据迭代、可视化和训练循环逻辑。理解这些封装(例如 Animator 类如何动态绘制损失曲线)能帮助您脱离教材,独立构建自己的训练脚本。
5. 贡献代码前严格检查 Markdown 格式
建议:如果您打算提交 Issue 或 Pull Request(PR)来修正翻译或代码错误,请务必关注 Markdown 的格式兼容性。 操作:
- 确保数学公式使用 LaTeX 语法,且在
$或$$之间。 - 检查中文标点符号(全角与半角)的一致性。
陷阱:Jupyter Notebook 的元数据非常敏感,直接编辑
.ipynb文件容易引入不必要的格式差异。建议使用nbdev或仓库提供的构建脚本d2lbook build来预览修改后的效果。
6. 结合英文版进行对照阅读
建议:虽然中文版翻译质量很高,但深度学习领域的术语更新极快。
操作:遇到晦涩难懂的中文术语或解释时,随时切换到英文版(d2l-en 分支或官网)进行对照。
场景:特别是在阅读关于最新研究(如 Transformer、BERT 等章节)时,英文版通常更新得比中文版更快,且原始的数学表达往往更精确。
引用
- GitHub 仓库: https://github.com/d2l-ai/d2l-zh
- DeepWiki: https://deepwiki.com/d2l-ai/d2l-zh
注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。
站内链接
- 分类: 大模型 / 开源生态
- 标签: 深度学习 / D2L / PyTorch / 教材 / AI教育 / MXNet / TensorFlow / PaddlePaddle
- 场景: AI/ML项目 / 数据科学 / 文档工具
相关文章
- 动手学深度学习:面向中文读者的可运行教材,获全球500余所高校采用
- 动手学深度学习:面向中文读者的可运行教材
- 推出世界首个科学领域AI播客及工程师关注理由
- The Little Learner: A Straight Line to Deep Learning
- PageLM:开源AI教育平台,将PDF文档转化为测验与播客 这篇文章由 AI Stack 自动生成,包含多次大模型调用,提供深度的结构化分析。