动手学深度学习zip包环境配置实战:从解压到批量跑通全章节 📅 发布时间:2026/9/12 19:26:17 👁 浏览次数: 简介《动手学深度学习》.zip 是一套以动手实践为特色的深度学习教程资源面向刚接触神经网络、希望完整掌握主流模型原理与代码实现的初学者也适合正在进阶的工程师系统梳理知识。内容从多层感知器、梯度下降与激活函数入手依次覆盖卷积神经网络在图像分类、目标检测中的应用循环神经网络及 LSTM/GRU 在文本分类、情感分析、机器翻译中的用法并延伸至强化学习、生成对抗网络和自编码器等前沿主题同时介绍了 TensorFlow 和 PyTorch 两种主流框架的建模方法。压缩包装载 610 个文件共约 43.88MB文件以 Markdown 教程文档、Python 示例代码、SVG/PNG/JPG 图表为主另有少量演示动图、参考文献与配置文件便于阅读和运行验证目前已有 465 人学习下载。整套资源按学习路径归置读者既可通读全部章节也可快速定位到某一算法其中的代码脚本和目录结构能直接辅助本地环境搭建、模型复现和论文引用是一份理论、图示与实现兼备的深度学习参考资料。1. 拿到《动手学深度学习》.zip 之后真正的门槛在哪里很多人下载《动手学深度学习》的 zip 包之后以为解压、双击某个 notebook 就能开始跑模型结果卡在第一步要么缺 d2l 这个配套工具包要么 GPU 版 PyTorch 装不上要么中文路径让 Jupyter 直接报错。这个 zip 里装的是文本、代码和数据集但它不负责帮你搭环境。你需要自己把 conda 环境、框架版本、内核绑定、文件路径一次理顺否则前三个实验就会劝退。本文按一线工程师的习惯把从 zip 到跑通第一个训练循环的完整路径拆开讲先解决环境选型再处理文件和内核关系最后用批量执行验证全书代码。适合准备拿这本书系统过一遍深度学习、同时不想在环境上耗一周的人。2. 环境前置把 zip 里的代码跑起来的硬件与软件选型2.1 为什么用 Anaconda 而不是裸装 Python《动手学深度学习》的代码会随着版本变化调整依赖比如 PyTorch 从 1.x 升到 2.x 之后d2l 包内部对数据加载和 Trainer 的封装也改过。如果你直接往系统 Python 里pip install很可能把本机其他项目的包搞坏。我一般的做法是装 Anaconda然后为这本书单独建一个环境让 zip 里的代码运行在一个与世隔绝的沙箱里。这样即使后续更新了 d2l 包也不会影响你日常工作用的环境。conda create -n d2l python3.10 -y conda activate d2l创建环境的逻辑很简单指定 Python 版本为 3.10这个版本对 PyTorch 2.x 和 d2l 0.4.x 都有较好的兼容性。如果你从 zip 里解压出来的旧代码要求 Python 3.8也可以用conda create -n d2l python3.8 -y但注意新版 MXNet 已经停止维护建议优先用 PyTorch 版本书对应的环境。激活环境后所有后续安装操作都以这个环境为上下文避免污染系统库。2.2 CPU 版和 GPU 版框架的选型参数这一步决定你后面能不能跑动大规模卷积网络。如果你的机器有 NVIDIA 显卡第一件事是运行nvidia-smi查看驱动支持的 CUDA 版本然后安装对应版本的 PyTorch。不要盲目安装最新版因为 zip 里的代码可能针对特定版本调试过。以下是常见选择场景安装命令显存要求适用章节CPU 笔记本仅跑前 5 章pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu无线性回归、Softmax、MLP8GB 显存入门卡pip install torch torchvision --index-url https://download.pytorch.org/whl/cu1182GB 即可CNN、RNN、注意力机制16GB 显存以上训练卡pip install torch torchvision默认安装最新 CUDA 版建议 8GB 以上完整跑完所有章节安装完成后用下面两行代码验证 GPU 是否可用python -c import torch; print(torch.__version__, torch.cuda.is_available())注意这里的print会返回类似2.1.0cu118 True的输出。如果显示False说明你装的是 CPU 版或 CUDA 版本和驱动不匹配。此时先pip uninstall torch torchvision再按上表重新选一个 index-url。常见错误是驱动版本太老PyTorch 2.x 需要驱动支持 CUDA 11.8 以上这时只能选择 cu118 构建版本。2.3 d2l 工具包与 requirements.txt 的版本匹配《动手学深度学习》的 zip 根目录通常会有一个requirements.txt但有时候这个文件版本太旧。我建议在激活环境后先安装 d2l 包pip install d2l但这里有个坑d2l包会默认依赖它声明的最新版 PyTorch如果你之前已经装好指定 CUDA 版本的 torch再执行这条命令可能把 torch 替换成默认版本。所以正确顺序是先装 torch再装 d2l并且用--no-deps参数隔离依赖关系。pip install --no-deps d2l--no-deps告诉 pip 不要自动安装 d2l 的依赖项只装 d2l 本身的代码。这样 torch 的 CUDA 版本就不会被动过。装完后可以在 Python 中验证导入是否正常from d2l import torch as d2l print(d2l.__version__)如果你的 zip 里自带额外的requirements.txt且里面包含了 matplotlib、pandas 等通用库直接pip install -r requirements.txt但同样需要注意它有没有把 torch 钉死在一个 CPU 版本上。遇到这种情况我会打开文件手动把包含torch的行注释掉。3. 解压与路径规划让 Jupyter Notebook 与数据文件不迷路3.1 zip 解压后的典型目录结构《动手学深度学习》的 zip 解压后根目录名一般是d2l-zh或者pytorch。在动手执行任何 notebook 之前先花一分钟看看目录结构否则后续经常出现module not found的诡异问题。以下是典型的解压后布局示意d2l-zh/ ├── chapters/ │ ├── chapter_linear-networks/ │ │ ├── linear-regression.ipynb │ │ └── softmax-regression.ipynb │ ├── chapter_convolutional-neural-networks/ │ │ └── lenet.ipynb ├── d2l/ │ ├── __init__.py │ └── torch.py └── data/ ├── fashion-mnist.zip └── house_tiny.csv注意d2l/这个目录它不是一个普通的代码文件夹而是在 notebook 里被from d2l import torch导入的模块包。如果解压后结构被破坏比如d2l目录和chapters目录不在同一个根下导入就会失败。所以解压时切勿只解压部分内容也不要把chapters里的某个 notebook 单独拖出来放在另一个目录运行。3.2 处理中文文件名乱码与权限问题很多人在 Windows 上解压这个 zip 会遇到中文文件名乱码尤其是章节名里含中文或日文时。zip 格式本身对 Unicode 文件名支持不完整旧版zip命令默认用系统编码读取在 Windows 上就会把 UTF-8 的文件名解析成乱码。解决方法是使用支持编码转换的解压参数unzip -O GBK 动手学深度学习.zip-O GBK让 unzip 按 GBK 编码解析文件名解压后显示正常。在 Linux 或 macOS 下如果解压出来是乱码可以改用 Python 脚本处理import zipfile with zipfile.ZipFile(d2l-zh.zip, r) as z: for name in z.namelist(): fixed name.encode(cp437).decode(gbk, errorsignore) z.extract(name, d2l-zh) print(fixed)逻辑是先把 zip 内以错误编码读出的文件名恢复字节流再用 GBK 解码成正常中文。注意如果你下载的 zip 是英文字段名不需要执行这段脚本直接解压即可。另外解压后如果文件没有执行权限在 Linux 下跑chmod -R 755 d2l-zh避免 Jupyter 无法创建检查点文件。3.3 把 notebook 内核绑定到 conda 环境解压后直接打开 Jupyter如果默认用的是基础 Python 内核你刚才安装的 d2l 和 torch 都不可见跑代码时会报ModuleNotFoundError。这是因为 notebook 的内核和终端激活的 conda 环境没有自动绑定。手动注册内核是这一步的关键conda activate d2l python -m ipykernel install --user --name d2l --display-name Python (d2l)--user表示写入当前用户的 kernel 目录--name是内核的唯一标识--display-name是你在 Jupyter 界面看到的名字。执行一次后以后无论从哪里启动 Jupyter都能在 Kernel - Change Kernel 里切换到这个环境。如果你发现安装 ipykernel 时提示没这个模块先执行conda install ipykernel -y。4. 第一个实验让线性回归代码跑通并排除常见错误4.1 启动 Jupyter 并定位到章节 notebook环境配置完成后进入解压出的项目根目录启动 Jupytercd d2l-zh jupyter notebook这里有一个容易忽略的细节启动 Jupyter 的工作目录必须是d2l-zh根目录而不是chapters子目录。因为 notebook 里的相对路径依赖../data这样的写法如果你从chapters目录启动路径就会指错。浏览器打开后进入chapter_linear-networks目录先打开linear-regression-scratch.ipynb这个文件是不依赖高层封装的原始实现最适合验证环境。4.2 运行一个最小训练循环验证 d2l 封装打开 notebook 后不急着全部运行先手动执行一段最小代码验证 d2l 的数据迭代器是否可用from d2l import torch as d2l import torch # 构造一个 1000 条样本的线性回归数据集 true_w torch.tensor([2.0, -3.4]) true_b 4.2 features, labels d2l.synthetic_data(true_w, true_b, 1000) # 用 d2l.load_array 封装成小批量迭代器 batch_size 10 data_iter d2l.load_array((features, labels), batch_size) batch_X, batch_y next(iter(data_iter)) print(batch_X.shape, batch_y.shape)这段代码如果顺利输出torch.Size([10, 2]) torch.Size([10])说明 d2l 的synthetic_data和load_array都正常工作。synthetic_data用于按给定真实参数生成带噪声的模拟数据load_array将 Tensor 封装成 DataLoaderbatch_size控制每个小批量的大小。如果在这一步报错优先检查 d2l 包的版本是否和 torch 版本冲突常见错误是module d2l.torch has no attribute synthetic_data这种多半是 pip 装了旧版 d2l需要升级到 0.4.x 以上。4.3 三个高频报错模块找不到、CUDA 不可用、zipfile 损坏报错信息根因解决办法ModuleNotFoundError: No module named d2lnotebook 使用错误内核Kernel - Change Kernel选择 d2l 环境AssertionError: Torch not compiled with CUDA enabled安装的 torch 是 CPU 版用pip install --upgrade --force-reinstall torch安装匹配 CUDA 版本zipfile.BadZipFile: File is not a zip file下载的 zip 未完整下载或文件损坏重新从源地址下载或检查文件大小是否与原站一致必要时用unzip -t测试完整性有时候还会遇到failed to copy spatial iop zip这类报错它通常发生在 Windows 杀毒软件对 zip 内临时文件的锁定时解决方案是把整个d2l-zh目录加入杀毒软件白名单或者关闭实时防护后重新解压。另外在训练时如果显存不足会看到CUDA out of memory这时把batch_size从 256 降到 64并把num_epochs减小不要一上来就照抄书中参数。5. 批量执行所有 notebook 与导出可复现环境5.1 用 nbconvert 一键跑完所有章节代码如果你已经调试通第一个 notebook接下来的几十个章节不可能手动逐个点击。Jupyter 提供了命令行批量执行工具nbconvert它可以直接将所有 notebook 的内嵌代码按顺序执行完并检查有没有新引入的错误conda activate d2l jupyter nbconvert --to notebook --execute --inplace chapters/*/*.ipynb --ExecutePreprocessor.timeout600--to notebook保持 ipynb 格式--execute表示执行所有代码单元格--inplace会把执行后的输出直接写回原文件。--ExecutePreprocessor.timeout600设置每个单元格最长执行时间为 600 秒防止某些下载数据集的单元格卡死。执行完后可以检查文件大小如果一个 notebook 从几 KB 变成几十 KB说明输出已经写入。这个命令适合在睡觉前跑第二天早上看日志确认有哪些章节出现红字错误。5.2 用 conda env export 固化环境让这个 zip 在队友机器上重现批量执行通过后最后一个值得做的工作是把当前环境完整导出让下次换电脑或分享给同事时不需要重新踩坑。conda 支持导出 YAML 文件conda activate d2l conda env export environment.yml但导出的environment.yml可能包含本地路径和依赖库的详细版本直接发给别人可能因为平台差异无法还原。更稳妥的做法是同时导出 pip 清单pip freeze requirements.txt把这两个文件放在d2l-zh根目录下别人解压 zip 后先conda env create -f environment.yml或者先建环境再pip install -r requirements.txt就能快速还原运行环境。注意如果 zip 里有environment.yml或requirements.txt先对比一下内容原书随附的版本可能较老优先使用你自己生成的这份。另外一个实用技巧是给 zip 包重新打包时去掉chapters下的执行输出文件保留干净的 notebook。这样下载体积更小也让读者能够自己运行出结果。jupyter nbconvert --to notebook --ClearOutputPreprocessor.enabledTrue --inplace chapters/*/*.ipynb清理输出后再打 zip配合environment.yml和requirements.txt一个可复现、可交付的《动手学深度学习》环境包就完整了。本文还有配套的精品资源点击获取