无脑入门pytorch系列(一)—— nn.embedding

news2024/12/27 11:54:08

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思就只能【看懂代码】,无法【理解代码】。

目录

  • 官方定义
  • demo
  • 练习1——改变**embedding_dim**
  • 练习2——index越界
  • 练习3——sequence长度不一致
  • 练习4——改变输入

官方定义

nn.embedding就是一个简单的查找表,存储固定字典和大小的嵌入。

该模块通常用于存储词嵌入并使用索引检索它们。模块的输入是索引列表,输出是相应的词嵌入。

个人理解:

  • nn.embedding就是一个字典映射表,比如它的大小是128,0~127每个位置都存储着一个长度为3的数组,那么我们外部输入的值可以通过index (0~127)映射到每个对应的数组上,所以不管外部的值是如何都能在该nn.embedding中找到对应的数组。想想哈希表,就很好理解了。
  • 既然是映射表,那么外部的输入的值肯定不能超过最大长度,比如128,同时下限也是。

官方的文档如下,torch.nn.embedding:

image-20230802145811801

从官方的定义来看实在是非常复杂,下面看个例子:

demo

下面是一个官方文档给出的例子:

import torch
import torch.nn as nn

embedding = nn.Embedding(10, 3) # an Embedding module containing 10 tensors of size 3
input = torch.LongTensor([[1,2,4,5],[4,3,2,9]]) # a batch of 2 samples of 4 indices each
e = embedding(input)
print(e)

输出的结果:

image-20230802150024797

我们一步步理解代码:

  1. 首先,embedding = nn.Embedding(10, 3)即定义一个embedding模块,包含了一个长度为10的张量,每个张量的大小是3。举个例子,[-1.0556, -0.2404, -0.4578]就是一个tensor,那么如何取该tensor?使用下标index去取,注意,理解这点非常重要。
  2. 其次,input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])即输入一个我们需要embedding的变量,输入的每个值最终映射到张量空间中。
  3. 最后,我们发现输出e变成了[2, 4, 3]的张量,那么没有学习过的同学自然是一脸懵逼。我们需要,说说怎么看张量的维度,从最外层的**[]开始,计算里面的独立个体,发现是2;接着从第二维度的[]**开始数,发现是4;依次类推就可以得到张量的维度是[2, 4, 3]。

仍然十分迷茫,但是没关系,我们看看embedding的weight:

embedding.weight

输出:

image-20230802150606779

我们发现embedding.weight是个[10, 3]的向量,那么embedding.weight的值是怎么被我们input取到的呢?
比如index = 1,那么我们取[-1.0556, -0.2404, -0.4578]; index = 2, 取[ 1.3328, 2.5743, -0.7375]; index = 4, 取[-0.0584, -0.6458, 0.8236]。
这时候,聪明的小伙伴已经发现了,这不就刚好对应了e的输入为1/2/4的值吗?只是我们把输入1作为index去embedding.weight取对应的值去填充新的张量e。

所以说,我们待输入的张量[[1,2,4,5],[4,3,2,9]],在经过nn.embedding后,从[2, 4]维度变换为[2, 4, 3],其实就是[2, 4]中的每个值作为索引去nn.embedding中取对应的权重。

练习1——改变embedding_dim

embedding = nn.Embedding(10, 4) # an Embedding module containing 10 tensors of size 3
input = torch.LongTensor([[1,2,4,5],[4,3,2,9]]) # a batch of 2 samples of 4 indices each
e = embedding(input)
print(e)

输出:

image-20230802152757460

很明显,当embedding是个[10, 4]的张量时,映射出的张量为[2, 4, 4]

练习2——index越界

embedding = nn.Embedding(10, 3) # an Embedding module containing 10 tensors of size 3
input = torch.LongTensor([[1,2,4,5],[4,3,2,10]]) # a batch of 2 samples of 4 indices each
e = embedding(input)
print(e)

报错:IndexError: index out of range in self

