Индекс внедрения Pytorch вне диапазона - PullRequest
2 голосов
/ 06 мая 2019

Я следую этому уроку здесь 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 будет меняться с каждой партией. Вот как это делается в учебнике.

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Вы ошиблись.Исправьте их и повторите код:

  • 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, указывают форму выходного тензора этой конкретной операции, а не входные данные.

0 голосов
/ 06 мая 2019

Нашел ответ здесь https://discuss.pytorch.org/t/embeddings-index-out-of-range-error/12582

Я конвертирую слова в индексы, но у меня были индексы, основанные на общем количестве слов, а не vocab_size, который является меньшим набором наиболее часто встречающихся слов.

...