【问题标题】:pytorch embedding index out of rangepytorch 嵌入索引超出范围
【发布时间】:2019-09-24 09:43:38
【问题描述】:

我在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 数组。每个样本是一个句子,每个句子都被填充,使其具有批处理中最长句子的长度。

文件 "/Users/liam_adams/Documents/cs512/research_project/custom/model.py", 第 34 行,向前 s = self.embedding(s) # dim: batch_size x batch_max_len x embedding_dim 文件 “/Users/liam_adams/Documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/modules/module.py”, 第 493 行,在 call 中 结果 = 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 行,在嵌入中 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 会随着每批而改变。这就是教程中的做法。

【问题讨论】:

    标签: python neural-network nlp pytorch recurrent-neural-network


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你做错了一些事情。请更正这些并重新运行您的代码:

      • 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 等注释的内容表示该特定操作的输出张量的形状,而不是输入。

      【讨论】:

      • 谢谢,问题是我的单词索引大于我的vocab_size
      • 我遇到了同样的问题,但我根本没有更改字典。你的词索引怎么比词汇量大?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2023-01-16
        • 2021-12-31
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        相关资源
        最近更新 更多