输出会报错,那是因为我们的embedding的维度是[10, 3],所以index的取值从0~9,那么我们取10肯定就出现问题了。如果出现对应的问题时,就可以大致猜到输入的值越界了。

练习3——sequence长度不一致

embedding = nn.Embedding(10, 3) # an Embedding module containing 10 tensors of size 3
input = torch.LongTensor([[1,2,4],[4,3,2,9]]) # a batch of 2 samples of 4 indices each
e = embedding(input)
print(e)

报错:ValueError: expected sequence of length 3 at dim 1 (got 4)

将第一维[1, 2, 4, 5]减去5变成[1,2,4],出现ValueError: expected sequence of length 3 at dim 1 (got 4)的问题,所以需要每个维度的长度都一致。

练习4——改变输入

embedding = nn.Embedding(10, 3) # an Embedding module containing 10 tensors of size 3
input = torch.LongTensor([[[1,2],[2,3],[4,5],[5,7]],[[4,5],[3,4],[2,3],[8,9]]]) # a batch of 2 samples of 4 indices each
e = embedding(input)
print(e)

输出:

image-20230802153045211

当输入的的维度为[2,4,2]时,经过embedding得到[2,4,2,3]的张量,也是很好理解的。

喜欢的朋友可以点赞三连一下,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云安全攻防(四)之 云原生技术

云原生技术 容器技术 容器与虚拟化 虚拟化(Virtualization)和容器(Container)都是系统虚拟化的实现技术,可实现系统资源的”一虚多“共享。容器技术可以理解成一种”轻量的虚拟化“方式,此处的”轻量“主…

工业机器人运动学与Matlab正逆解算法学习笔记(用心总结一文全会)(四)——雅可比矩阵

文章目录 建立DH模型机器人正运动学机器人逆运动学机器人雅可比矩阵△ 机器人速度雅可比矩阵○ 雅可比矩阵相关概念○ 以二连杆平面机器人举例说明雅可比矩阵 △ 机器人雅克比矩阵与速度分析△ 雅克比矩阵的奇异性○ 机器人的奇异位形(奇异形位、奇异点)…

Docker中容器数据卷

容器数据卷 一.什么是容器数据卷二.使用数据卷方式一:直接使用命令来挂载 -v 三.具名和匿名挂载 一.什么是容器数据卷 docker理念 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们的容器删除,数据就会…

一文吃透UML图(海贼版)

先来简单的说一说什么是UML? UML是统一建模语言,是用来设计软件的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息,UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图…

spring boot 服务健康检测返回OUT_OF_SERVICE,导致服务无法成功注册到consul

一、背景 健康检测接口返回OUT_OF_SERVICE curl -X GET http://192.168.5.53:8085/mgm/health{"status":"OUT_OF_SERVICE"}从日志启动看,没有任何报错信息;而且jvm进程也启动成功。 关键的一点信息是,服务的swagger地…

docker 资源限制

目录 1、CPU使用率 2、CPU共享比例 3、CPU周期限制 4、CPU核心限制 5、CPU 配额控制参数的混合案例 6、内存限制 7、Block IO 的限制 8、限制bps 和iops docker资源限制 Docker容器技术底层是通过Cgroup(Control Group 控制组)实现容器对物理资…

iOS多线程——pthread、NSThread

pthread NSThread 多线程的常见方案pthreadpthread 简介pthread 使用方法pthread 其他相关方法 NSThread创建、启动线程线程相关用法线程状态控制方法线程之间的通信NSThread 线程安全和线程同步NSThread 非线程安全NSThread 线程安全 多线程的常见方案 技术方案特点使用语言线…

[企业权限管理项目](二)环境搭建

数据库与表结构 oracle Oracle 为每个项目创建单独user,oracle数据表存放在表空间下,每个用户有独立表空间 创建用户及密码 语法[创建用户]: create user 用户名 identified by 口令[即密码]; 例子: create user tes…

bigemap在草原行业的应用案例

一.为什么选择Bigemap 1.使用软件一般都用于套坐标以及空间规划图,方便于项目选址和居民建房报建 2.在卫星图上找到用地范围,然后打点,导出点位范围的2000坐标,用于汇报出图 3.CGCS2000坐标系通过矢量转换转成地方坐标系

