pytorch嵌入索引超出范围

gar*_*y69 6 python nlp neural-network recurrent-neural-network pytorch

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

self.embedding = nn.Embedding(params['vocab_size'], params['embedding_dim'])
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

将批次传递给模型时,我收到此异常,就像model(train_batch) train_batch维度batch_sizex的 numpy 数组一样 batch_max_len。每个样本是一个句子,每个句子都被填充,使其具有批次中最长句子的长度。

文件 "/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”,第 493 行,通话中 结果 = self.forward(*input, **kwargs) 文件“/Users/liam_adams/Documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/modules/sparse.py”,第 117 行,在转发 self.norm_type, self.scale_grad_by_freq, self.sparse) 文件“/Users/liam_adams/Documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/functional.py”,第 1506 行,在嵌入返回 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会随着每批而改变。这就是它在教程中的完成方式。

gar*_*y69 5

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

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