PyTorch中的nn.Embedding的使用、参数及案例

PyTorch中的nn.Embedding的使用

Embedding层在神经网络中主要起到降维或升维的作用。具体来说,它通过将输入(通常是离散的、不连续的数据,如单词或类别)映射到连续的向量空间,从而实现数据的降维或升维。

在降维方面,Embedding层可以用来降低数据的维度,减少计算和存储开销。例如,在自然语言处理任务中,词嵌入可以将每个单词表示为一个实数向量,从而将高维的词汇空间映射到一个低维的连续向量空间。这有助于提高模型的泛化能力和计算效率。

在升维方面,Embedding层可以将低维的数据映射到高维的空间,以便于提取更丰富的特征或进行更复杂的分析。例如,在图像处理任务中,嵌入层可以将图像的像素值映射到一个高维的空间,从而更好地捕捉图像中的复杂特征和结构。

此外,Embedding层还可以通过训练来学习输入数据中的语义或结构信息,使得相似的输入在嵌入空间中具有相似的向量表示。这种嵌入向量可以用于各种高级任务,如聚类、分类、推荐等。

nn.Embedding:

参数作用
num_embeddings嵌入字典的大小
embedding_dim每个嵌入词向量的大小
padding_idx可选参数:(索引指定填充)如果给定,则遇到padding_idx中的索引,将其位置填0
max_norm可选参数:如果给定,则将范数大于的每个嵌入向量重新规范化为具有范数
norm_type要为选项计算的p-norm的p
scale_grad_by_freq如果给定,这将按小批量中单词频率的倒数来缩放梯度
sparse稀疏张量

在PyTorch中,nn.Embedding用来实现词与词向量的映射。nn.Embedding具有一个权重(weight),形状是(num_words, embedding_dim)----->(字典大小, 词向量维度)。

例子:

导包:
import torch
import torch.nn
import jieba
分词生成word2indexDict、index2wordDict:
sentence = "Embedding层是深度学习中的一种重要技术,它可以有效地处理高维、离散和非线性的数据,使得神经网络能够更好地理解和处理复杂的问题。"
wordList = list(set(" ".join(jieba.cut(sentence)).split()))
word2indexDict = dict()
index2wordDict = dict()
for index, word in enumerate(wordList):word2indexDict[word] = index + 1index2wordDict[index + 1] = word
方法word2index、index2word:
def word2index(wordList, word2indexDict):indexList = list()for word in wordList:indexList.append(word2indexDict[word])return indexList
def index2word(indexList, index2wordDict):wordList = list()for index in indexList:wordList.append(index2wordDict[index])return wordList

在自然语言处理中,padding是一个常见的处理方法,用于统一不同长度的序列到一个固定的长度。这主要是因为深度学习模型,特别是循环神经网络(RNN)和长短时记忆网络(LSTM),通常需要固定长度的输入序列。

  1. 统一不同长度的序列:当一个批次中有不同长度的句子时,需要将它们统一到一个固定的长度。padding可以将短的句子填充到固定长度,使得每个序列的长度都一致。
  2. 保证模型稳定性:固定长度的输入序列可以提高模型的稳定性。因为模型在训练时可以固定输入的维度,从而更容易训练和优化。
  3. 防止过拟合:当使用RNN或LSTM等循环神经网络时,如果输入的序列长度差异很大,模型的训练时间会增加,而且容易产生过拟合。通过padding,可以使得每个序列的长度相同,从而更容易控制模型的复杂度。
padding句子index方法:
def paddingIndexList(indexList, maxLength):if len(indexList) > maxLength:return indexList[:maxLength]else:for i in range(maxLength - len(indexList)):indexList.append(0)return indexList
def paddingIndex(sentenceList, word2indexDict, maxLength):sentenceIndexList = list()for sentence in sentenceList:# 分词sentenceList = " ".join(jieba.cut(sentence)).split()indexList = word2index(sentenceList, word2indexDict)indexList = paddingIndexList(indexList, maxLength)sentenceIndexList.append(indexList)return sentenceIndexList
nn.Embedding的使用:
# 创建最大词个数为词字典长度,每个词用维度为3表示
# index从1开始的所以len(word2indexDict) + 1
embedding = nn.Embedding(len(word2indexDict) + 1, 3)
# 转换为tensor
x = torch.LongTensor(x)
out = embedding(x)
# 输入的形状
print(x.shape)
# 词嵌入矩阵形状
print(out.shape)
# 词嵌入矩阵
print(out)
# 词嵌入权重
print(embedding.weight)

输出:

