Pytorch: nn.Embedding

news2024/12/25 12:43:41

文章目录

    • 1. 本质
    • 2. 用Embedding产生一个10 x 5 的随机词典
    • 3. 用这个词典编码两个简单单词
    • 4. Embedding的词典是可以学习的
    • 5. 例子完整代码

1. 本质

P y t o r c h \mathrm{Pytorch} Pytorch E m b e d d i n g \mathrm{Embedding} Embedding 模块是一个简单的查找表,用于存储固定字典和大小的嵌入。 n n . E m b e d d i n g \mathrm{nn.Embedding} nn.Embedding 层本质上是一个权重矩阵,其中每一行代表词汇表中每个单词的向量表示。这个权重矩阵的大小是 [ n u m _ e m b e d d i n g s , e m b e d d i n g _ d i m ] \mathrm{[num\_embeddings, embedding\_dim]} [num_embeddings,embedding_dim],其中 n u m _ e m b e d d i n g s \mathrm{num\_embeddings} num_embeddings 是词汇表的大小, e m b e d d i n g _ d i m \mathrm{embedding\_dim} embedding_dim 是嵌入向量的维度。

2. 用Embedding产生一个10 x 5 的随机词典

先用 E m b e d d i n g \mathrm{Embedding} Embedding 产生一个维度为 10 × 5 10\times5 10×5 的词典, 10 10 10 代表有十个词向量, 5 5 5 代表有每个词向量有 5 5 5​ 个元素。

import torch
import torch.nn as nn

embed = nn.Embedding(num_embeddings=10, embedding_dim=5)
embedding_matrix = embed.weight.data

print(f"nn Embedding 产生的词典是:\n {embedding_matrix.data}")
# nn Embedding 产生的词典是:
#  tensor([[ 0.9631, -1.4984,  1.0561,  0.4334,  1.3060],
#         [ 0.1714,  0.1842,  0.0532,  0.4573, -0.7236],
#         [ 0.4692,  1.2857,  0.5260, -1.0966, -1.6009],
#         [-0.7893, -0.2117,  0.0158,  1.1008,  0.9786],
#         [ 0.9095, -0.4467, -0.6501,  0.6469, -0.3829],
#         [-0.1534, -0.0128,  1.2285, -1.4347,  0.1968],
#         [-2.0171,  1.0805, -0.7189,  0.6184,  0.6858],
#         [-0.1328, -1.2482, -0.2517, -0.4750,  0.3215],
#         [-0.7670, -0.0462, -0.4849, -0.6647, -0.6340],
#         [ 0.7415, -2.2321,  1.3444,  0.3786, -0.2909]])

上述词典如下图所示,

在这里插入图片描述

3. 用这个词典编码两个简单单词

现在,我们将两个单词 p y t h o n , p y t o r c h \mathrm{python,pytorch} python,pytorch 用上面的词典编码成两个词向量。

  1. 建立这两个单词的列表,并获取各自的 i n d e x \mathrm{index} index

    # 示例:将两个单词“python”、“pytorch”根据上面的词典编码为对应的词向量
    words_to_embed = ['python', 'pytorch']
    
    # 获取每个单词的index,很明显,'python'的index是0, 'pytorch'的index是1。
    word_index = torch.LongTensor([0, 1])
    
  2. 将这两个 i n d e x \mathrm{index} index 传入词典,就可以获取对应的词向量;

    # 示例:将两个单词“python”、“pytorch”根据上面的词典编码为对应的词向量
    words_to_embed = ['python', 'pytorch']
    
    # 获取每个单词的index,很明显,'python'的index是0, 'pytorch'的index是1。
    word_index = torch.LongTensor([0, 1])
    
    # 将这两个index传入词典,就可以获取对应的词向量
    embedded_words = embed(word_index)
    print(f"编码后的词向量为:\n{embedded_words.data.numpy()}")
    # 编码后的词向量为:
    # [[ 0.96313465 -1.4984448   1.0561345   0.43344542  1.3059521 ]
    #  [ 0.17135063  0.18418191  0.05320966  0.45726374 -0.72364354]]
    
  3. p y t h o n \mathrm{python} python 这个单词的 i n d e x \mathrm{index} index 是0,对应的就是词典的第一行, p y t o r c h \mathrm{pytorch} pytorch 这个单词 i n d e x \mathrm{index} index 是1,对应的就是词典的第二行。

    print(f"python 这个词对应的词向量为: \n{embedded_words.data.numpy()[0,:]}")
    # python 这个词对应的词向量为:
    # [ 0.96313465 -1.4984448   1.0561345   0.43344542  1.3059521 ]
    
    print(f"pytorch 这个词对应的词向量为: \n{embedded_words.data.numpy()[1,:]}")
    # pytorch 这个词对应的词向量为:
    # [ 0.17135063  0.18418191  0.05320966  0.45726374 -0.72364354]
    

在这里插入图片描述

