2016-06-20 8 views
2

In Tensorflow, welche Anweisungen innerhalb eines Diagrammdefinitionsblocks werden nur ausgeführt, um den Graphen zu erstellen, der während des Trainings ausgeführt wird? Zum Beispiel:Tensorflow: Welche Graph-Anweisungen werden ausgeführt, nachdem der Graph erstellt wurde?

with tf.Graph().as_default(): 
    weightsLayer1 = tf.Variable(tf.truncated_normal([nInputUnits, nOutputUnits])) 
    weightsLayer1 = tf.div(weightsLayer1, tf.sqrt(tf.to_float(nInputUnits))) 
    biasesLayer1 = tf.Variable(tf.zeros([nUnitsHiddenLayer1])) 
    layer1output = tf.tanh(tf.matmul(images_placeholder, weightsLayer1) + biasesLayer1) 

Intuitiv, die Linien definierten weightsLayer1 und biasesLayer1 Ich gehe davon aus, wenn beim Start nur dann ausgeführt werden, da sie Gewichtungen und Bias initialisieren. Allerdings nehme ich an, dass die Linienberechnung layer1output bei jedem Trainingsschritt ausgeführt wird, da layer1output stromabwärts verwendet wird, um Verluste zu berechnen, die vom Optimierer minimiert werden. Also, wie kann Tensorflow während des Trainings wissen, dass nur die letzte Zeile und nicht die vorherigen ausgeführt werden (was die Gewichte und Verzerrungen neu initialisiert)?

+0

Aus meinem Verständnis werden alle Ihre obigen Aussagen verwendet, um den Graphen zu erstellen und während des Trainings werden nur die Wege zum Zug ausgeführt. Die Initialisierung erfolgt nur einmal - das bedeutet, dass Ihre zweite Anweisung tf.div auch zur Zeit des Zuges ausgeführt wird. – shekkizh

Antwort

2

Sie als Benutzer sind eigentlich erzählen Tensorflow welche Operationen zu laufen. Während des Trainings teilen Sie in der Regel Tensorflow mit, dass Operationen ausgeführt werden, die von einem Optimierer bereitgestellt werden. Das sieht etwa so aus:

opt = tf.train.GradientDescentOptimizer(0.01) 
train_step = opt.minimize(loss) # 
for i in range(100): 
    sess.run(train_step, feed_dict=...) 

Aufruf opt.minimize der Berechnung fügt Graphen, die die Steigungen w.r.t. die trainierbaren Variablen sowie Operationen, die die Variablen mithilfe der Gradienten aktualisieren. train_step ist in der Tat diese Update-Operationen gruppiert mit tf.group. Wenn Sie (der Benutzer) train_step ausführen, ermittelt Tensorflow, welche Teile des Berechnungsgraphen ausgeführt werden müssen, um diese gewünschten Operationen auszuführen.

Wenn Sie etwas wie sess.run(fetches=loss, feed_dict=...) tun, bitten Sie Tensorflow, alle Operationen im Diagramm auszuführen, die zum Berechnen von loss erforderlich sind.

Schließlich werden Initialisierungsoperationen wie die in weightsLayer1 = tf.Variable(tf.truncated_normal([nInputUnits, nOutputUnits])) normalerweise von sess.run(tf.initialize_all_variables()) ausgeführt.

Edit: Nach dem erneuten Lesen Ihrer Frage möchte ich über einen Aspekt klarer sein. Keine Operationen werden tatsächlich von der Grafik Definition Code ausgeführt, die Sie zur Verfügung gestellt. Tensorflow-Operationen werden genau dann ausgeführt, wenn Sie eine Sitzung starten und die Ausführung von Teilen Ihres Graphen anfordern. Wie oben erwähnt, schließt dies die Initialisierungsoperationen ein.

+0

Danke. Um zu bestätigen: Tensorflow wird BEIDE der beiden Zeilen ausführen, die 'WeightsLayer1' nur einmal initialisieren (was meine Absicht ist), oder wird die zweite Zeile (' weightsLayer1 = tf.div (weightsLayer1, tf.sqrt (tf. to_float (nInputUnits))) 'auch zur Trainingszeit erneut ausgeführt werden? –

+0

Aha. Ich glaube, der Trick besteht darin, dass die zweite Zeile, die' weightsLayer1 'berechnet, nicht Teil des Anfangswerts ist, der an den' tf.Variable'-Konstruktor übergeben wird , so wird es zur Zeit des Zuges neu berechnet, richtig? –

+0

Korrekt. Die Zeile '' weightsLayer1 = tf.div (weightsLayer1, tf.sqrt (tf.to_float (nInputUnits))) '' ist keine Initialisierung der Variablen '' WeightsLayer1'', berechnet aber einen neuen Tensor, den Sie auch den Tensor '' weightsLayer1' 'nennen, aber das ist nur ein Name, den Sie an das Tensor - Objekt binden, die entsprechende Operation wird immer ausgeführt, wenn Sie a ausführen Teil des Graphen, der es erfordert. – lballes

Verwandte Themen