torch.Size([3, 12])
torch.Size([3, 12, 3])
tensor([[[-0.2272, -0.6535,  1.4155],[-0.2961,  0.5435,  0.3829],[ 0.9255, -1.4417,  0.6543],[-0.0796, -0.5464, -0.1243],[-0.7846, -1.2652, -0.8326],[-0.2464,  1.0438,  0.3106],[-0.4759,  0.5017, -1.6207],[ 0.6134,  0.9412, -0.9230],[ 0.1368, -0.8741, -2.1221],[ 0.4055, -0.1992,  1.2301],[-0.4898,  1.0194,  0.3048],[-0.4898,  1.0194,  0.3048]],[[-0.1783,  1.0126,  2.7392],[ 2.9278,  0.6301, -1.4197],[ 1.9807,  1.7687, -0.1354],[-1.3087, -0.1205,  0.4163],[ 0.2636,  0.6082,  1.6028],[ 1.4193, -0.1932, -0.9246],[-0.5884, -1.4016,  0.7351],[-0.4310,  0.6724,  1.2530],[ 1.3704, -0.0102,  0.3129],[ 1.0435, -0.9689,  0.4574],[-0.4759,  0.5017, -1.6207],[ 0.5711,  1.0981, -0.1208]],[[-0.0969,  0.4424,  2.7773],[ 0.1563, -1.5930,  0.0504],[ 0.2673, -0.1552, -0.9901],[ 0.6867, -1.3702,  1.6596],[-1.3087, -0.1205,  0.4163],[ 1.3590, -0.4433,  0.4342],[ 1.3704, -0.0102,  0.3129],[ 0.2636,  0.6082,  1.6028],[ 0.4744, -0.3505, -1.1645],[-0.4759,  0.5017, -1.6207],[-0.3297,  2.3305,  1.3228],[-0.4898,  1.0194,  0.3048]]], grad_fn=<EmbeddingBackward0>)
Parameter containing:
tensor([[-0.4898,  1.0194,  0.3048],[-0.1783,  1.0126,  2.7392],[ 0.2673, -0.1552, -0.9901],[ 1.4193, -0.1932, -0.9246],[-0.4310,  0.6724,  1.2530],[-0.2272, -0.6535,  1.4155],[ 2.9278,  0.6301, -1.4197],[ 0.4055, -0.1992,  1.2301],[-0.2464,  1.0438,  0.3106],[ 0.6777, -1.4049, -1.0489],[ 1.9807,  1.7687, -0.1354],[ 1.3590, -0.4433,  0.4342],[ 1.0435, -0.9689,  0.4574],[-0.3297,  2.3305,  1.3228],[-0.2961,  0.5435,  0.3829],[ 0.4744, -0.3505, -1.1645],[ 0.6134,  0.9412, -0.9230],[ 1.3704, -0.0102,  0.3129],[ 0.5711,  1.0981, -0.1208],[-0.0969,  0.4424,  2.7773],[ 0.1563, -1.5930,  0.0504],[-0.7846, -1.2652, -0.8326],[ 0.2636,  0.6082,  1.6028],[-1.3087, -0.1205,  0.4163],[-0.0796, -0.5464, -0.1243],[ 0.8210,  0.2765,  0.4816],[ 0.1368, -0.8741, -2.1221],[-0.4759,  0.5017, -1.6207],[ 0.6867, -1.3702,  1.6596],[ 0.9255, -1.4417,  0.6543],[-0.5884, -1.4016,  0.7351]], requires_grad=True)

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

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

相关文章

【SAR成像】基于RD、CS和ωk算法的合成孔径雷达成像算法原理与实现

基于RD、CS和ωk算法的合成孔径雷达成像算法实现 前言SAR基本概念雷达获取数据的几何关系低斜视角下的回波信号模型 RADARSAT-1主要参数数据预处理数据读取与再封装数据补零 成像算法坐标轴的产生RD算法距离压缩距离徙动矫正方位压缩 CS算法第一次相位相乘 变标后的信号第二次相…

Qt应用软件【协议篇】http协议get、post示例

文章目录 QT Http的APIHTTP GET 请求示例HTTP POST 请求示例伪装chrome浏览器get请求 QT Http的API QNetworkAccessManager 作用&#xff1a;管理所有的网络请求&#xff0c;是发送请求和接收响应的中心点。主要功能&#xff1a; 发送HTTP请求&#xff08;GET, POST, PUT, DE…

基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题需求

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

[Android] 240204批量生成联系人,短信,通话记录的APK

平常在做测试的时候&#xff0c;需要批量生成很多测试数据&#xff1b; 陌生人 联系人名字的生成支持随机生成&#xff0c;也可以自定义生成&#xff0c;自定义生成陌生人的数据&#xff0c;联系人的名字是否带索引&#xff1b; 通话记录 随机生成通话记录&#xff0c;在生…

云数据库RDS云监控

1. 什么是云数据库RDS&#xff1f;它有哪些特点&#xff1f; 云数据库RDS是一种在线关系型数据库服务&#xff0c;它具备的特点包括&#xff1a; 安全可靠&#xff1a;提供了容灾、备份、恢复等高可用性功能&#xff0c;确保数据的安全与可靠。弹性伸缩&#xff1a;用户可以根…

free5GC+UERANSIM

使用arp、ifconfig、docker inspect及网桥brctl 相关命令&#xff0c;收集容器IP及Mac地址相关信息&#xff0c;可以梳理出UERANSIMfree5GC模拟环境组网&#xff0c;如下图所示&#xff1a; 如上图所示&#xff1a;环境基于ubuntu 18.04 VMware虚机部署&#xff0c;5GC网元分别…

