Je suive ce tutoriel ici https://cs230-stanford.github.fr.pytorch-nlp.html . Là-bas, un modèle neural est créé, en utilisant nn.Module
, Avec une couche d'incorporation, qui est initialisée ici
self.embedding = nn.Embedding(params['vocab_size'], params['embedding_dim'])
vocab_size
Est le nombre total d'échantillons de formation, qui est 4000. embedding_dim
Est 50. La pièce correspondante de la méthode forward
est inférieure à
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
Je reçois cette exception lorsque vous passez un lot sur le modèle comme SO model(train_batch)
train_batch
Est une matrice numpie de dimension batch_size
X batch_max_len
. Chaque échantillon est une phrase et chaque phrase est rembourrée de sorte qu'elle ait la longueur de la phrase la plus longue du lot.
Fichier "/USERSERS/LIAM_ADAMS/DOCUMITS/CS512/RESEARCH_PROJECT/CUSTOM/MODEL.PY", Ligne 34, en avant S = Self.Embedding (s) # Dim: Batch_Size x Batch_max_len x Embedding_DIM Fichier "/ Utilisateurs/Liam_Adams/Documents/CS512/VENV_RESEARCH/LIB/PYTHON3.7/Paquets de site/TORCH/NN/MODULES/MODULE.PY ", LIGNE 493, IN Call Résultat = Self.Forward (* INPUT, ** KWARGS) Fichier "/USERSERS/LIAM_ADAMS/DOCUMITS/CS512/VENV_RESEARCH/LIB/PYTHON3.7/SITE-PACKAGES/TORCH/NN/MODULES/SPARSE.PY", ligne 117, en avant Self.norm_type, Self.cale_grad_by_freq, Self.spa.e) Fichier "/USers/liam_adams/documents/cs512/venv_research/lib/python3.7/site-packages/torch/nn/functional.py", ligne 1506, dans le retour Torch.embedding (poids, entrée, padding_idx, échelle_grad_by_freq, Sparse) RuntimeError: Index hors de portée à ../aten/src/th/generic/thtensorevenMoremath.cpp:193
Le problème est-il ici que l'intégration est initialisée avec différentes dimensions que celles de mon tableau de lots? Mon batch_size
Sera constant mais batch_max_len
Changera avec chaque lot. C'est comme ça que c'est fait dans le tutoriel.
taille d'intégration dans nn.embedding
devrait être max(input_data)
. Vérifiez vos types de données de l'INPUT_DATA, car cela doit être entier pour être déterministe.