torch.nn.Embedding理解

本文介绍了 PyTorch 中的 Embedding 层,它是一个用于存储词嵌入的简单查找表。文章解释了如何使用该层根据词汇索引获取对应的词向量,并讨论了其在自然语言处理任务中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pytorch(0.3.1)官网的解释是:一个保存了固定字典和大小的简单查找表。这个模块常用来保存词嵌入和用下标检索它们。模块的输入是一个下标的列表,输出是对应的词嵌入。

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)

个人理解:这是一个矩阵类,里面初始化了一个随机矩阵,矩阵的长是字典的大小,宽是用来表示字典中每个元素的属性向量,向量的维度根据你想要表示的元素的复杂度而定。类实例化之后可以根据字典中元素的下标来查找元素对应的向量。

输入下标0,输出就是embeds矩阵中第0行。

放代码:

调试过程的参数:

用途:用作自然语言处理中作用很大

而对于一个词,我们自己去想它的属性不是很困难吗,所以这个时候就可以交给神经网络了,我们只需要定义我们想要的维度,比如100,然后通过神经网络去学习它的每一个属性的大小,而我们并不用关心到底这个属性代表着什么,我们只需要知道词向量的夹角越小,表示他们之间的语义更加接近

参考网址:https://my.oschina.net/earnp/blog/1113896

http://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/

### PyTorch `torch.nn.Embedding` 功能与用法 #### 嵌入层的主要功能 `torch.nn.Embedding` 是一种用于查找表(lookup table)的层类,主要用于将离散的数据(如单词、字符或分类变量)转换为其对应的低维稠密向量表示。这种技术广泛应用于自然语言处理领域中的词嵌入表示以及任何涉及离散特征的任务中[^3]。 该层的核心作用是从输入的一组索引值出发,返回这些索引所对应于预定义大小矩阵中的行向量作为输出。通过这种方式,可以有效地减少高维度稀疏数据的空间复杂度,并提升模型的学习效率。 #### 参数说明 以下是 `torch.nn.Embedding` 的主要参数及其含义: - **num_embeddings**: 表示嵌入矩阵的总行数,即字典或类别总数。 - **embedding_dim**: 每个嵌入向量的维度,也就是每一行的长度。 - **padding_idx (可选)**: 如果指定,则此位置上的嵌入不会被更新,在训练过程中保持不变。 - **max_norm (可选)**: 若设置,每次向前传播时都会重新缩放超过 max_norm 范围的嵌入向量。 - **norm_type (默认为 2.)**: 当设置了 max_norm 后,用来计算范数的方法,默认采用 L2 范数。 - **scale_grad_by_freq (布尔型, 可选)**: 对于稀疏梯度下降优化器而言,如果启用则按频率调整权重更新步幅。 - **sparse (布尔型, 默认 False)**: 是否使用稀疏梯度来节省内存消耗;仅当 optimizer 支持 sparse gradients 才能生效。 #### 使用方法 创建一个 Embedding 层实例之后,可以通过传递整数张量给这个对象来进行前向运算操作。传入的是形状为 `(N,)`, `(N,d0,...dn)` 或者其他形式的 LongTensor 类型数据结构,其中 N 表示批量样本数量。而输出则是相同批次尺寸但最后一轴扩展至 embedding_dim 维的新张量。 #### 示例代码 以下是一个简单的例子展示如何构建和应用 `torch.nn.Embedding`: ```python import torch import torch.nn as nn # 定义超参 vocab_size = 10 # 字典大小/类别数目 embed_size = 3 # 嵌入空间维度 # 初始化Embeddingembedding_layer = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embed_size) # 创建一些假定的输入数据(假设batch size为2) input_tensor = torch.LongTensor([[1,2,4,5],[4,3,2,9]]) output_embedding = embedding_layer(input_tensor) print(output_embedding.shape) # 输出应为 [2, 4, 3], 即 batch * seq_len * embed_dim ``` 上述脚本展示了怎样初始化一个具有特定词汇规模和嵌入维度的 Embedding 层,并演示了其基本调用方式。注意这里生成了一个随机初始状态下的嵌入矩阵,实际项目里可能需要加载预先训练好的 GloVe 或 Word2Vec 来代替随机初始化部分。 --- 相关问题
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值