2017-09-03 3 views
0

J'utilise tf.nn.dynamic_rnn pour faire tourner un LSTM en tensorflow. J'ai un tenseur de N vecteurs d'état initial et un tenseur de M = N * n entrées. Chaque série est composée de n éléments d'entrée, et je veux évaluer l'ensemble i-ième vecteurs d'entrée avec le vecteur d'état initial i-ème, comme indiqué ci-dessous:LSTM état initial pour chaque élément du lot en flux tensor

inputs[0:n], initial_states[0] 
inputs[n:2*n], initial_states[1] 
... 

Est-il possible de le faire avec appel unique tf.nn.dynamic_rnn et les tenseurs ci-dessus directement, ou dois-je recourir à une boucle pour chaque vecteur d'état initial et ses entrées correspondantes (résultant en len(initial_states) appels à tf.nn.dynamic_rnn)?

+1

N'est-ce pas un traitement par lots normal? Donc, votre [initial_state] initial (https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn) aurait une dimension de lot sur «N», et le RNN s'exécuterait pour des pas de 'n' sur ces lots . Vous avez juste besoin de remodeler 'inputs' pour être' [N, n] '. Ou aviez-vous quelque chose d'autre à l'esprit? –

+0

Je ne le savais pas, merci. S'il vous plaît fournir cette réponse dans une réponse afin que je puisse l'accepter. – npit

Répondre

1

(ajouter un peu de détails des commentaires sur la question)

Ce type de bien est batching pris en charge, et est généralement nécessaire pour obtenir de bonnes performances. Votre initial_state aura une dimension de lot sur N, et le RNN fonctionnera pour n étapes sur ces lots. Vous avez juste besoin de remodeler les entrées pour être [N, n, ...] (avec time_major=False, la valeur par défaut).

Cela devient plus compliqué lorsque vous avez des entrées de longueur variable qui doivent être groupées ensemble. Quelque chose comme SequenceQueueingStateSaver peut aider là.