Tensorflow中的global_step是什么意思?


88

这是TensorFlow网站上的教程代码

  1. 谁能帮忙解释什么global_step意思?

    我在Tensorflow网站上发现,全局步骤用于计数训练步骤,但我不太清楚其确切含义。

  2. 另外,设置时数字0是什么意思global_step

    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 doc global_step:在变量已更新后增加1。这是否意味着一次更新global_step变为1?

Answers:


109

global_step指图表中看到的批次数。每次提供一批时,权重都会朝着使损失最小化的方向进行更新。global_step只是跟踪到目前为止看到的批次数量。在minimize()参数列表中传递变量时,变量将增加一。看一看optimizer.minimize()

您可以global_step使用获取值tf.train.global_step()。实用的方法tf.train.get_global_step或也很方便tf.train.get_or_create_global_step

0 是在这种情况下全局步骤的初始值。


谢谢!在您提供的链接中tf.train.global_step(),将global_step_tensor设置为10。这是否意味着该图形已经看到10个批次?
加布里埃尔·楚

9
@martianwars,我仍然没有获得global_step的意义。并不是由python程序本身驱动的批处理的循环,因此python程序可以轻松地知道已经完成了多少个批处理。为什么要麻烦张量流来维持这样的反作用力呢?
victorx

1
优化程序会根据全局步骤@xwk更改其常量
martianwars

23
为了回答xwk的问题,我想如果您在100次迭代后停止训练,然后第二天恢复模型并再运行100次迭代。现在您的全局步骤是200,但是第二次运行的局部迭代数是1到100,这与该全局迭代步骤相对应。因此,全局步骤记录了迭代的总数,可用于更改学习率或其他超参数。
刘炜

6
为了基于刘炜的答案,全局步骤对于跟踪分布式TensorFlow作业的进度也很有用。当工人同时看到批次时,需要一种机制来跟踪看到的批次总数。例如,这就是StopAtStepHook的操作方式。
马洛·马雷克(Maro Marrec)

4

在下面显示一个生动的示例:

码:

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

3

所述global_step Variable横跨任务训练期间保持的步骤的总数(每个步骤指数将仅发生在单一任务)。

所创建的时间表global_step可帮助我们分别从每个任务中了解自己在宏伟计划中的位置。例如,可以global_step在Tensorboard上绘制损耗和精度。


1

有些网络(例如GAN)可能需要两个(或更多)不同的步骤。用WGAN规范训练GAN要求区分器(或批评者)D上的步骤比生成器G上执行的步骤更多。在这种情况下,声明不同的global_steps变量很有用。

例如:G_lossD_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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.