2017-03-22 6 views
0

betrachten Sie den Code:tensorflow Graph Ausführungsreihenfolge

#tensorflow graph 
input = tf.some_place_holder 
func1 = tf.some_function .....(input) 
func2 = tf.some_function .....(func1) 
.... 

#code 1 
res1, res2 = sess.run([ func1, func2 ],feed_dict_input) 

#code 2 
res1 = sess.run([ func1 ],feed_dict_input) 
res2 = sess.run([ func2 ],feed_dict_input) 

Wenn ich Code ausführen 2 wird die func1 zweimal laufen? d. h. func1 wird zuerst ausgeführt, um res1 zu erhalten, und erneut ausgeführt, um res2 zu erhalten.

Ist Tensorflow intelligent genug, um die Abhängigkeit func1 und func2 zu berechnen, so dass die Funktionen die Miniumzeit genannt werden?

Antwort

4

Aus Gründen der Konkretheit nehme ich an, dass func1 und func2 in Ihrem Beispiel tf.Tensor Objekte sind.

  • In „Code 1“, wird der Wert von func1 einmal berechnet werden: Der gleiche Wert wird für den Benutzer und verwendet zurückgegeben werden func2 zu berechnen. In "Code 2" wird der Wert func1 zweimal berechnet: einmal in jedem Aufruf an sess.run().

TensorFlow nicht zwischengespeichert Zwischen Tensor Werte zwischen den Aufrufen tf.Session.run(). Der Grund dafür ist einfach: Bei einer typischen Workload des neuronalen Netzwerks (Training oder Inferenz) werden die meisten Zwischenwerte zwischen den Läufen des Graphen ungültig, da sie eine Funktion der Eingabe (die von Schritt zu Schritt wechselt) und des aktuellen Zustands sind (Das ändert sich während des Trainings). Wenn Sie einen Wert für die spätere Verwendung speichern möchten, müssen Sie ihn explizit einer tf.Variable zuweisen oder in einem anderen statusbehafteten Objekt wie z. B. tf.FIFOQueue speichern.

+0

Hallo @mrry, wenn ich den Code 'res2, res1 = sess.run ([func2, func1], feed_dict_input)', wird der Wert von 'func1 'auch einmal berechnet? – liuyihe