Ich habe gerade angefangen mit TensorFlow zu spielen und ich versuche eine sehr einfache RNN zu implementieren. Die RNN hat x
als Eingabe, y
als Ausgabe und besteht aus nur einer einzigen Schicht, die x
und ihre vorherige Ausgabe als Eingabe dauert. Hier ist ein Bild von der Art der Sache, die ich im Sinne habe:Wie man eine einfache RNN mit einem Zyklus in der Grafik in TensorFlow baut?
Das Problem ist, ich kann nicht sehen, jede Art und Weise durch die TensorFlow API ein Diagramm mit einem Zyklus darin zu konstruieren. Immer wenn ich einen Tensor definiere, muss ich spezifizieren, was seine Eingaben sind, was bedeutet, dass ich seine Eingaben bereits definiert haben muss. Es gibt also ein Henne-und-Ei-Problem.
Ich weiß nicht einmal, ob es sinnvoll ist, einen Graphen mit einem Zyklus zu definieren (Was wird zuerst berechnet? Müsste ich einen Anfangswert des Softmax-Knotens definieren?). Ich spielte mit der Idee, eine Variable zu verwenden, um die vorherige Ausgabe darzustellen, und dann manuell den Wert y
zu nehmen und ihn jedes Mal nach dem Durchlaufen einer Trainingsprobe in der Variablen zu speichern. Aber das wäre sehr langsam, es sei denn, es gibt eine Möglichkeit, diese Prozedur im Diagramm selbst darzustellen (?).
Ich weiß, dass die TensorFlow-Tutorials Beispielimplementierungen von RNNs zeigen, aber sie betrügen und ziehen ein LSTM-Modul aus der Bibliothek heraus, in der sich bereits der Zyklus befindet. Insgesamt sind die Tutorials gut dafür geeignet, bestimmte Dinge zu bauen, aber sie könnten besser erklären, wie dieses Biest wirklich funktioniert.
Also, TensorFlow-Experten, gibt es eine Möglichkeit, dieses Ding zu bauen? Wie würde ich es machen?
Ihre Variable Idee scheint wie ein Weg zu gehen, sollte nicht langsam sein, wenn Sie TensorFlow Variablen/assign ops verwenden –
Aber ich würde 'sess.run (y_prev.assign (y))' nicht aufrufen und ausführen die Proben durch eins nach dem anderen? Oder meinst du, ich sollte das mit der von @Ishamael beschriebenen Abrolltaktik kombinieren? – Shum