【React】memo()、useCallback()、useMemo()的区别及使用场景

介绍React中三个hooks方法memo useCallback useMemo的作用及使用场景示例 一、React.memo()&#xff1a;用来控制函数组件的重新渲染&#xff0c;将组件作为参数&#xff0c;函数的返回值是一个新的组件。二、React.useCallback()&#xff1a;将回调函数及依赖项数组作为参数传…

【Python】Unindent does not match any outer indentation level

这个问题一般是代码缩进问题导致的&#xff0c;规范代码缩进格式即可&#xff0c;如图&#xff1a; 这个问题是因为报异常的那行代码下的方法缩进问题导致&#xff0c;def calendar_f(): 方法名前面多了一个空格。 删除空格即可解决此问题。

【python】python爱心代码【附源码】

一、实现效果&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 二、完整代码&#xff1a; import math import random import threading import time from math import sin, cos, pi, log from tkinter import * import re# 烟花相关设置 Fireworks [] m…

Fink CDC数据同步(五)Kafka数据同步Hive

6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…

iview 页面中判断溢出才使用Tooltip组件

使用方法 <TextTooltip :content"contentValue"></TextTooltip> 给Tooltip再包装一下 <template><Tooltip transfer :content"content" :theme"theme" :disabled"!showTooltip" :max-width"300" :p…

滴滴面经相关知识整理(基于newbing)

Vue2和Vue3有许多不同之处&#xff0c;以下是一些主要的区别&#xff1a; 数据劫持方式&#xff1a;Vue2主要是通过Object.defineProperty劫持数据&#xff0c;对于新增的对象属性&#xff0c;使用数组修改元素&#xff0c;视图无法更新1。 性能和体积&#xff1a;Vue3的运行速…

Spring auto-configuration的使用

简介 在构建Maven项目时&#xff0c;使用Spring Boot自动配置可以使项目更易于集成和使用。本文将向您展示如何创建一个Maven项目&#xff0c;并使用Spring Boot自动配置使其能够被其他组件方便地依赖。 步骤 1. 添加Spring Boot Starter依赖 确保您的Maven项目具有必要的S…

跟着cherno手搓游戏引擎【20】混合(blend)

抽象&#xff1a; Renderer.h: #pragma once #include"RenderCommand.h" #include "OrthographicCamera.h" #include"Shader.h" namespace YOTO {class Renderer {public:static void Init();static void BeginScene(OrthographicCamera& …

天拓四方:边缘计算网关功能、特点与应用举例

传统的数据处理方式面临网络延迟、带宽限制和安全风险等问题。为了解决这些问题&#xff0c;边缘计算技术应运而生&#xff0c;而边缘计算网关作为其核心组件&#xff0c;正发挥着越来越重要的作用。边缘计算网关位于数据源和云数据中心之间。它具备数据采集、协议转换、数据处…

Oracle 执行计划(Explain Plan)

执行计划&#xff1a;一条查询语句在 ORACLE 中的执行过程或访问路径的描述。即就是对一个查询任务&#xff0c;做出一份怎样去完成任务的详细方案。 如果要分析某条 SQL 的性能问题&#xff0c;通常我们要先看 SQL 的执行计划&#xff0c;看看 SQL 的每一步执行是否存在问题。…

视觉SLAM十四讲学习笔记(一)初识SLAM

目录 前言 一、传感器 1 传感器分类 2 相机 二、经典视觉 SLAM 框架 1 视觉里程计 2 后端优化 3 回环检测 4 建图 5 SLAM系统 三、SLAM 问题的数学表述 四、Ubuntu20.04配置SLAM十四讲 前言 SLAM: Simultaneous Localization and Mapping 同时定位与地图构建&#…

交友系统---让陌生人变成熟悉人的过程。APP小程序H5三端源码交付,支持二开。

随着社交网络的发展和普及&#xff0c;人们之间的社交模式正在发生着深刻的变革。传统的线下交友方式已经逐渐被线上交友取而代之。而同城交友正是这一趋势的产物&#xff0c;它利用移动互联网的便利性&#xff0c;将同城内的人们连接在一起&#xff0c;打破了时空的限制&#…

机器视觉系统设计:视觉系统中的成像基准

开发视觉系统的一个重要活动是验证其部署是否符合工程规范。一个成功的视觉应用程序的两个特点是它无需工程师干涉情况下正常工作了多长时间&#xff0c;以及它的维护和复制部署是多么简易。实现所有如上所述目标的一个关键步骤是确定视觉系统的基准。 在这里使用的上下文中&a…

移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案

当下&#xff0c;传统媒体面临着诸多挑战&#xff0c;如何利用信息技术提升内容的质量、形式和分发效率&#xff0c;成为媒体行业的迫切需求。移动云作为数字中国建设的“主力军”&#xff0c; 立足于新兴媒体与云计算市场的变化与需求&#xff0c;推出了ONAIR 媒体云解决方案&…