2017-09-05 3 views
0

J'utilise d'abord L.LSTM, puis j'ai trouvé ce NStepLSTM, qui est une partie découverte du document tutoriel officiel. https://docs.chainer.org/en/stable/reference/generated/chainer.links.NStepLSTM.html?highlight=NstepPourquoi NStepLSTM ne possède-t-il pas la méthode reset_state?

  1. Pourquoi chainer.links.NStepLSTM ou chainer.links.NStepBiLSTM ont pas reset_state? comment réinitialiser_state?

  2. passe-t-il une liste de séquences (chacune est une chaîne de séquence? Une variable, par exemple un article contient plusieurs mots est une variable)? Est-ce que ce but de classe est de faire face à la séquence de longueur variable?

  3. pouvons-nous utiliser tronqué BPTT pour économiser de la mémoire dans chainer.links.NStepLSTM? comment

Répondre

0

1. NStepLSTM obtient un lot de séquences et retourne un lot de séquences de sortie, bien que LSTM obtient un lot de mots. Vous n'avez pas besoin d'utiliser for-loop pour utiliser NStepLSTM. NStepLSTM utilise cuDNN, c'est-à-dire une bibliothèque fournie par NVIDIA, et est très rapide. NStepLSTM n'a pas d'état. Si vous voulez enchaîner NStepLSTMs, utilisez les sorties de NStepLSTM. Voir l'exemple seq2seq: https://github.com/chainer/chainer/blob/master/examples/seq2seq/seq2seq.py

2. Oui. Il gots tels qu'un lot de séquences de vecteurs embed créés à partir de phrases. Vous pouvez utiliser des séquences de différentes longueurs. Voir l'exemple seq2seq. Notez que L.NStepLSTM peut obtenir une séquence de phrases, mais F.NStepLSTM peut obtenir des séquences transposées. Je veux dire qu'il peut obtenir une séquence de lots de mots. En fait L.NStepLSTM appelle F.transpose_sequences et F.NStepLSTM dans son implémentation.

3. Désolé, c'est difficile. Comme je l'ai dit, NStepLSTM est une enveloppe de la bibliothèque RNN de cuDNN. Elle ne supporte pas BPTT. Bien sûr, vous pouvez séparer les phrases et appeler NStepLSTM deux fois.

+0

Vous voulez dire que je n'ai pas besoin d'écrire le programme de mise à jour BPTT lorsque j'utilise NStepLSTM? Je dois implémenter une situation où la sortie de NStepLSTM de chaque timestep sera concaténée, et puis nourrir l'entrée de la couche suivante (la couche après NStepLSTM emploiera tous les pas de temps de NStepLSTM), Dans ce cas, Comment écrire BPTT updater? Ou vous voulez dire que je n'ai pas besoin d'écrire explicitement BPTT updater? – machen

+0

fait l'entrée de NStepLSTM cette liste de variable: entre chaque variable à l'intérieur de cette liste doit avoir une corrélation temporelle ??? – machen

+0

Si je ne veux utiliser que le dernier pas de temps pour calculer la perte, parce que NStepLSTM renvoie 3 variables, dois-je utiliser le dernier ou le premier? – machen