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_size
xbatch_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']
可以是 50
或 100
或您选择的任何值。大多数人会使用 [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 的数据类型,因为这必须是整数才能确定。
我在此处学习本教程 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_size
xbatch_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']
可以是50
或100
或您选择的任何值。大多数人会使用[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 的数据类型,因为这必须是整数才能确定。