理解动手学深度学习的自编包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.rhkb.cn/news/10832.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568使用QT搭建TCP服务器和客户端

文章目录 一、让RK3568开发板先连接上wifi二、客户端代码1. `widget.h` 文件2. `widget.cpp` 文件**详细讲解**1. **`Widget` 类构造函数 (`Widget::Widget`)**2. **UI 布局 (`setupUI`)**3. **连接按钮的槽函数 (`onConnectClicked`)**4. **发送消息按钮的槽函数 (`onSendMess…

Redis|前言

文章目录 什么是 Redis?Redis 主流功能与应用 什么是 Redis? Redis,Remote Dictionary Server(远程字典服务器)。Redis 是完全开源的,使用 ANSIC 语言编写,遵守 BSD 协议,是一个高性…

【算法设计与分析】实验8:分支限界—TSP问题

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握分支界限求解问题的思想;针对不同的问题,能够利用分支界限法进行问题拆分和求解以及时间复杂度分析…

2025年大年初一篇,C#调用GPU并行计算推荐

C#调用GPU库的主要目的是利用GPU的并行计算能力,加速计算密集型任务,提高程序性能,支持大规模数据处理,优化资源利用,满足特定应用场景的需求,并提升用户体验。在需要处理大量并行数据或进行复杂计算的场景…

2025:影刀RPA使用新实践--CSDN博客下载

文章目录 一键CSDN博客下载器程序说明指导说明使用步骤 获取方法 一键CSDN博客下载器 程序说明 配置信息:CSDN账号(手机号/邮箱/用户名)、密码、博客文件类型支持markdown格式、html格式(默认值markdown格式)、博客保…

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

【Postman接口测试】Postman的安装和使用

在软件测试领域,接口测试是保障软件质量的关键环节之一,而Postman作为一款功能强大且广受欢迎的接口测试工具,能够帮助测试人员高效地进行接口测试工作。本文将详细介绍Postman的安装和使用方法,让你快速上手这款工具。 一、Pos…

边缘检测算法(candy)

人工智能例子汇总:AI常见的算法和例子-CSDN博客 Canny 边缘检测的步骤 1. 灰度转换 如果输入的是彩色图像,则需要先转换为 灰度图像,因为边缘检测通常在单通道图像上进行。 2. 高斯滤波(Gaussian Blur) 由于边缘…

WinDBG查找C++句柄泄露

C代码(频繁点击About按钮导致Mutex句柄泄露) HANDLE _mutexHandle;LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {switch (message){case WM_COMMAND:{int wmId LOWORD(wParam);// 分析菜单选择:switch (wmId){c…

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 (1)系统首页 &#xff…

大白话讲清楚embedding原理

Embedding(嵌入)是一种将高维数据(如单词、句子、图像等)映射到低维连续向量的技术,其核心目的是通过向量表示捕捉数据之间的语义或特征关系。以下从原理、方法和应用三个方面详细解释Embedding的工作原理。 一、Embe…

mysql中in和exists的区别?

大家好,我是锋哥。今天分享关于【mysql中in和exists的区别?】面试题。希望对大家有帮助; mysql中in和exists的区别? 在 MySQL 中,IN 和 EXISTS 都是用于子查询的操作符,但它们在执行原理和适用场景上有所不…

MySQL高可用

一、mysql路由 1.利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用响应的路由策略来处理连接来使其连接到正确的mysql数据库服务器 2.mysql route的部署方式 需要在所有数据库主机之外再打开一台主机mysql-router 配置mysql…

DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)

文章目录 引言1. 概述2. 领域驱动设计(DDD)分层架构模型2.1 DDD的核心概念2.2 DDD架构分层解析 3. 整洁架构:洋葱架构与依赖倒置3.1 整洁架构的核心思想3.2 整洁架构的层次结构 4. 六边形架构:解耦核心业务与外部系统4.1 六边形架…

LS和MMSE信道估计

1️⃣ LS(最小二乘)信道估计 OFDM系统的信道估计常在频域进行,因为OFDM本身就是基于频域的。频域模型可以表示为: Y ( f ) X ( f ) H ( f ) Z ( f ) Y(f)X(f) H(f)Z(f) Y(f)X(f)H(f)Z(f) 其中, Y ( f ) Y(f) Y(f)表…

C++ strcpy和strcat讲解

目录 一. strcpy 代码演示: 二.strcat 代码演示: 一. strcpy 使⽤字符数组可以存放字符串,但是字符数组能否直接赋值呢? ⽐如: char arr1[] "abcdef"; char arr2[20] {0}; arr2 arr1;//这样这节赋值可…

力扣257. 二叉树的所有路径(遍历思想解决)

Problem: 257. 二叉树的所有路径 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 利用先序遍历的思想,我门用一个List变量path记录当前先序遍历的节点,当遍历到根节点时,将其添加到另一个List变量res中&…

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…

向上调整算法(详解)c++

算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 这里为什么插入85完后合法? 我们插入一个85,…

数据库备份、主从、集群等配置

数据库备份、主从、集群等配置 1 MySQL1.1 docker安装MySQL1.2 主从复制1.2.1 主节点配置1.2.2 从节点配置1.2.3 创建用于主从同步的用户1.2.4 开启主从同步1.2.4 主从同步验证 1.3 主从切换1.3.1 主节点设置只读(在192.168.1.151上操作)1.3.2 检查主从数…