2016-09-24 6 views

Antwort

12

recht einfache Lösung:

global_step = tf.Variable(1, name='global_step', trainable=False, dtype=tf.int32) 
increment_global_step_op = tf.assign(global_step, global_step+1) 

Dann, wenn Sie es erhöhen möchten, führen nur, dass op unter dem aktuellen tf.Sessionsess.

step = sess.run(increment_global_step_op) 

Das in step platziert Ergebnis ist der Wert des inkrementierten Variablen nach dem Inkrement. In diesem Fall wird der Wert von global_step nach dem Inkrementieren erhöht. Also 2.

Wenn Sie dies für global_step wie mich verwenden, führen Sie es mit Ihrer training_op.

result = sess.run([out, increment_global_step_op], {x: [i]}) 
+1

+1 für trainierbar setzen = False. Beachten Sie, dass die assign-Methode durch tf.assign_add (global_step, 1) ersetzt werden kann. – lmsasu

+0

Was ich nicht verstehe ist, wie der global_step mit meinem Optimierer korreliert? Muss ich dem Optimierer explizit mitteilen, dass die Variable 'global_step' mein globaler Schritt ist oder wie funktioniert das? – thigi

5

Inkrementieren/Dekrementieren des Wertes ist ein üblicher Vorgang, so TF Operationen die Diagrammerstellung zu vereinfachen, hat: tf.assign_add() und tf.assign_sub(). Sie kombinieren zwei Operationen (tf.assign() und tf.add/tf.sub). Hier

ist das Beispiel für die Verwendung:

import tensorflow as tf 

x = tf.Variable(0, name='counter') 
inc = tf.assign_add(x, 1, name='increment') 

with tf.Session() as sess: 
    # writer = tf.summary.FileWriter('logs', sess.graph) 
    sess.run(tf.global_variables_initializer()) 
    for _ in xrange(5): 
     print sess.run(inc) 

, wenn Sie den tensorboard Graph in diesem Beispiel vergleichen und in Ihrem eigenen Beispiel, werden Sie sehen, dass der Graph weniger Menge von Knoten hat.

Verwandte Themen