2016-06-03 13 views
4

Ich muss ein Programm schreiben, wo ein Teil der TensorFlow-Knoten weiterhin dort sein muss, um einige globale Informationen (hauptsächlich Variablen und Zusammenfassungen) zu speichern, während der andere Teil geändert/reorganisiert werden muss, während das Programm läuft.Wie Knoten aus TensorFlow-Grafik entfernen?

Der Weg, den ich jetzt mache, besteht darin, den gesamten Graph in jeder Iteration zu rekonstruieren. Aber dann muss ich diese Informationen in jeder Iteration manuell von/zu Prüfpunktdateien oder Nummernfeldern speichern und laden, was meinen Code sehr unordentlich und fehleranfällig macht.

Ich frage mich, ob es eine Möglichkeit gibt, einen Teil meines Berechnungsgraphen zu entfernen/ändern, anstatt den ganzen Graphen zurückzusetzen?

+1

Leider kann die Struktur von TensorFlow-Diagrammen nach der Erstellung nicht geändert werden. Attribute können bis zu einem gewissen Grad, aber das scheint hier nicht ausreichend. Es gibt Problemumgehungen, aber es ist schwer zu sagen, was in Ihrem Szenario funktionieren wird. Können Sie uns ein wenig mehr Informationen darüber geben, was Sie zu tun versuchen? – rdadolf

+0

Sicher, ich versuche ein rekursives neuronales Netzwerk zu implementieren und die Baumstruktur wird für verschiedene Samples unterschiedlich sein. –

+0

Ich frage mich, ob es möglich ist, es einzurichten, so dass alle möglichen Baumstrukturen in das Diagramm kodiert werden, und Sie können bedingte Anweisungen verwenden, um zu bestimmen, welche Kanten in jeder Iteration ausgewertet werden. – Aaron

Antwort

5

Das Ändern der Struktur von TensorFlow-Diagrammen ist nicht wirklich möglich. Insbesondere gibt es keine saubere Möglichkeit, Knoten aus einem Graphen zu entfernen. Daher ist es nicht praktisch, einen Untergraphen zu entfernen und einen anderen hinzuzufügen. (Ich habe es versucht, und es beinhaltet eine Operation an den Interna. Letztlich ist es viel Aufwand, als es wert ist, und Sie fragen nach Wartung Kopfschmerzen.)

Es gibt einige Problemumgehungen.

Ihre Rekonstruktion ist einer von ihnen. Sie scheinen diese Methode ziemlich gut im Griff zu haben, also werde ich nicht darüber nachdenken, aber zum Vorteil von irgendjemandem, der darauf stolpert, ist eine sehr ähnliche Methode eine gefilterte, tiefe Kopie des Graphen. Das heißt, Sie durchlaufen die Elemente und addieren sie unter bestimmten Bedingungen. Dies ist am sinnvollsten, wenn Ihnen der Graph gegeben wurde (d. H. Sie haben nicht die Funktionen, die ihn ursprünglich erstellt haben) oder wenn die Änderungen eher geringfügig sind. Sie zahlen immer noch den Preis für die Wiederherstellung der Grafik, aber manchmal kann das Laden und Speichern transparent sein. In Anbetracht Ihres Szenarios ist dies wahrscheinlich keine gute Übereinstimmung.

Eine weitere Option besteht darin, das Problem als eine Obermenge aller möglichen Diagramme neu zu bewerten, die Sie zu bewerten versuchen und die auf das Datenflussverhalten angewiesen sind. Mit anderen Worten, erstellen Sie ein Diagramm, das jeden Eingangstyp enthält, den Sie gerade speisen, und fragen Sie nur nach den benötigten Ausgängen. Gute Anzeichen dafür könnten sein: Ihr Netzwerk ist parametrisch (vielleicht erhöhen/verringern Sie nur die Breite oder die Ebenen), die Änderungen sind geringfügig (möglicherweise einschließlich/Eingeschlossene Eingaben) und Ihre Operationen können variable Eingaben verarbeiten (Reduzierungen über eine Dimension, zum Beispiel). In Ihrem Fall, wenn Sie nur eine kleine, endliche Anzahl von Baumstrukturen haben, könnte dies gut funktionieren. Sie müssen wahrscheinlich nur eine Aggregation oder Renormierung für Ihre globalen Informationen hinzufügen.

Eine dritte Option besteht darin, die Netzwerke als physisch aufgeteilt zu behandeln. Anstatt also an ein Netzwerk mit veränderbaren Komponenten zu denken, behandeln wir die Grenzen zwischen festen und wechselnden Teilen als Ein- und Ausgänge zweier getrennter Netzwerke. Dies macht einige Dinge schwieriger: Zum Beispiel Backprop über beide ist jetzt hässlich (was es klingt, könnte ein Problem für Sie sein). Aber wenn Sie das vermeiden können, dann können zwei Netzwerke ziemlich gut funktionieren. Am Ende fühlt es sich an, als würde man sich mit einer separaten Pretraining-Phase auseinandersetzen, mit der man schon sehr vertraut ist.

Die meisten dieser Problemumgehungen haben eine ziemlich begrenzte Auswahl an Problemen, für die sie arbeiten, daher können sie in Ihrem Fall nicht helfen. Das heißt, Sie müssen nicht alles oder nichts gehen. Wenn das Netzwerk teilweise geteilt wird oder ein Supergraph für einige Änderungen erstellt wird, kann es sein, dass Sie sich in einigen Fällen nur um das Speichern/Wiederherstellen kümmern müssen, was Ihre Probleme erleichtern könnte.

Hoffe, das hilft!

+0

Hallo, danke für deine Antwort. Woran ich gerade arbeite, ist eine NLP-Aufgabe, bei der die Baumstruktur durch den Syntaxbaum eines Satzes bestimmt wird, was bedeutet, dass die Möglichkeit von Baumstrukturen unbegrenzt ist, so dass die erste und zweite Methode nicht wirklich funktioniert, nicht wahr? Und nur für die Methode der Rekonstruktion habe ich mich gefragt, ob die zuvor erstellten Graphen richtig gesammelt werden. Vielen Dank –

Verwandte Themen