113 votes

Quelle est la différence entre "caché" et "sortie" dans PyTorch LSTM?

Je vais avoir de la difficulté à comprendre la documentation de PyTorch du LSTM module (et aussi RNN et GRU, qui sont similaires). Concernant les sorties, il dit:

Sorties: sortie, (h_n, c_n)

  • de sortie (seq_len, lot, hidden_size * num_directions): tenseur contenant les caractéristiques de sortie (h_t) à partir de la dernière couche de la RNN, pour chaque t. Si une torche.nn.utils.rnn.PackedSequence a été donné comme l'entrée, la sortie sera également un des paniers de la séquence.
  • h_n (num_layers * num_directions, lot, hidden_size): tenseur contenant de l'état caché pour t=seq_len
  • c_n (num_layers * num_directions, lot, hidden_size): tenseur contenant l'état de la cellule pour t=seq_len

Il semble que les variables output et h_n à la fois donner les valeurs de l'état caché. N' h_n seulement de manière redondante fournir le dernier pas de temps qui est déjà inclus dans output, ou est-il quelque chose de plus que cela?

241voto

nnnmmm Points 2539

J'ai fait un schéma. Les noms de suivre les PyTorch docs, bien que j'ai renommé num_layers de w.

output se compose de tous les états cachés dans la dernière couche ("dernière" de profondeur-sage, pas le temps). (h_n, c_n) comprend les états cachés après la dernière timestep, t = n, de sorte que vous pourriez potentiellement de les introduire dans un autre LSTM.

LSTM diagram

Le lot de dimension n'est pas inclus.

4voto

prosti Points 4630

Cela dépend vraiment un modèle que vous utilisez et comment vous allez interpréter le modèle de l'. Le résultat peut être:

  • un seul LSTM cellules état caché
  • plusieurs LSTM cellule états cachés
  • tous les états cachés sorties

De sortie, n'est presque jamais interprété directement. Si l'entrée est codé il devrait y avoir un softmax couche de décoder les résultats.

Remarque: Dans le langage de modélisation d'états cachés sont utilisés pour définir la probabilité du mot suivant, p(wt+1|w1,...,wt) =softmax(Wht+b).

3voto

Jibin Mathew Points 1

L'état de sortie est le tenseur de tous les états cachés de chaque pas de temps dans le RNN (LSTM), et l'état caché renvoyé par le RNN (LSTM) est le dernier état caché depuis le dernier pas de temps de la séquence d'entrée. Vous pouvez vérifier cela en collectant tous les états cachés de chaque étape et en le comparant à l'état de sortie (à condition que vous n'utilisiez pas pack_padded_sequence).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X