当前位置: 首页 > 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

相关文章:

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

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

大语言模型(LLM)模拟金融市场参与者行为

大语言模型(LLM)模拟金融市场参与者行为 研究背景 传统深度学习模型通过识别市场数据历史模式预测市场,但未捕捉个体决策过程。LLM 虽能学习人类对不同提示的反应,但在模拟金融市场参与者时面临挑战:个体投资者不总是理性决策,LLM 可能无法捕捉;LLM 数值和金融知识可靠…...

蓝桥杯刷题DAY1:前缀和

所谓刷题,讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了,我对你是有些失望的,进了这个营地,不是把事情做好就可以的,你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网,成为…...

Hive:窗口函数(1)

窗口函数 窗口函数OVER()用于定义一个窗口,该窗口指定了函数应用的数据范围 对窗口数据进行分区 partition by 必须和over () 一起使用, distribute by经常和sort by 一起使用,可以不和over() 一起使用.DISTRIBUTE BY决定了数据如何分布到不同的Reducer上&#xf…...

OpenCV:SIFT关键点检测与描述子计算

目录 1. 什么是 SIFT? 2. SIFT 的核心步骤 2.1 尺度空间构建 2.2 关键点检测与精细化 2.3 方向分配 2.4 计算特征描述子 3. OpenCV SIFT API 介绍 3.1 cv2.SIFT_create() 3.2 sift.detect() 3.3 sift.compute() 3.4 sift.detectAndCompute() 4. SIFT 关…...

爬虫基础(一)HTTP协议 :请求与响应

前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议&#xff…...

视频拼接,拼接时长版本

目录 视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg imageio,适合视频较短 视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg import subprocess import glob import os from nats…...

【字符串两大注意事项】

表达字符串的方式 1.双引号:"hello world" 2.字符指针:char* ptr "hello world" 3.字符数组:char arr[] "hello world"辨析 项目表示方式代表含义内存分布1“hello world”字符串字面量字符串常量就是数据…...

【4Day创客实践入门教程】Day1 工具箱构建——开发环境的构建

Day1 工具箱构建——开发环境的构建 目录 Day1 工具箱构建——开发环境的构建1.元件选型2.准备工具3. 开发板准备焊接排针具体步骤注意事项与技巧 4. 软件环境配置与固件烧录Thonny IDE软件环境配置配置Micropython环境与烧录固件**问题:**买的是4M/16M,…...

如何让一个用户具备创建审批流程的权限

最近碰到一个问题,两个sandbox,照理用户的权限应该是一样的,结果开发环境里面我可以左右的做各种管理工作,但是使用change set上传后,另一个环境的同一个用户,没有相对于的权限,权限不足。 当时…...

Docker Hello World

Docker Hello World 引言 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。本文将带领您从零开始,学习如何使用 Docker 运行一个简单的 "Hello World"…...

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操 Janus-Pro-7B介绍 Janus-Pro-7B 是由 DeepSeek 开发的多模态 AI 模型,它在理解和生成方面取得了显著的进步。这意味着它不仅可以处理文本,还可以处理图像等其他模态的信息。 模型主要特点:Permalink…...

ITS290F Human Computer Interaction

ITS290F Human Computer Interaction & User Experience Design Lab 1. Introduction to CodePen What you’ll learn in this lab: • Understanding CodePen • Creating a front-end page • Using Google form to submit your lab work CodePen is a cloud-based in…...

【详细教程】如何在Mac部署Deepseek R1?

DeepSeek是目前最火的国产大模型,官方App用户太多服务经常出现卡顿,部署一个本地DeepSeek R1可以方便使用。 1.系统最低要求 macOS 11 Big Sur 或更新 2.下载ollama https://ollama.com/ 3.安装DeepSeek R1 打开终端 运行命令 ollama run deepseek-…...

DeepSeek能下围棋吗?(续)

休息了一下,接着琢磨围棋,其实前面一篇里的规则有个漏洞的,就是邻居关系定义有问题,先回顾一下游戏规则: 游戏规则 定义: 1.数字对,是指两个1到9之间的整数组成的有序集合。可与记为(m,n)&…...

