tf.train.get_global_step()的值和当前训练步骤之间的差异

时间:2018-09-17 07:32:02

标签: python tensorflow machine-learning

tf.train.get_global_step()是否返回当前训练步骤的值?如果不是,那么当前global_step与当前训练步骤有何不同?

这是参考以下代码:

optimizer=lambda: tf.train.FtrlOptimizer(
      learning_rate=tf.train.exponential_decay(
          learning_rate=0.1,
          global_step=tf.train.get_global_step(),
          decay_steps=10000000,
          decay_rate=0.96)))

tf.train.get_global_step()将在每个训练步骤中增加global_step并相应地影响learning_rate吗?或者更具体地说,global_step值是否与当前训练步长值相同,并相应地影响learning_rate

1 个答案:

答案 0 :(得分:0)

在问题编辑后编辑

  

tf.train.get_global_step()会在每个训练步骤中增加global_step吗?

不。优化器将处理增量,tf.train.get_global_step()仅使您获得定义为存储全局步长的当前变量(如果已定义)。

  

会相应影响学习率吗?

是的,学习率进度表将在内部获取当前全局步长的值并相应地调整LR。

更新:一些澄清

在TF中,通常在python中使用的“变量”(不是 tf.Variable())和张量(tf.Variable是张量)之间存在关键区别。

致电时

global_step = tf.train.get_global_step()

(假设已在某个地方预先定义了全局步骤),则会返回Tensor对象,而不是整数。

其基本思想是将计算的构造阶段与实际执行分开,在计算阶段中,您描述了应用于数据的操作,在实际执行中,您提供了数据并获得了结果。起初通常会引起混乱,但这是TF编程模型的关键(至少直到TF 2.0为止)。

如果要获取global_step的当前值,则需要评估图形。假设您已经定义了tf.Session(),则可以:

step_value = sess.run(global_step)

或者:

step_value = global_step.eval(session=sess)

这是从LR时间表内部完成的。在每个步骤中,它将获得全局步骤的当前值,并使用给定的参数从中计算出LR。同样,优化器将在内部负责在每个步骤中更新当前的全局步骤值,因此,除非您需要用于记录/调试的值,否则通常不会自己明确评估global_step