2017-04-17 3 views
1

Ich bin rnn ähnlich wie dynamic_rnn von Tensorflow zur Verfügung gestellt. Ich habe versucht, den Code auf GitHub zu sehen, kann aber nicht verstehen, wie sie ihn implementiert haben. Ich möchte es von Grund auf neu erstellen, so dass ich rnn von innen anpassen kann. Wie geht das?Erstellen von dynamic_rnn von Grund auf in Tensorflow

Derzeit denke ich an eine abgeschnittene Zeitreihe als Tensor tf.scan() und finde den neuen versteckten Zustand für alle Zeitreihen. Verwenden Sie dann tf.map_fn, um die Ausgabe für die neuen gestapelten versteckten Variablen zu finden. Schließlich verwenden Sie tf.while_loop(), um den Fehler für jeden Tensor in der ersten Dimension der gestapelten Ausgabe zu finden und die Propagierung mit diesem Verlust durchzuführen.

Mein Anliegen wird der Graph dynamisch nach diesem Vorgang sein. Ich meine, sagen wir erst einmal, dass ich 5 Mal abgerollt habe und dann 4 Mal, dass die Grafik löscht, dass ein Knoten zuvor gerollt hat?

Funktioniert das?

Bitte führen.

Danke,

Antwort

0

RNNs sollte mit nur einer Schleife implementierbar sein (scan/map_fn/etc. Basieren alle auf while_loop mit einer oder mehrere TensorArray s), dem Zustand übergeht und berechnet einen Verlust in einem. Ein Vorteil dieser Konstrukte besteht darin, dass Ihr Diagramm eine feste Größe hat, die Anzahl der Iterationen jedoch variieren kann (oder sehr groß sein kann, ohne die Diagrammgröße zu erhöhen).

Die Iteration über Sequenzen variabler Länge ist jedoch normalerweise nicht ideal, um die Leistung zu maximieren. Um die SIMD-Befehle auf der CPU oder die Parallelität auf der GPU zu nutzen, ist es in der Regel erforderlich, mindestens eine Stapelverarbeitung durchzuführen. In diesem Fall empfiehlt es sich, die Sequenzen zu zerlegen und diese Segmente zusammenzufassen. Es gibt Werkzeuge wie SequenceQueueingStateSaver, mit denen Sie Stapel fester Größe aus vielen Sequenzen variabler Länge erzeugen können.

Verwandte Themen