nn.embedding()
时间: 2024-09-23 12:11:41 浏览: 37
`nn.Embedding()`是PyTorch库中的一个层,用于将输入的离散标识符(通常是单词ID)映射到连续的向量空间。这个层的主要目的是将文本序列转换为固定长度的密集向量,以便于神经网络处理。
**维度设置**:
- `nn.Embedding(num_embeddings, embedding_dim)`参数中,`num_embeddings`代表词汇表大小,即可能的不同词或标识符的数量,而`embedding_dim`(隐藏维度)定义了每个词向量的维数。将维度设置为此形式的原因是,每个词会有一个独立的嵌入向量,这些向量的维度控制着模型能够捕捉到的语义信息的复杂度。
**工作原理**:
- 输入通常是一个长序列的整数数组,比如 `[batch_size, sequence_length]` 形式,其中每个元素对应一个词汇表中的索引。
- 当调用`embedding(input)`时,它会对每个索引应用预训练的或随机初始化的权重矩阵(`Embedding.weight`),生成相应词向量。这个权重矩阵的形状是`(num_embeddings, embedding_dim)`。
- 返回的是一个二维张量,其形状为 `[batch_size, sequence_length, embedding_dim]`,每一行都是一个句子的词向量序列。
**示例**:
```python
import torch
import torch.nn as nn
# 创建一个嵌入层,9种可能的词(索引从0开始),每个词向量有3个维度
embedding = nn.Embedding(9, 3)
# 假设我们有两组输入,每组4个词的索引
input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 1]])
# 应用嵌入层
a = embedding(input)
print(a.shape) # 输出:(2, 4, 3),因为是两个样本,每个样本有4个词,每个词有3维向量
```
阅读全文