【问题标题】:What does global_step mean in Tensorflow?TensorFlow 中的 global_step 是什么意思?
【发布时间】:2017-05-01 04:54:41
【问题描述】:

这是来自 TensorFlow 网站的 tutorial code

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

    我在 Tensorflow 网站上发现 global step is used count training steps,但我不太明白它的确切含义。

  2. 另外,设置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?

【问题讨论】:

    标签: tensorflow deep-learning


    【解决方案1】:

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

    您可以使用tf.train.global_step() 获取global_step 值。 实用方法tf.train.get_global_steptf.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_stepVariable 保存训练期间跨任务的总步数(每个步索引只会出现在单个任务上)。

    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_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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-04
          • 2020-02-08
          • 2023-03-19
          • 1970-01-01
          相关资源
          最近更新 更多