4. Embedding的词典是可以学习的

  • E m b e d d i n g \mathrm{Embedding} Embedding 产生的权重矩阵是可以学习的,意味着在模型的训练过程中,通过反向传播算法,嵌入向量会根据损失函数不断更新,以更好地表示数据中的语义关系。
  • 在很多情况下,尤其是当训练数据较少时,使用预训练的嵌入向量(如 W o r d 2 V e c \mathrm{Word2Vec} Word2Vec)可以显著提高模型的性能。这些预训练向量通常是在非常大的文本语料库上训练得到的,能够捕捉到丰富的语义信息。在 P y t o r c h \mathrm{Pytorch} Pytorch 中,你可以通过初始化 n n . E m b e d d i n g \mathrm{nn.Embedding} nn.Embedding 层的权重为这些预训练向量来使用它们。即使使用预训练向量,你也可以选择在训练过程中进一步微调(更新)这些向量,或者保持它们不变。

5. 例子完整代码

import torch
import torch.nn as nn
import numpy as np

embed = nn.Embedding(num_embeddings=10, embedding_dim=5)
embedding_matrix = embed.weight.data
print(f"nn Embedding 产生的词典是:\n {embedding_matrix.data}")
# nn Embedding 产生的词典是:
#  tensor([[ 0.9631, -1.4984,  1.0561,  0.4334,  1.3060],
#         [ 0.1714,  0.1842,  0.0532,  0.4573, -0.7236],
#         [ 0.4692,  1.2857,  0.5260, -1.0966, -1.6009],
#         [-0.7893, -0.2117,  0.0158,  1.1008,  0.9786],
#         [ 0.9095, -0.4467, -0.6501,  0.6469, -0.3829],
#         [-0.1534, -0.0128,  1.2285, -1.4347,  0.1968],
#         [-2.0171,  1.0805, -0.7189,  0.6184,  0.6858],
#         [-0.1328, -1.2482, -0.2517, -0.4750,  0.3215],
#         [-0.7670, -0.0462, -0.4849, -0.6647, -0.6340],
#         [ 0.7415, -2.2321,  1.3444,  0.3786, -0.2909]])


# 示例:将两个单词“python”、“pytorch”根据上面的词典编码为对应的词向量
words_to_embed = ['python', 'pytorch']
# 获取每个单词的index,很明显,'python'的index是0, 'pytorch'的index是1。
word_index = torch.LongTensor([0, 1])
# 将这两个index传入词典,就可以获取对应的词向量
embedded_words = embed(word_index)
print(f"编码后的词向量为:\n{embedded_words.data.numpy()}")
# 编码后的词向量为:
# [[ 0.96313465 -1.4984448   1.0561345   0.43344542  1.3059521 ]
#  [ 0.17135063  0.18418191  0.05320966  0.45726374 -0.72364354]]
print(f"python 这个词对应的词向量为: \n{embedded_words.data.numpy()[0,:]}")
# python 这个词对应的词向量为:
# [ 0.96313465 -1.4984448   1.0561345   0.43344542  1.3059521 ]
print(f"pytorch 这个词对应的词向量为: \n{embedded_words.data.numpy()[1,:]}")
# pytorch 这个词对应的词向量为:
# [ 0.17135063  0.18418191  0.05320966  0.45726374 -0.72364354]

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

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

相关文章

活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

流程图是一种通用的图形表示法,用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程,关注于任务的顺序执行。流程图强调顺序、分支和循环,适用于详细说明具体的处理步骤,图形符号相对基础和通用…

c++多线程基础

简介 c多线程基础需要掌握这三个标准库&#xff1a;std::thread, std::mutex, and std::async。 1. Hello, world #include <iostream> #include <thread>void hello() { std::cout << "Hello Concurrent World!\n"; }int main() {std::thread…

论文阅读笔记(AAAI 20)Order Matters

个人博客地址 注&#xff1a;部分内容参考自GPT生成的内容 论文笔记&#xff1a;Order Matters&#xff08;AAAI 20&#xff09; 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

android_systemServer进程启动流程

一&#xff0c;systemServer进程是被Zygote进程fork出来的&#xff0c;具体代码&#xff0c; 在startBootstrapServices、startCoreServices、startOtherServices、startApexServices中&#xff0c;对各类服务进行了启动&#xff0c;比如我们常见的ActivityManagerService、Pa…

【idea-sprongboot项目】在linux服务器上纯远程开发方式

继上一篇博客【idea-sprongboot项目】SSH连接云服务器进行远程开发-CSDN博客 目录 五、远程开发方式 2&#xff09;纯远程开发方式 步骤 五、远程开发方式 2&#xff09;纯远程开发方式 实现原理&#xff0c; 步骤 &#xff08;1&#xff09;首先&#xff0c;关闭当前正在…

【LeetCode刷题记录】98. 验证二叉搜索树

98 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例…

Rust 生命周期浅谈

