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

【Pytorch:nn.Embedding】简介以及使用方法:用于生成固定数量的具有指定维度的嵌入向量embedding vector

文章目录

  • 1、nn.Embedding
  • 2、使用场景

1、nn.Embedding

  • 首先我们讲解一下关于嵌入向量embedding vector的概念

1)在自然语言处理NLP领域,是将单词、短语或其他文本单位映射到一个固定长度的实数向量空间中。嵌入向量具有较低的维度,通常在几十到几百维之间,且每个维度都包含一定程度上的语义信息。这意味着在嵌入向量空间中,语义上相似的单词在向量空间中也更加接近。
2)在计算机视觉领域,是将图像或图像中的区域映射到一个固定长度的实数向量空间中。嵌入向量在计算机视觉任务中起到了表示和提取特征的作用。通过将图像映射到嵌入向量空间,可以捕捉到图像的语义信息、视觉特征以及图像之间的相似性。

  • 总之,嵌入向量是具有固定维度的,而不论是在NLP领域还是CV领域,都需要生成多个嵌入向量,因此也有固定数量。
  • 于是,我们就可以简单理解该类为:
CLASS torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None,
norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, _freeze=False, device=None, dtype=None)
''
一个简单的查找表,用于存储固定词典和尺寸的embeddings:其实就是存储了固定数量的具有固定维度的嵌入向量
该模块需要使用索引检索嵌入向量:也就是说模块的输入是索引列表,输出是相应存储的嵌入向量。
1) num_embeddings: 嵌入向量的数量
2) embedding_dim: 嵌入向量的维度
注意:
1)它的成员变量weight:具有shape为 (num_embeddings, embedding_dim) 的可学习的参数
2)输入为:任意形状[*]的IntTensor或LongTensor,内部元素为索引值,即0到num_embeddings-1之间的值输出为:[*, H]的嵌入向量,H为embedding_dim
''
  • 例如:
from torch import nn
import torch# an Embedding module containing 10 tensors of size 3
embedding = nn.Embedding(10, 3)
# a batch of 2 samples of 4 indices each
input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
print(embedding(input))
print(embedding.weight)
''
输出为:
tensor([[[ 0.4125,  0.1478,  0.3764],[ 0.5272, -0.4960,  1.5926],[ 0.2231, -0.7653, -0.5333],[ 2.8278,  1.5299,  1.4080]],[[ 0.2231, -0.7653, -0.5333],[-0.3996,  0.3626, -0.3369],[ 0.5272, -0.4960,  1.5926],[ 0.6222,  1.3385,  0.6861]]], grad_fn=<EmbeddingBackward>)
Parameter containing:
tensor([[-0.1316, -0.2370, -0.8308],[ 0.4125,  0.1478,  0.3764],[ 0.5272, -0.4960,  1.5926],[-0.3996,  0.3626, -0.3369],[ 0.2231, -0.7653, -0.5333],[ 2.8278,  1.5299,  1.4080],[-0.4182,  0.4665,  1.5345],[-1.2107,  0.3569,  0.9719],[-0.6439, -0.4095,  0.6130],[ 0.6222,  1.3385,  0.6861]], requires_grad=True)
''

2、使用场景

  • transformer decoder输入的嵌入向量Output Embedding
    在这里插入图片描述
  • DETR中的decoder的object queries
    在这里插入图片描述
http://www.lryc.cn/news/124785.html

相关文章:

  • 动态库的命名规则
  • 【Linux】网络---->网络理论
  • Android学习之路(4) UI控件之输入框
  • 1.初识Web
  • 【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)
  • 【Linux】可重入函数 volatile关键字 以及SIGCHLD信号
  • 【动态规划】回文串问题
  • Laravel Swift Mail发送带附件的邮件报错 “Swift_IoException The path cannot be empty“处理
  • Linux下常见的代理服务器软件介绍
  • SCSS的基本用法
  • alertmanager创建nginx-ingress basic auth鉴权
  • 系列六、Redis中的五大数据类型及相关操作
  • 四大运营商的大流量卡测评,看完您会选哪个运营商?
  • Apache-Maven
  • 什么是原子交换?
  • java springboot word文档转pdf
  • 【Leetcode Sheet】Weekly Practice 2
  • 【BERTopic应用 03/3】:微调参数
  • 2023年上半年数学建模竞赛题目汇总与难度分析
  • Linux下搭建java环境
  • String、StringBuffer、StringBuilder三者的异同?
  • htmlCSS-----弹性布局案例展示
  • Fiddler模拟请求发送和修改响应数据
  • RH850从0搭建Autosar开发环境【23】- Davinci Configurator之DCM实操实现DID的读取写入
  • ChatGPT收录
  • Nginx随笔
  • 61. 旋转链表
  • Python实现动态调用Matlab自定义函数
  • redis集群和分片-Redis Cluster:分布式环境中的数据分片、主从复制和 Sentinel 哨兵
  • 【数据库基础】Mysql下载安装及配置