nn.embedding维度
时间: 2025-01-04 14:33:56 浏览: 6
### PyTorch `nn.Embedding` 的维度参数及使用方法
#### 词典大小 (`num_embeddings`)
`num_embeddings` 表示词典的大小,即索引的总数。这决定了可以嵌入多少个不同的单词或标记[^2]。
例如,在一个有 20 个不同单词的小型词汇表中:
```python
import torch
from torch import nn
vocab_size = 20 # 即 num_embeddings
embedding_layer = nn.Embedding(vocab_size, embedding_dim=5)
```
#### 嵌入向量维度 (`embedding_dim`)
`embedding_dim` 定义了每个嵌入向量的维度。这个值越小,模型可能丢失的信息越多;越大则可能导致过拟合并增加计算成本。
对于上述例子中的五维向量:
```python
word_indices = torch.tensor([0, 1, 2]) # 输入三个词语的位置编号
embedded_vectors = embedding_layer(word_indices)
print(embedded_vectors.shape) # 输出应为 (3L, 5L),其中 L 表明这是 Long 类型张量
```
这段代码会创建一个形状为 `(3, 5)` 的二维张量,每一行代表输入列表里相应位置上的单词所对应的嵌入向量[^3]。
#### 可选参数
除了必填项外还有几个有用的选项:
- **sparse**: 如果设置为 `True` 则允许更高效的梯度更新方式——仅针对非零元素做优化操作。
- **padding_idx**: 设定某个特定索引作为填充符,默认情况下所有未指定的索引都会被随机初始化[^4]。
#### 实际应用案例
考虑如下场景:假设有一个包含两个单词 "python" 和 "pytorch" 的小型词汇表,并希望获取它们各自的嵌入表示形式:
```python
# 初始化 Embedding 层,假设有两词组成的极简词汇表
minimal_vocab_embedding = nn.Embedding(num_embeddings=2, embedding_dim=5)
# 获取这两个词的索引
indices_tensor = torch.LongTensor([0, 1])
# 计算得到相应的嵌入矩阵
resulting_embeddings = minimal_vocab_embedding(indices_tensor)
for idx, word_vector in enumerate(resulting_embeddings):
print(f"{['python', 'pytorch'][idx]} 对应的词向量为:\n {word_vector.detach().numpy()}")
```
此段脚本将会打印出 `"python"` 和 `"pytorch"` 各自关联的五维浮点数数组[^1]。
阅读全文