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
?
答案 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
。