2016-09-24 58 views

回答

12

很簡單的解決方案:

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

然後,當你想增加它,只是運行在當前tf.Sessionsess該運算。

step = sess.run(increment_global_step_op) 

置於step中的結果是增量後遞增變量的值。在這種情況下,遞增後的global_step的值。所以2

如果您使用這個for global_step像我一樣,運行它與您的training_op一起。

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

+1可訓練=假。請注意,分配方法可以由tf.assign_add(global_step,1)替代 – lmsasu

+0

我不明白的是global_step與我的優化程序有什麼關係?我是否必須明確地告訴優化器「global_step」變量是我的全局步驟還是這個工作是如何工作的? – thigi

5

遞增/遞減值是一種常見的操作,因此TF具有操作以簡化圖形創作:tf.assign_add()tf.assign_sub()。它們結合了兩個操作(tf.assign()tf.add/tf.sub)。

下面是使用的例子:

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) 

如果你比較在這個例子中,在你自己的例子的tensorboard圖,你會看到,有圖有節點的量較少。