pytorch 嵌入索引超出范围

pytorch embedding index out of range

我在此处学习本教程 https://cs230-stanford.github.io/pytorch-nlp.html。在那里创建了一个神经模型,使用nn.Module,带有一个嵌入层,在此处初始化

self.embedding = nn.Embedding(params['vocab_size'], params['embedding_dim'])

vocab_size为训练样本总数,为4000。embedding_dim为50。forward方法的相关部分如下

def forward(self, s):
        # apply the embedding layer that maps each token to its embedding
        s = self.embedding(s)   # dim: batch_size x batch_max_len x embedding_dim

像这样将批次传递给模型时出现此异常 model(train_batch) train_batch 是一个维度为 batch_sizexbatch_max_len 的 numpy 数组。每个样本都是一个句子,每个句子都被填充以使其具有批次中最长句子的长度。

File "/Users/liam_adams/Documents/cs512/research_project/custom/model.py", line 34, in forward s = self.embedding(s) # dim: batch_size x batch_max_len x embedding_dim File "/Users/liam_adams/Documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call result = self.forward(*input, **kwargs) File "/Users/liam_adams/Documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/modules/sparse.py", line 117, in forward self.norm_type, self.scale_grad_by_freq, self.sparse) File "/Users/liam_adams/Documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/functional.py", line 1506, in embedding return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse) RuntimeError: index out of range at ../aten/src/TH/generic/THTensorEvenMoreMath.cpp:193

这里的问题是嵌入的初始化维度与批处理数组的维度不同吗?我的 batch_size 将保持不变,但 batch_max_len 会随着每批次的变化而变化。这是教程中的做法。

你有些地方不对。请更正这些并重新运行您的代码:

  • params['vocab_size'] 是唯一标记的总数。所以,教程中应该是len(vocab)

  • params['embedding_dim'] 可以是 50100 或您选择的任何值。大多数人会使用 [50, 1000] 范围内的东西,包括两个极端。 Word2Vec 和 GloVe 都对单词使用 300 维嵌入。

  • self.embedding() 将接受任意批量大小。所以,没关系。顺便说一句,在教程中,诸如 # dim: batch_size x batch_max_len x embedding_dim 之类的注释表示该特定操作的输出张量的形状,而不是输入。

在这里找到答案https://discuss.pytorch.org/t/embeddings-index-out-of-range-error/12582

我正在将单词转换为索引,但我的索引是基于单词总数,而不是 vocab_size 这是最常用单词的较小集合。

nn.embedding 中的嵌入大小应为 max(input_data)。检查 input_data 的数据类型,因为这必须是整数才能确定。