Я следую этому уроку здесь 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
x batch_max_len
. Каждый образец является предложением, и каждое предложение дополняется так, чтобы оно имело длину самого длинного предложения в пакете.
Файл
"/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, вызов
файл результата = 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 (вес, вход, padding_idx, scale_grad_by_freq, sparse) RuntimeError: индекс вне диапазона в
../aten/src/TH/generic/THTensorEvenMoreMath.cpp:193
Проблема в том, что вложение инициализируется с размерами, отличными от размеров моего пакетного массива? Мой batch_size
будет постоянным, но batch_max_len
будет меняться с каждой партией. Вот как это делается в учебнике.