Noah-MP陆面过程模型建模方法与站点、区域模拟教程

详情点击链接:Noah-MP陆面过程模型建模方法与站点、区域模拟教程 陆面过程的内容(陆表能量平衡、水循环、碳循环等),陆面过程研究的重要性。 图 1 陆面过程主要研究内容 陆面过程模型的发展、基本原理、常用陆面过程模型等。 图…

VR虚拟仿真技术在道路桥梁中有哪些具体应用?

虚拟现实(VR)是一种新兴的技术,可以为桥梁工程提供许多应用场景。以下是一些可能的应用场景: 1.桥梁设计和模拟 VR元宇宙可以用于桥梁的设计和模拟。工程师可以使用VR技术来创建桥梁的三维模型,并对其进行测试和优化。这可以帮助工程师更好地…

C# Blazor 学习笔记(7):组件嵌套开发

文章目录 前言相关资料组件嵌套组件模板RenderFragment 意义传统前端样式组件化css 前言 我们在组件化一共有三个目的。 不用写CSS不用写html不用写交互逻辑 简单来说就是Java常说的约定大于配置。我们只需要必须的参数即可,其它的都按照默认配置。我们不需要关系…

intel advisor安装与使用

前言 没有搜到相关教程,所以自己写一篇,如有不足请指正 安装 建议直接安装完整工具包 Intel oneAPI Base Toolkit 注意先安这个 https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html linux指令 wget http…

让这些ai绘画神器为你打开创作灵感的大门

在一个小镇上,住着一位名为奥斯卡的艺术家。他的画作仿佛有生命般跃动,每一幅都散发着神秘的魔力。然而,奥斯卡却感到自己的创造力有些枯竭。他渴望找到一种新的灵感源泉,以挑战自己的创作瓶颈。这时,他听说了ai绘画生…

大数据与okcc呼叫中心融合的几种方式

在实际的生产实践中,为提高营销效率,避免骚扰大众,很多呼叫中心业务会与大数据平台进行合作,进行精准营销。 买卖数据是非法的,大数据平台方并不会提供直接的数据,一般情况下,提供的数据都是脱…

马上解锁 StarRocks 存算分离,降本增效无需等!

StarRocks 于 4 月底正式发布了 3.0 版本,该里程碑版本带来了大家期盼已久的新特性--存算分离。此新功能一推出,立即受到社区热情追捧,用户纷纷开始在自己的业务中评估和测试存算分离效果。从芒果TV、聚水潭、网易邮箱、浪潮、天道金科等数十…

【技巧】学术Poster的制作要点,详细!

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 内容零零散散均收集自网上,有点杂忘了引用。 内容技巧 https://posts.careerengine.us/p/5dac3e628c131b0541dd9171 展示内容包括(将信息分块) 可选择性删减,注意…

分享可以免费使用的5款好用小工具

​ 最近后台收到好多小伙伴的私信,今天继续推荐五款小工具,都是免费使用的,大家可以去试试看。 剪贴板管理器——ClipX ​ ClipX是一款微型剪贴板管理器,可以记录你复制的文本和图像,并让你随时通过快捷键或鼠标菜单…

git面试题

文章目录 git经常用哪些指令git出现代码冲突怎么解决你们团队是怎么管理git分支的如何实现Git的免密操作 git经常用哪些指令 产生代码库 新建一个git代码库 git init下载远程项目和它的整个代码历史 git clone 远程仓库地址配置 显示配置 git config --list [--global]编辑配置…

Python爬虫 从小白到高手 各种最新案例! request scrapy

Python爬虫 从小白到高手 各种最新案例! Urllib Xpath JsonPath BeautifulSoup requests 1.基本使用 1.官方文档: http://cn.python‐requests.org/zh_CN/latest/ 快速上手 http://cn.python‐requests.org/zh_CN/latest/user/quickstart.html 2.安装 pi…