news 2026/6/2 3:57:18

《动手学深度学习》里那些带#@save标记的函数,到底藏了什么秘密?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《动手学深度学习》里那些带#@save标记的函数,到底藏了什么秘密?

《动手学深度学习》中#@save标记的隐藏设计哲学

当你在Jupyter Notebook中跟着《动手学深度学习》敲代码时,是否注意到有些函数后面跟着神秘的#@save标记?这个看似简单的注释符号,实际上是作者精心设计的教学路标,指引着初学者从理论理解走向工程实践的桥梁。

1. #@save的双重身份:代码标记与教学信号

#@save远不止是一个普通的代码注释——它是《动手学深度学习》作者团队设计的特殊语法标记,承担着两个关键功能:

  1. 工程功能:自动将标记的函数/类导入到d2l包中
  2. 教学功能:区分"可复用工具"与"教学示例"
def use_svg_display(): #@save """使用svg格式在Jupyter中显示绘图""" backend_inline.set_matplotlib_formats('svg')

提示:在PyCharm或VS Code中尝试输入d2l.,IDE的自动补全会列出所有被#@save标记的函数

这种设计背后的教学考量非常值得玩味:

  • 减少重复代码:避免学生在每个章节重复编写相同的辅助函数
  • 聚焦核心概念:让学生把注意力集中在当前章节的关键算法上
  • 模拟真实开发:体验如何使用第三方库提高开发效率

2. 从源码到库:d2l包的构建机制

《动手学深度学习》的代码仓库采用了一套自动化构建系统,#@save标记实际上是这个系统的关键触发器。当构建d2l包时:

  1. 扫描所有.py文件
  2. 提取带有#@save标记的代码块
  3. 将这些代码组织到d2l包的相应模块中

这个过程的精妙之处在于:

文件位置标记函数最终导入路径
chapter_linear-networks/linear-regression-scratch.pyevaluate_lossd2l.torch.evaluate_loss
chapter_preliminaries/pandas.pyread_data_bananasd2l.torch.read_data_bananas
chapter_attention-mechanisms/attention.pyshow_heatmapsd2l.torch.show_heatmaps

这种设计让学生既能查看函数实现细节,又能像使用标准库一样调用这些函数,完美模拟了真实项目中"阅读文档→调用API→必要时查看源码"的工作流程。

3. 教学分层的艺术:何时用#@save,何时不用

仔细观察书中代码,你会发现作者对#@save的使用非常考究。以线性回归章节为例:

# 会被保存到d2l包的函数 def synthetic_data(w, b, num_examples): #@save """生成y=Xw+b+噪声的合成数据""" X = torch.normal(0, 1, (num_examples, len(w))) y = torch.matmul(X, w) + b y += torch.normal(0, 0.01, y.shape) return X, y.reshape((-1, 1)) # 临时教学示例(不会保存到d2l包) def linreg(X, w, b): """线性回归模型""" return torch.matmul(X, w) + b

这种区分体现了作者的教学分层策略:

  • 基础工具函数(标记#@save):

    • 数据生成与可视化
    • 通用评估指标
    • 训练循环的常用模式
  • 教学示例函数(无标记):

    • 特定算法的核心实现
    • 用于演示原理的简化版本
    • 章节特有的实验代码

4. 实战建议:如何最大化利用#@save设计

基于这个设计特点,我推荐以下学习策略:

  1. 探索d2l包

    # 在Python中查看d2l包的所有功能 import d2l.torch as d2l print(dir(d2l))
  2. 对比学习法

    • 对每个#@save函数,思考:
      • 为什么这个函数值得放入公共库?
      • 如果自己实现会考虑哪些边界情况?
  3. 渐进式实践

    • 第一遍:直接使用d2l函数完成练习
    • 第二遍:尝试自己实现等效功能
    • 第三遍:比较自己的实现与d2l实现的差异
  4. 自定义扩展

    # 将你改进的版本保存为新的工具函数 def enhanced_visualization(data, labels): # 自定义标记 """添加了交互功能的改进版可视化""" ...

这种标记系统实际上构建了一个精妙的"脚手架"——随着你的进步,可以逐步摆脱这些辅助函数,最终能够完全自主实现整个深度学习流程。从依赖d2l到理解d2l,再到超越d2l,这正是《动手学深度学习》希望引导读者走过的能力进阶之路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 3:56:12

深度解析:ChilloutMix NiPrunedFp32Fix技术架构与5大部署策略

深度解析:ChilloutMix NiPrunedFp32Fix技术架构与5大部署策略 【免费下载链接】chilloutmix_NiPrunedFp32Fix 项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix ChilloutMix NiPrunedFp32Fix是基于Stable Diffusion架构…

作者头像 李华
网站建设 2026/6/2 3:55:03

逆向新手看过来:从零理解VMP3.5的IAT保护与修复原理(附工具实操)

逆向工程入门:解密VMP3.5的IAT保护机制与实战修复指南当你第一次接触被VMProtect 3.5加壳的程序时,那些看似神秘的API调用和变异的导入表可能会让你感到困惑。就像一本被加密的通讯录,原本清晰的联系人信息变得难以辨认。本文将带你从零开始&…

作者头像 李华
网站建设 2026/6/2 3:54:26

AUTOSAR CP

AUTOSAR CP与AP架构当前都是行业热门话题,简单来说都是汽车电子软件标准中间件架构,适用于不同的场景; 其实,CP架构主要干了两件事:标准化接口与模块化设计: 标准化接口:AUTOSAR CP架构通过定义…

作者头像 李华
网站建设 2026/6/2 3:54:23

沟槽基坑土方计算软件

功能 双模块并行:沟槽与基坑独立计算,界面分区清晰。 实时联动:修改放坡系数或坡角任意一项,另一项自动换算并更新体积。 即时结果:任何输入变化都会立即重新计算并显示土方量。 输入容错:自动处理负数、非…

作者头像 李华