Über "tensorflow.initialize_all_variables ()"

8

Ich habe mich gefragt, was die Unterschiede zwischen den folgenden 2 Code-Stücken sind:

%Vor% %Vor%

Der einzige Unterschied ist die Reihenfolge von "x = x + 1" und "session.run (model)". Ich dachte, es würde einen großen Unterschied in der Ausgabe machen, da session.run (model) alle Variablen initialisiert. Die beiden Codeblöcke geben jedoch die gleichen Dinge aus ...

Der Code wurde aus einem Lernprogramm kopiert: Ссылка

    
Qihong 22.06.2016, 23:49
quelle

1 Antwort

11

Ja, es ist ein bisschen schwierig hier. Ein wichtiges Konzept von Tensorflow ist die Lazy Evaluation, dh ein Tensorflow-Graph von Knoten wird zuerst erstellt, und die Auswertung des Graphen findet nur bei session.run statt.

Für diese Codezeile x = x + 1 ist das x hier vom Typ Tensor, und das + hier ist das überladene tf.add, also erzeugt x = x + 1 tatsächlich den Graphen, es findet noch keine Berechnung statt; und bei jeder Iteration wird der Graph (in diesem Fall ein binärer Baum) mit einer weiteren Schicht (eine weitere verschachtelte Summe) hinzugefügt. session.run (model) initialisiert immer x auf 0, session.run (x) berechnet x basierend auf dem bis dahin in dieser Iteration konstruierten Graphen. Zum Beispiel wird in Iteration 4 x viermal um 1 addiert, weil das Diagramm bei dieser Iteration vier verschachtelte Summen (oder Ebenen) enthält.

Wenn das für Sie Sinn macht, denke ich, "beide Codes sind im Wesentlichen die gleichen" wird auch Sinn machen.

Hinweis: Genau genommen, in der ersten Iteration, ist das x auf der rechten Seite vom Typ Variable, aber das sind Details, nicht der Hauptpunkt, den ich versuche zu machen ...

    
Yao Zhang 23.06.2016, 00:42
quelle

Tags und Links