1. 简述 Rust 中的每一个引用都有其 生命周期&#xff08;lifetime&#xff09;&#xff0c;也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的&#xff0c;正如大部分时候类型也是可以推断的一样。类似于当因为有多种可能类型的时候必须注明类型&#xff0c;…

MaxKB宝塔Docker安装并配置域名访问

准备 Linux系统 bt面板 默认环境LNMP随便装 服务器环境配置最好是4G&#xff0c; 占用硬盘存储大概1G 对于一些海外AI产品的对接需要使用香港或者海外的服务器 安装 在宝塔面板中打开SSH或者你本地使用SSH工具去链接服务器 运行docker命令 前提是放开服务器的8080端口 doc…

【深度学习基础(3)】初识神经网络之深度学习hello world

文章目录 一. 训练Keras中的MNIST数据集二. 工作流程1. 构建神经网络2. 准备图像数据3. 训练模型4. 利用模型进行预测5. (新数据上)评估模型精度 本节将首先给出一个神经网络示例&#xff0c;引出如下概念。了解完本节后&#xff0c;可以对神经网络在代码上的实现有一个整体的了…

智慧文旅展现文化新风貌,科技助力旅行品质升级:借助智慧技术,文旅产业焕发新生机,为旅行者带来更高品质的文化体验之旅

一、引言 在数字化、智能化的浪潮下&#xff0c;文旅产业正迎来前所未有的发展机遇。智慧文旅作为文旅产业与信息技术深度融合的产物&#xff0c;不仅为旅行者带来了全新的文化体验&#xff0c;也为文旅产业注入了新的活力。本文旨在探讨智慧文旅如何借助智慧技术展现文化新风…

R语言中,查看经安装的包,查看已经加载的包,查看特定包是否已经安装,安装包,更新包,卸载包

创建于&#xff1a;2024.5.4 R语言中&#xff0c;查看经安装的包&#xff0c;查看已经加载的包&#xff0c;查看特定包是否已经安装&#xff0c;安装包&#xff0c;更新包&#xff0c;卸载包 文章目录 1. 查看经安装的包2. 查看已经加载的包3. 查看特定包是否已经安装4. 安装包…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 1

以下摘录一些章节片段&#xff1a; 1. 概论 自动驾驶系统的认知中有一些模糊的地方&#xff0c;比如自动驾驶系统如何定义的问题&#xff0c;自动驾驶的研发为什么会有那么多的子模块&#xff0c;怎么才算自动驾驶落地等等。本章想先给读者一个概括介绍&#xff0c;了解自动驾…

18 内核开发-内核重点数据结构学习

课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中。 课程特点&#xff1a; 1. 入门级别&…

Java高阶私房菜:JVM性能优化案例及讲解

目录 核心思想 优化思考方向 压测环境准备 堆大小配置调优 调优前 调优后 分析结论 垃圾收集器配置调优 调优前 调优后 分析结论 JVM性能优化是一项复杂且耗时的工作&#xff0c;该环节没办法一蹴而就&#xff0c;它需要耐心雕琢&#xff0c;逐步优化至理想状态。“…

【Gateway远程开发】0.5GB of free space is necessary to run the IDE.

【Gateway远程开发】0.5GB of free space is necessary to run the IDE. 报错 0.5GB of free space is necessary to run the IDE. Make sure that there’s enough space in following paths: /root/.cache/JetBrains /root/.config/JetBrains 原因 下面两个路径的空间不…

WPF之绑定验证(错误模板使用)

1&#xff0c;前言&#xff1a; 默认情况下&#xff0c;WPF XAML 中使用的绑定并未开启绑定验证&#xff0c;这样导致用户在UI上对绑定的属性进行赋值时即使因不符合规范内部已抛出异常&#xff08;此情况仅限WPF中的数据绑定操作&#xff09;&#xff0c;也被程序默认忽略&…

Linux设置脚本任意位置执行

记得备份 &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 修改文件之后记得用 source 文件名 刷新 注意&#xff1a;刷新文件之后在当前窗口…

02.zabbix配置web界面

zabbix配置web界面 访问搭建好的地址&#xff1a; http://192.168.111.66/zabbix 检查配置都是正常&#xff0c;下一步 对应的信息&#xff0c;我设置的密码是&#xff1a;123456&#xff0c;下一步即可&#xff1b; 给服务器随意设置一个名字&#xff0c;下一步 检查数据…

022、Python+fastapi,第一个Python项目走向第22步:ubuntu 24.04 docker 安装mysql8集群、redis集群(三)

这次来安装mysql8了&#xff0c;以前安装不是docker安装&#xff0c;这个我也是第一次&#xff0c;人人都有第一次嚒 前言 前面的redis安装还是花了点时间的&#xff0c;主要是网上教程&#xff0c;各有各的好&#xff0c;大家千万别取其长处&#xff0c;个人觉得这个环境影响…

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息&#xff08;Message&#xff09;1.2 主题&#xff08;Topic&#xff09;1.3 标签&#xff08;Tag&#xff09;1.4 队列&#xff0…