2016-05-08 8 views
6

Für meinen Anwendungsfall TensorFlow muss ich ein neues Berechnungsdiagramm für jede zu bearbeitende Instanz erstellen. Dies führt dazu, dass die Speicheranforderungen aufgebläht werden.Alle bis auf wenige Knoten im TensorFlow-Diagramm löschen

Abgesehen von ein paar tf.Variables, die Modellparameter sind, möchte ich alle anderen Knoten löschen. Andere Leute mit ähnlichen Problemen haben tf.reset_default_graph() als nützlich gefunden, aber das würde die Modellparameter loswerden, die ich persistieren muss.

Was kann ich verwenden, um alle außer diesen Knoten zu löschen?

Edit: Die instanzspezifischen Berechnungen bedeutet eigentlich nur, dass ich viele neue Operationen hinzufügen. Ich glaube, diese Vorgänge sind der Grund für die Speicherprobleme.

UPDATE: Siehe die kürzlich tensorflow fach freigegeben (https://github.com/tensorflow/fold), die dynamische Konstruktion von Rechen Graphen ermöglicht.

+0

tf.reset_default_graph –

Antwort

10

Die tf.graph-Datenstruktur ist als Append-only Datenstruktur konzipiert. Es ist daher nicht möglich, vorhandene Knoten zu entfernen oder zu modifizieren. Normalerweise ist dies kein Problem, da nur der erforderliche Untergraph beim Ausführen einer Sitzung verarbeitet wird.

Sie können versuchen, die Variabels Ihres Graphen in eine neue Grafik zu kopieren und die alte zu löschen. So archivieren Sie diese einfach laufen:

old_graph = tf.get_default_graph() # Save the old graph for later iteration 
new_graph = tf.graph() # Create an empty graph 
new_graph.set_default() # Makes the new graph default 

Wenn Sie alle Knoten in der alten Graph Verwendung iterieren wollen:

for node in old_graph.get_operations(): 
    if node.type == 'Variable': 
     # read value of variable and copy it into new Graph 

Alternativ können Sie verwenden:

for node in old_graph.get_collection('trainable_variables'): 
    # iterates over all trainable Variabels 
    # read and create new variable 

auch einen Blick unter python/framework/ops.py : 1759, um mehr Möglichkeiten zur Manipulation von Knoten in Graphen zu sehen.

Aber bevor Sie mit tf.Graph herumspielen, würde ich dringend empfehlen zu prüfen, ob dies wirklich erforderlich ist. Normalerweise kann man versuchen, die Berechnung zu verallgemeinern und gemeinsame Variablen zu verwenden, um ein Diagramm zu erstellen, so dass jede Instanz, die Sie bearbeiten möchten, ein Unterdiagramm dieses Diagramms ist.

+0

Ich habe gerade festgestellt, dass der Grund für den Speicheraufruf die neuen Operationen sind, die für jede Berechnung hinzugefügt wurden. Wie reinige ich diese? – navari

Verwandte Themen