【发布时间】: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