TensorFlow 中的 global_step 是啥意思?
Posted
技术标签:
【中文标题】TensorFlow 中的 global_step 是啥意思?【英文标题】:What does global_step mean in Tensorflow?TensorFlow 中的 global_step 是什么意思? 【发布时间】:2017-05-01 04:54:41 【问题描述】:这是来自 TensorFlow 网站的 tutorial code,
谁能帮忙解释一下global_step
是什么意思?
我在 Tensorflow 网站上发现 global step is used count training steps,但我不太明白它的确切含义。
另外,设置global_step
时数字0是什么意思?
def training(loss,learning_rate):
tf.summary.scalar('loss',loss)
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
# Why 0 as the first parameter of the global_step tf.Variable?
global_step = tf.Variable(0, name='global_step',trainable=False)
train_op = optimizer.minimize(loss, global_step=global_step)
return train_op
根据 Tensorflow 文档 global_step:在变量更新后递增 1。这是否意味着在一次更新后global_step
变为 1?
【问题讨论】:
【参考方案1】:global_step
指的是图中看到的批次数。每次提供一个批次时,权重都会向最小化损失的方向更新。 global_step
只是跟踪到目前为止看到的批次数量。当它在minimize()
参数列表中传递时,变量增加一。看看optimizer.minimize()
。
您可以使用tf.train.global_step()
获取global_step
值。
实用方法tf.train.get_global_step
或tf.train.get_or_create_global_step
也很方便。
0
是此上下文中全局步骤的初始值。
【讨论】:
谢谢!在您提供的链接tf.train.global_step()
中,global_step_tensor
设置为 10。这是否意味着图中已经看到了 10 个批次?
@martianwars,我仍然不明白拥有 global_step 的意义。批处理的循环不是由python程序本身驱动的,所以python程序可以很容易地知道已经完成了多少批处理。为什么要费心让张量流来维护这样一个计数器?
优化器根据全局步骤 @xwk 改变它的常量
回答xwk的问题,我想如果你在100次迭代后停止训练,第二天恢复模型并再运行100次迭代。现在您的全局步长为 200,但第二次运行的局部迭代次数为 1 到 100,这是该运行的局部迭代次数,而不是全局迭代步长。所以全局步记录了迭代的总次数,可能用于改变学习率或其他超参数。
以 Wei Liu 的回答为基础,全局步骤对于跟踪分布式 TensorFlow 作业的进度也很有用。当工人同时看到批次时,需要有一种机制来跟踪看到的批次总数。这就是StopAtStepHook 的运作方式。【参考方案2】:
global_step
Variable
保存训练期间跨任务的总步数(每个步索引只会出现在单个任务上)。
global_step
创建的时间线帮助我们了解我们所处的位置
宏大的计划,从每个任务中分开。例如,可以在 Tensorboard 上针对global_step
绘制损失和准确率。
【讨论】:
【参考方案3】:在下面为您展示一个生动的示例:
代码:
train_op = tf.train.GradientDescentOptimizer(learning_rate=LEARNING_RATE).minimize(loss_tensor,global_step=tf.train.create_global_step())
with tf.Session() as sess:
...
tf.logging.log_every_n(tf.logging.INFO,"np.mean(loss_evl)= %f at step %d",100,np.mean(loss_evl),sess.run(tf.train.get_global_step()))
对应打印
INFO:tensorflow:np.mean(loss_evl)= 1.396970 at step 1
INFO:tensorflow:np.mean(loss_evl)= 1.221397 at step 101
INFO:tensorflow:np.mean(loss_evl)= 1.061688 at step 201
【讨论】:
【参考方案4】:有网络,例如GAN,可能需要两个(或更多)不同的步骤。使用 WGAN 规范训练 GAN 要求鉴别器(或批评器)D 上的步骤比生成器 G 上的步骤多。在这种情况下,声明不同的 global_steps 变量很有用。
例子:(G_loss
和D_loss
是生成器和判别器的损失)
G_global_step = tf.Variable(0, name='G_global_step', trainable=False)
D_global_step = tf.Variable(0, name='D_global_step', trainable=False)
minimizer = tf.train.RMSPropOptimizer(learning_rate=0.00005)
G_solver = minimizer.minimize(G_loss, var_list=params, global_step=G_global_step)
D_solver = minimizer.minimize(D_loss, var_list=params, global_step=D_global_step)
【讨论】:
以上是关于TensorFlow 中的 global_step 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
tensorflow API _ 3 (tf.train.polynomial_decay)