- 文档
- 教程
- 人工智能
- 深度学习
- NLP
- 计算机视觉
- 强化学习
【免费下载链接】d2l-en
Interactive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.
D2L(Dive into Deep Learning,动手学深度学习)是一个开源的交互式深度学习教材项目,其核心理念是"Learning by doing"——将概念、上下文与代码融合在同一个 Jupyter Notebook 中,让读者在动手运行代码的过程中掌握深度学习。本文基于仓库根目录的 README.md 展开,结合 d2l 包、构建配置、安装指南 与 贡献指南 等仓库资源,系统梳理这个项目的定位、目标、仓库结构、多框架支持方式、安装运行流程、内容组织、贡献方式与许可协议,帮助你快速理解并上手这一广受欢迎的深度学习学习资源。
项目定位:一本"教科书 + 可运行代码"合二为一的交互式教材
正如 README.md 所述,D2L 是一个多框架(multi-framework)的开源深度学习教材:全书以 Jupyter Notebook 为载体撰写,将叙述文字(exposition)、图表(figures)、数学公式(math)与自包含的可运行代码(self-contained code)无缝整合在一起。
它的目标读者是希望系统掌握深度学习实战技能的开发者:书中不仅讲解"如何实现某个算法",还说明"为什么做出这样的算法决策"。这种"概念 + 上下文 + 代码"三位一体的写法,让它区别于两类常见资源:
- 只贴代码片段、不讲原理的博客与 GitHub 示例;
- 只讲数学、不附可运行实现的传统教科书。
关于这一点,前言 中有更完整的阐述:作者在项目启动时发现,市场上同时满足"内容与时俱进、覆盖现代机器学习实践且有足够技术深度、将教科书级讲解与干净可运行的代码交织在一起"的资源几乎不存在,因此决定自行构建这套工作流——用 GitHub 托管源码并吸纳社区贡献,用 Jupyter Notebook 混合代码、公式与文字,用 Sphinx 作为渲染引擎,并配合 Discourse 讨论社区。
五大设计目标
README.md 明确列出了该项目要达成的五个目标,它们共同决定了 D2L 的形态:
- 对所有人免费开放(freely available for everyone)——仓库以开源协议发布,见下文许可证小节;
- 提供足够的技术深度,使其成为通往"应用机器学习科学家"之路的起点;
- 包含可运行代码,展示读者在实践中如何解决实际问题;
- 支持快速更新,既可由作者团队更新,也可由整个社区推动;
- 配套讨论论坛,用于互动讨论技术细节并解答疑问。
这五个目标在实现层面常有冲突:公式、定理与引用最适合用 LaTeX 管理;代码最适合用 Python 描述;网页原生是 HTML 和 JavaScript;而内容又需要同时以可执行代码、实体书、可下载 PDF 和网页四种形态呈现。最终作者选择了 GitHub + Jupyter Notebook + Sphinx + Discourse 的组合方案,这也是本仓库采用"Markdown 文件即 Notebook 源文件"结构的原因。
仓库结构:从 Markdown 源文件到可执行 Notebook
全书目录骨架
本仓库的根目录 index.md 是整本书的目录(table of contents),可以直观看到内容的编排脉络:
- 导言部分:前言、安装、符号约定;
- 正文 22 章:从 引言、预备知识(ndarray、自动微分、线性代数、概率等)开始,经过线性回归、线性分类、多层感知机、模型构建、卷积神经网络、循环神经网络、注意力机制与 Transformer、优化算法、计算性能、计算机视觉、NLP 预训练与应用、强化学习、高斯过程、超参数优化、生成对抗网络、推荐系统,直到附录的数学基础与工具章节;
- 参考文献:chapter_references/zreferences.md。
每章都是一个独立的chapter_xxx/目录,内部以index.md为章节入口,各小节对应一个 Markdown 文件(如 chapter_linear-regression/linear-regression.md)。每个小节就是一个"可独立运行的 Notebook"。
构建配置:Markdown 即 Notebook
config.ini 的[build]段揭示了这套工作流的构建规则:
[build] # A list of wildcards to indicate the markdown files that need to be evaluated as # Jupyter notebooks. notebooks = *.md */*.md # A list of files that will be copied to the build folder. resources = img/ d2l/ d2l.bib setup.py static/latex_style/ # Files that will be skipped. exclusions = README.md STYLE_GUIDE.md INFO.md CODE_OF_CONDUCT.md CONTRIBUTING.md contrib/*md # If True (default), then will evaluate the notebook to obtain outputs. eval_notebook = True tabs = pytorch, mxnet, jax, tensorflow要点:
notebooks = *.md */*.md:仓库内所有 Markdown 文件都会被当作 Jupyter Notebook 源文件来求值执行;eval_notebook = True:构建时默认执行 Notebook 以生成输出,这也是 贡献指南 要求贡献者在提交前清空所有输出的原因——CI 系统会重新执行被修改的章节来生成输出;tabs:支持 PyTorch、MXNet、JAX、TensorFlow 四种框架的 Tab 切换展示。
多框架支持:一套书、四种深度学习框架
D2L 最突出的特点之一就是同一份内容提供四种框架的实现:PyTorch、MXNet、TensorFlow 与 JAX。这一点在代码层通过d2l包实现。
d2l 包的导入方式
d2l/init.py 的模块 docstring 给出了四种标准的导入方式:
"""Saved source code for "Dive into Deep Learning" (https://d2l.ai). Please import d2l by one of the following ways: from d2l import mxnet as d2l # Use MXNet as the backend from d2l import torch as d2l # Use PyTorch as the backend from d2l import tensorflow as d2l # Use TensorFlow as the backend from d2l import jax as d2l # Use Jax as the backend """ __version__ = "1.0.3"即d2l是一个多后端封装包,同一套 API 名称(如d2l.plot、d2l.train_ch3、d2l.nn_Module等)分别映射到四种框架的实现。四个后端文件分别为 d2l/mxnet.py、d2l/torch.py、d2l/tensorflow.py、d2l/jax.py。
框架别名映射机制
config.ini 的[library-*]段定义了d2l.xxx到各框架原生 API 的映射规则,这是"多框架代码"能写在同一章节的关键机制。以 [library-pytorch] 段为例:
[library-pytorch] lib_file = d2l/torch.py lib_name = torch simple_alias = ones_like, ones, zeros_like, zeros, tensor, arange, meshgrid, sin, sinh, cos, cosh, tanh, linspace, exp(, log, normal, rand, randn, matmul, int32, int64, float32, concat -> cat, stack, abs, eye, sigmoid, batch_matmul -> bmm fluent_alias = numpy -> detach().numpy, size -> numel, reshape, to, reduce_sum -> sum, argmax, astype -> type, transpose -> t, reduce_mean -> mean, expand_dims -> unsqueeze, swapaxes, repeat alias = nn_Module = nn.Module它把d2l.concat映射为 PyTorch 的torch.cat、d2l.transpose映射为t、d2l.size映射为numel、d2l.nn_Module映射为nn.Module等。类似的[library-mxnet]、[library-tensorflow]、[library-jax]段则完成其他框架的等价映射(如 MXNet 的npx.sigmoid、JAX 的jax.nn.sigmoid)。这种"d2l.xx 统一命名 + 构建期翻译"的设计,让书中同一个代码块可以在四个框架下原样运行,也是 config.ini 中tabs配置的底层支撑。
从源码结构看,d2l各后端文件还自动汇集了全书通过#@save标记沉淀下来的常用函数与类,例如 d2l/torch.py 中的use_svg_display、set_figsize、plot、add_to_class、HyperParameters等绘图与面向对象辅助工具,其 docstring 中标注了各自定义所在章节(如Defined in :numref:sec_calculus``、sec_oo-design)。
d2l 工具包:轻量依赖与版本信息
依赖清单
setup.py 定义了d2l包的安装元数据与运行时依赖,可以看到这个"教科书配套包"非常轻量:
requirements = [ 'jupyter==1.0.0', 'numpy==1.23.5', 'matplotlib==3.7.2', 'matplotlib-inline==0.1.6', 'requests==2.31.0', 'pandas==2.0.3', 'scipy==1.10.1' ]除数值计算、绘图、数据处理等基础库外,并不捆绑任何深度学习框架——框架由读者按需另行安装(见下一节)。同时python_requires='>=3.8'表明至少需要 Python 3.8 以上版本。构建配置 config.ini 中release = 1.0.3与d2l.__version__ = "1.0.3"保持一致,即当前仓库对应的发布版本为 1.0.3。
安装与上手:从零开始跑通全书代码
README.md 并未展开安装细节,完整的安装流程在 安装指南 中。以下是该章节的完整实操路径,与 README 的"下载 Notebook 运行全书代码"相衔接。
第一步:安装 Miniconda 并创建环境
最简单的方式是安装 Miniconda(要求 Python 3.x)。以 macOS(Intel)为例:
# 文件名可能随版本变化 sh Miniconda3-py39_4.12.0-MacOSX-x86_64.sh -bLinux 用户下载含 "Linux" 字样的脚本执行:
sh Miniconda3-py39_4.12.0-Linux-x86_64.sh -bWindows 用户则按官方在线指引安装,并可用cmd打开命令行。接着初始化 shell 并创建、激活名为d2l的环境:
~/miniconda3/bin/conda init conda create --name d2l python=3.9 -y conda activate d2l第二步:安装深度学习框架与 d2l 包
安装框架前建议先确认机器是否有可用的 NVIDIA GPU(笔记本上的显示 GPU 不在此列;若无 GPU,CPU 也足够跑完前几章)。四种框架的版本要求如下:
- PyTorch:
pip install torch==2.0.0 torchvision==0.15.1 - TensorFlow:
pip install tensorflow==2.12.0 tensorflow-probability==0.20.0 - MXNet:GPU 版
pip install mxnet-cu112==1.9.1(后缀按 CUDA 版本调整,如cu101对应 CUDA 10.1);CPU 版pip install mxnet==1.9.1 - JAX:GPU 版
pip install "jax[cuda11_pip]==0.4.13" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html flax==0.7.0;CPU 版pip install "jax[cpu]==0.4.13" flax==0.7.0
然后安装本书配套的d2l包(版本与仓库一致):
pip install d2l==1.0.3第三步:下载 Notebook 并启动 Jupyter
可以从 D2L 网站点击 "Notebooks" 标签下载代码压缩包,也可以在命令行获取。以 PyTorch 版本为例:
mkdir d2l-en && cd d2l-en curl https://d2l.ai/d2l-en-1.0.3.zip -o d2l-en.zip unzip d2l-en.zip && rm d2l-en.zip cd pytorch(MXNet、TensorFlow、JAX 分别进入mxnet、tensorflow、jax子目录;若没有unzip,先执行sudo apt-get install unzip。)最后启动服务器:
jupyter notebook在浏览器打开http://localhost:8888即可逐节运行全书代码。注意:每次打开新的命令行窗口,都需要先conda activate d2l再运行 Notebook 或升级框架/d2l包;退出环境用conda deactivate。
内容组织与教学法:三大部分、循序渐进
前言 将全书划分为三个部分,这与 index.md 的目录一一对应:
- 第一部分:基础与预备知识——引言 引入机器学习与深度学习的概念(数据、模型、目标函数、优化算法四大核心组件,以及监督学习、回归、分类、标记、搜索、推荐系统、序列学习等问题类型);预备知识 快速补齐数据操作、线性代数、微积分、概率等基础;随后进入线性回归、线性分类、多层感知机、过拟合与正则化等最核心的概念与技术。
- 第二部分:现代深度学习技术——涵盖计算组件、卷积神经网络(CNN)、循环神经网络(RNN)、注意力机制与 Transformer 等当前实践中最通用的工具。
- 第三部分:可扩展性、效率与应用——包括优化算法、计算性能、计算机视觉应用、NLP 预训练与应用、强化学习、高斯过程、超参数优化、GAN、推荐系统等(在线版提供)。
教学法上,全书坚持"即时教学"(just in time):只在某个概念真正需要被用来完成某个实际目标时才引入它,让读者尽快体会到训练出第一个模型的成就感。同时遵循"一个可工作的示例,一个 Notebook"的原则,方便读者直接复制 Notebook 作为自己研究项目的起点。对于关键组件,书里常给出两个版本:一个只依赖 NumPy 式功能与自动微分、从零手写实现,另一个使用框架高层 API 的精简实现——这正是 前言 中#@save标记机制的由来:被#@save标记的代码块(函数、类、导入语句集合)会被沉淀进d2l包,供后续章节复用。
使用与推广情况
README.md 在 "Universities Using D2L" 一节以世界地图展示了本书被全球高校采用的情况。根据仓库元数据,该书已被 70 多个国家的 500 多所大学采用,其中包括斯坦福、MIT、哈佛、剑桥等;同时它也是加州大学伯克利分校 STAT 157 课程的教学材料。地图示意图位于 static/frontpage/_images/map.png:
此外,README.md 还提供了本书的 BibTeX 引用条目,供论文与教材引用使用:
@book{zhang2023dive, title={Dive into Deep Learning}, author={Zhang, Aston and Lipton, Zachary C. and Li, Mu and Smola, Alexander J.}, publisher={Cambridge University Press}, note={\url{https://D2L.ai}}, year={2023} }参与贡献:从修一个错别字到提交大改动
README.md 指出,这本书受益于社区在教学建议、错别字修正与各类改进上的贡献。完整的贡献流程记录在 贡献指南 中,分为两档:
- 次要修改(改一句话、修错别字):直接在 GitHub 仓库中定位源 Markdown 文件,点击 "Edit this file" 在线编辑,填写修改说明后提交 pull request 即可。
- 重大改动:先 Fork 仓库,用 Jupyter Notebook 打开对应 Markdown 文件(以便运行与测试改动),本地修改并
git add/git commit/git push后,向主仓库发起 pull request。提交前务必清空所有输出,因为 CI 系统会重新执行被修改的章节以生成输出。
值得注意的是,一些章节同时支持多种框架实现:新增代码块时需在起始行用%%tab标记所属框架,例如%%tab pytorch表示 PyTorch 代码块、%%tab tensorflow表示 TensorFlow 代码块、%%tab all表示所有框架共享的代码块——这与前文所述的多框架机制直接呼应。实践上建议尽量提交小而聚焦的 pull request,避免超大改动难以评审。
许可证与版权
README.md 末尾明确了双许可证结构:
- 书籍正文采用知识共享CC-BY-SA-4.0(Creative Commons Attribution-ShareAlike 4.0 International),见 LICENSE;
- 书中的示例代码与参考代码采用修改版MIT 许可证(MIT-0),见 LICENSE-SAMPLECODE。
这一拆分意味着:正文内容可以自由共享与演绎(需署名且以相同方式共享),而代码部分的使用约束更宽松。仓库同时提供 CODE_OF_CONDUCT.md 作为社区行为准则,以及中文版(d2l-zh)与讨论/问题反馈论坛。构建配置 config.ini 中的copyright = 2023, All authors. Licensed under CC-BY-SA-4.0 and MIT-0.也印证了这一双重许可安排。
总结
- D2L是一个以"动手实践"为核心的交互式开源深度学习教材,将概念、上下文与可运行代码统一在 Jupyter Notebook 中,并以 PyTorch、MXNet、TensorFlow、JAX 四种框架提供同一套内容。
- 仓库结构上,Markdown 源文件即 Notebook 源文件(见 index.md 与 config.ini 的
[build]段),构建期自动求值并输出多框架 Tab 版本。 - 上手路径:安装 Miniconda →
conda create --name d2l python=3.9 -y→ 安装所选框架与pip install d2l==1.0.3→ 下载 Notebook 压缩包 →jupyter notebook逐节运行(详见 安装指南)。 - 配套工具:轻量的
d2l包(依赖见 setup.py,版本见 d2l/init.py)封装了全书复用的函数与类,多后端导入方式使其与框架解耦。 - 社区共建:任何人都可以通过 GitHub 在线编辑或 Fork + PR 的方式贡献内容(流程见 贡献指南),贡献被合并后即成为该书贡献者。
- 许可:正文 CC-BY-SA-4.0、代码 MIT-0,配套中文本与讨论论坛。
对于希望系统入门或重温深度学习、且需要可复现、可运行代码的开发者而言,D2L 提供了一条从数学原理到工程实现的完整学习路径——这也是它被全球多所高校与学习者广泛采用的根本原因。
- 文档
- 教程
- 人工智能
- 深度学习
- NLP
- 计算机视觉
- 强化学习
【免费下载链接】d2l-en
Interactive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.
相关推荐
《Dive into Deep Learning》项目解析:深度学习入门指南
《Dive into Deep Learning》项目解析:深度学习入门指南 深度学习的发展历程 深度学习在短短几年内从学术界的边缘课题发展成为推动技术进步的核
文档教程人工智能深度学习NLP计算机视觉强化学习革命性深度学习教程D2L.ai:多框架代码+数学推导+交互式学习
革命性深度学习教程D2L.ai:多框架代码+数学推导+交互式学习 深度学习正在改变世界,但学习过程往往充满挑战。D2L.ai(Dive into Deep Le
文档教程人工智能深度学习NLP计算机视觉强化学习Dive into Deep Learning 数学符号体系全解:d2l-en 全书统一记法指南
Dive into Deep Learning 数学符号体系全解:d2l en 全书统一记法指南 导读 :本文系统梳理《Dive into Deep Learn
文档教程人工智能深度学习NLP计算机视觉强化学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考