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

理解动手学深度学习的自编包d2l

        跟着李沐的《动手学深度学习-PyTorch版》入门Python编程和Pytorch框架,以前是重度Matlab用户,对于Python里的各种包很不习惯。特别是,本书还自己做了一个名为d2l包,有几个问题很是困惑。今天终于弄明白了,写在这里,记录成长。

        困惑1:书里这个d2l包的具体内容是什么?

        回答:相信很多人会有此困惑,当然还有很多人会说大佬就是大佬,太牛了,为了配套写本书,自己还能写一个包。

        由于这个包只支持pip安装,所以我最早是尝试到pypi中找官方信息。打开PyPI官网https://pypi.org/,搜“d2l”可以找到其链接:https://pypi.org/project/d2l/。但不幸的是,该网页只有一句话:The author of this package has not provided a project description,并没有提供任何有用信息,有股草台班子的感觉。

        偶然想到这个包已经安装到本地,应该是可以在本地找到这个包的信息的。在将这个包安装完成后,运行指令pip show d2l,会输出以下信息:

Name: d2l

Version: 0.17.6

Summary: Dive into Deep Learning

Home-page: https://d2l.ai

Author: D2L Developers

Author-email: d2l.devs@gmail.com

License: MIT-0

Location: d:\programdata\conda_data\envs\d2l\lib\site-packages

Requires: jupyter, matplotlib, numpy, pandas, requests

Required-by:

其中,Location告诉你这个包安装在什么位置,在这个目录下,会有一个d2l文件夹(注:在上面目录里,d2l是我安装这个包的虚拟环境的名字,与d2l包无关),可以查看d2l包的具体内容。

        另外,Requires表示d2l这个包需要哪些其它包,而Required-by表示d2l被哪些包调用,这里是空的,表示没有包依赖于d2l。

        困惑2:书中都是使用from d2l import torch as d2l来import这个包,为什么只从包里import深度学习框架torch包这一部分?而且,既然这里已经从d2l里import了torch包,为什么书中还要单独安装torch包并import torch,单独安装的torch和d2l里的torch有什么区别?

        回答:其实只要打开上个问题中的Location目录内的d2l文件夹,不用过多解释,这个问题就明白了:d2l包里根本没有深度学习框架torch包,只有一个名为torch的模块。

        打开d2l文件夹,可以看到这个文件夹里共有5个.py文件和一个文件夹,分别是__init__.py, mxnet.py, paddle.py, tensorflow.py, torch.py这5个.py文件和__pycache__文件夹。

        因此,from d2l import torch as d2l实际上是import了d2l文件夹里的torch.py,与我们要用的那个深度学习框架torch包没什么关系。动手学深度学习中文版(https://zh.d2l.ai/)共基于四个深度学习框架进行了实现,分别亚马逊的mxnet, 百度的paddle, 谷歌的tensorflow和当前最流行的pytorch。作者将书中不同实现版本的常用函数和类分别存成一个.py文件,构成一个模块(module),然后将这四个模块组成了d2l这个包(package)。

        使用记事本或其它文本编辑器打开d2l文件夹内的torch.py,可以看到该文件的具体内容,就是在课本中那些带有#@save标记的函数或类。

        困惑3:为什么不直接import d2l导入包的全部内容,而是要用from d2l import torch as d2l?能否简单使用import d2l?

        回答:在弄懂上一个问题前,其实心中的困惑是为什么要把d2l内部包含的深度学习框架torch命名为d2l?为什么不使用d2l包里的全部内容而只是使用torch部分?from d2l import torch as d2l实际是将d2l内部包含的深度学习框架torch重命名为d2l使用了,并没有使用包里的其它内容。当然,上一个问题弄明白后就不会有这些困惑了。

        那么就只剩下“能否简单使用import d2l”这个问题了。其实只要自己试一下就行了,答案是import d2l可以正常运行,但不能正常使用包内的torch模块,因为当你尝试用d2l.torch.xxx去访问d2l包内torch模块中的函数或类时,会有以下错误提示:

        AttributeError: module 'd2l' has no attribute 'torch'

       这个跟d2l包内的__init__.py文件有关,可以尝试在文件中加入动态导入功能,具体就不说了,可以参见:https://blog.csdn.net/Dontla/article/details/142757272


http://www.kler.cn/a/527277.html

相关文章:

  • three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)
  • React 19 新特性探索:提升性能与开发者体验
  • 996引擎 - NPC-添加NPC引擎自带形象
  • Android vendor.img中文件执行权问题
  • hdfs:介绍三个脚本
  • Linux Samba 低版本漏洞(远程控制)复现与剖析
  • 青少年编程与数学 02-008 Pyhon语言编程基础 05课题、数据类型
  • 【Elasticsearch】match_bool_prefix 查询 vs match_phrase_prefix 查询
  • DeepSeek的使用技巧介绍
  • SARIMA介绍
  • 【TCP协议】流量控制 滑动窗口
  • 高速PCB设计指南5——电磁干扰和电磁兼容
  • CSDN的历史
  • Flink Connector 写入 Iceberg 流程源码解析_confluent icebergsinkconnector
  • git push到远程仓库时无法推送大文件
  • DeepSeek - R1:AI 推理模型的技术深度剖析与行业影响
  • 浅析 SSH 免密登录原理
  • 五. Redis 配置内容(详细配置说明)
  • C语言:创建带头结点的动态链表:解析与实现
  • Three.js 中实现自定义光圈 Shader 效果
  • 强化学习笔记——4策略迭代、值迭代、TD算法
  • 使用PaddlePaddle实现逻辑回归:从训练到模型保存与加载
  • 16进制(十六进制)和二进制之间的转换
  • Java开发vscode环境搭建
  • Elasticsearch:如何搜索含有复合词的语言
  • 第5章 公共事件