【问题标题】:Difference between value of tf.train.get_global_step() and current training steptf.train.get_global_step() 的值与当前训练步骤之间的差异
【发布时间】:2018-09-17 07:32:02
【问题描述】:

tf.train.get_global_step() 是否返回当前训练步的值?如果不是,那么 currentglobal_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

【问题讨论】:

    标签: python tensorflow machine-learning


    【解决方案1】:

    问题编辑后编辑

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

    没有。优化器将处理增量,tf.train.get_global_step() 只会为您获取定义的当前变量以存储全局步骤(如果已定义)。

    并相应地影响 learning_rate?

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

    更新:一些说明

    在 TF 中,python 中常用的“变量”(not 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

    【讨论】:

    • 那么如果当前的训练步长是50,那么global_step的值是否也会是50,这将由tf.train.get_global_step()返回给我?
    • 没有。在 ("classic", as in "non-eager") TF 中,图创建和执行之间存在关键区别。当您调用 tf.train.get_global_step 时,您将获得用于存储全局步骤的 tensor(如果尚未定义,则为 None)。在会话中评估之前,张量没有关联的值。
    • @PulahD.Dhandekar 查看我的编辑及其下方的更新
    • 非常感谢您的回答。我没有在我的代码中的任何地方定义global_step。有必要这样做吗?如果我没有定义它,tensorflow 是否将默认值分配给global_step?如果我需要最初定义global_step,应该如何理想地定义它?
    • 只需使用` tf.train.get_or_create_global_step`,它会为您定义一个以防万一
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多