TensorFlow: alle Staaten aus einem RNN bekommen

Wie bekommst du alle verborgenen Staaten von tf.nn.rnn() oder tf.nn.dynamic_rnn() in TensorFlow? Die API gibt mir nur den letzten Zustand.

Die erste Alternative wäre, eine Schleife beim Erstellen eines Modells zu schreiben, das direkt auf RNNCell arbeitet. Allerdings ist die Anzahl der timesteps nicht für mich festgelegt und hängt von der eingehenden Charge ab.

Einige Optionen sind entweder, um eine GRU zu verwenden oder meine eigene RNNCell zu schreiben, die den Zustand mit der Ausgabe verkettet. Die frühere Wahl ist nicht allgemein genug und die letztere klingt zu hackig.

Eine andere Möglichkeit ist, so etwas wie die Antworten in dieser Frage zu tun, bekommen alle Variablen aus einem RNN. Allerdings bin ich mir nicht sicher, wie man die versteckten Zustände von anderen Variablen in einer Standardart hier trennen kann.

Gibt es einen schönen Weg, um alle verborgenen Staaten von einem RNN zu bekommen, während du noch die mitgelieferten RNN-APIs benutzt hast?

One Solution collect form web for “TensorFlow: alle Staaten aus einem RNN bekommen”

Ich habe bereits eine PR hier erstellt und es könnte Ihnen helfen, mit einfachen Fällen umzugehen

Lassen Sie mich kurz meine Umsetzung erklären, also können Sie Ihre eigene Version schreiben, wenn Sie brauchen. Der Hauptteil ist die Modifikation der _time_step Funktion:

 def _time_step(time, output_ta_t, state, *args): 

Die Parameter bleiben die gleichen, außer ein extra *args ist *args . Aber warum args ? Das ist, weil ich das übliche Verhalten von tensorflow unterstützen möchte. Sie können den endgültigen Zustand nur zurückgeben, indem Sie einfach den args Parameter ignorieren:

 if states_ta is not None: # If you want to return all states, set `args` to be `states_ta` loop_vars = (time, output_ta, state, states_ta) else: # If you want the final state only, ignore `args` loop_vars = (time, output_ta, state) 

Wie kann man das nutzen?

 if args: args = tuple( ta.write(time, out) for ta, out in zip(args[0], [new_state]) ) 

In der Tat ist dies nur eine Änderung der folgenden (Original-) Codes:

 output_ta_t = tuple( ta.write(time, out) for ta, out in zip(output_ta_t, output) ) 

Jetzt sollten die args alle Zustände enthalten, die du willst.

Nach all den oben beschriebenen Arbeiten kannst du die Staaten (oder den Endzustand) mit folgenden Codes abholen:

 _, output_final_ta, *state_info = control_flow_ops.while_loop( ... 

und

 if states_ta is not None: final_state, states_final_ta = state_info else: final_state, states_final_ta = state_info[0], None 

Obwohl ich es in komplizierten Fällen nicht getestet habe, sollte es unter "einfacher" Bedingung arbeiten ( hier sind meine Testfälle)

  • Wie fügt man Regelungen in TensorFlow hinzu?
  • Caffe Netzwerk immer sehr geringem Verlust, aber sehr schlechte Genauigkeit beim Testen
  • Geplante Probenahme in Tensorflow
  • Wie kann ich Datenschicht (HDF5) für Training und Test im gleichen Prototxt generieren?
  • Tiefes Lernen - eine Reihe von naiven Fragen über caffe
  • Mit einem vorprogrammierten Worteinbettung (word2vec oder Handschuh) in TensorFlow
  • TensorFlow ValueError: Kann den Wert der Form (64, 64, 3) nicht für den Tensor u'Placeholder: 0 ', der die Form' (?, 64, 64, 3) 'hat,
  • Extrahieren von Gewichten aus .caffemodel ohne caffe in Python installiert
  • Tensorflow Inception_Resnet_V2 Bild klassifizieren
  • Super hohe Kosten Tensorflow
  • Verstehen Tensorflow LSTM Modelle Eingabe?
  • Python ist die beste Programmiersprache der Welt.