网络安全技术简介

网络安全技术简介 随着信息技术的迅猛发展,互联网已经成为人们日常生活和工作中不可或缺的一部分。与此同时,网络安全问题也日益凸显,成为全球关注的焦点。无论是个人隐私泄露、企业数据被盗取还是国家信息安全受到威胁,都与网络…...

Keepalived高可用集群企业应用实例一

一、实现master/slave的keepalived单主架构 1.master配置 global_defs { notification_email { 2676401238qq.com } notification_email_from keepalivedKA1.xiao.org smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ka1.xiao.org vrrp_skip_check_adv_addr vrr…...

愿景:做机器视觉行业的颠覆者

一个愿景,两场战斗,专注制胜。 一个愿景:做机器视觉行业的颠覆者。 我给自己创业,立一个大的愿景:做机器视觉行业的颠覆者。 两场战斗:无监督-大模型 上半场,无监督。2025-2030,共五…...

【产品经理学习案例——AI翻译棒出海业务】

前言: 本文主要讲述了硬件产品在出海过程中,翻译质量、翻译速度和本地化落地策略是硬件产品规划需要考虑的核心因素。针对不同国家,需要优化翻译质量和算法,关注市场需求和文化差异,以便更好地满足当地用户的需求。同…...

算法总结-数组/字符串

文章目录 1.合并两个有序数组1.答案2.思路 2.移除元素1.答案2.思路 3.删除有序数组中的重复项 II1.答案2.思路 4.多数元素1.答案2.思路 5.轮转数组1.答案2.思路 6.买卖股票的最佳时机1.答案2.思路 7.买卖股票的最佳时机 II1.答案2.思路 8.跳跃游戏1.答案2.思路 9.H 指数1.答案2…...

被裁与人生的意义--春节随想

还有两个月就要被迫离开工作了十多年的公司了,不过有幸安安稳稳的过了一个春节,很知足! 我是最后一批要离开的,一百多号同事都没“活到”蛇年。看着一批批仁人志士被“秋后斩首”,马上轮到我们十来个,个中滋味很难言清…...

Linux解决输入法卡死问题

说明:在Ubuntu系统中,如果您需要重启输入法服务(比如fcitx或ibus),您可以按照以下步骤操作。这些步骤适用于大多数基于Ubuntu的发行版,例如Ubuntu、Linux Mint等。 一、重启Fcitx输入法服务 1、使用Ctrl …...

2501,编写dll

DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…...

4-图像梯度计算

文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…...

【算法设计与分析】实验5:贪心算法—装载及背包问题

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

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(协议层封装)

目录 协议层设计,以IIC为例子 关于软硬件IIC 设计的一些原则 完成协议层的抽象 刨析我们的原理 如何完成我们的抽象 插入几个C语言小技巧 完成软件IIC通信 开始我们的IIC通信 结束我们的IIC通信 发送一个字节 (重要)完成命令传递和…...

【自学笔记】计算机网络的重点知识点-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 计算机网络重点知识点一、计算机网络概述二、网络分类三、网络性能指标四、网络协议与体系结构五、数据交换方式六、物理层与数据链路层七、网络层与运输层八、应用…...

Java中的getInterfaces()方法:使用与原理详解

在Java中,反射(Reflection)是一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的属性和方法。getInterfaces()方法是Java反射API中的一个重要方法,用于获取类或接口直接实现的接口。本文将深入探讨getInt…...

MySQL为什么默认引擎是InnoDB ?

大家好,我是锋哥。今天分享关于【MySQL为什么默认引擎是InnoDB ?】面试题。希望对大家有帮助; MySQL为什么默认引擎是InnoDB ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认引擎是 InnoDB,主要…...

玄武计划--干中学,知行合一

作为开发者转型安全领域有一定优势,但需要系统学习网络安全知识。以下是针对你的情况(Java背景 + 快速入门)的实战导向学习路径,分为基础、工具、漏洞利用和进阶四个阶段: 一、基础准备(1-2周) 网络协议与渗透基础 重点协议:深入理解 TCP/IP、HTTP/HTTPS、DNS、SMTP,用…...