2015-12-12 11 views
14

TensorFlow-Diagramm wird normalerweise schrittweise von Eingängen zu Ausgängen aufgebaut und dann ausgeführt. Mit Blick auf den Python-Code sind die Eingabelisten von Operationen unveränderlich, was darauf hindeutet, dass die Eingaben nicht modifiziert werden sollten. Bedeutet das, dass es keine Möglichkeit gibt, ein vorhandenes Diagramm zu aktualisieren/zu modifizieren?Kann ein vorhandenes TensorFlow-Berechnungsdiagramm geändert werden?

Antwort

16

Die TensorFlow tf.Graph-Klasse ist eine append-only Datenstruktur, was bedeutet, dass Sie Knoten des Graphen, nachdem ein Teil des Graphen Ausführung hinzufügen können, aber Sie können vorhandene Knoten nicht entfernen oder ändern. Da TensorFlow beim Aufruf von Session.run() nur den erforderlichen Untergraphen ausführt, entstehen für die redundanten Knoten im Diagramm keine Kosten für die Ausführungszeit (obwohl sie weiterhin Speicher belegen).

alle Knoten des Graphen zu entfernen, eine Sitzung mit einem neuen Diagramm erstellen:

with tf.Graph().as_default(): # Create a new graph, and make it the default. 
    with tf.Session() as sess: # `sess` will use the new, currently empty, graph. 
    # Build graph and execute nodes in here. 
+3

"obwohl sie weiterhin Speicher verbrauchen werden" - wird dieser Speicher freigegeben, wenn die Sitzung von der Python-Laufzeit durch Garbage Collection erfasst wird? –

5

Ja, tf.Graph bauen sind in einer Append-only Mode als @mrry es ausdrückt.

Aber es gibt Abhilfe:

Konzeptionell können Sie ein vorhandenes Diagramm ändern, indem es das Klonen und die Änderungen auf dem Weg benötigt auszuführen. Ab Version 1.1 bietet Tensorflow ein Modul namens tf.contrib.graph_editor, das die obige Idee als eine Reihe von praktischen Funktionen implementiert.

+6

Schade, dass die Dokumentation in Bezug auf diese Methoden schlecht ist –

Verwandte Themen