tf.train.get_global_step()的值与当前训练步数的区别

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


回答:

问题编辑后的更新

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

不会。优化器会负责递增,tf.train.get_global_step()只是获取当前存储全局步数的变量(如果之前已经定义了的话)。

并相应地影响学习率吗?

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

更新:一些澄清

在TensorFlow中,通常在Python中理解的“变量”(不是 tf.Variable())和张量(tf.Variable是一种张量)之间存在关键区别。

当你调用

global_step = tf.train.get_global_step()

(假设之前某处已经定义了一个全局步数),你会得到一个Tensor对象,而不是整数。

基本理念是将计算的构建阶段(你描述应用于数据的操作)和实际执行阶段(你输入数据并获得结果)分开。这通常会引起最初的混乱,但这是TensorFlow编程模型的一个关键点(至少在TensorFlow 2.0之前)。

如果你想获取global_step的当前值,你需要评估图。假设你已经定义了一个tf.Session(),你可以选择:

step_value = sess.run(global_step)

或者替代地:

step_value = global_step.eval(session=sess)

学习率调度内部会这样做。在每个步骤,它会获取全局步数的当前值,并根据给定的参数计算学习率。同样,优化器内部会在每个步骤更新当前的全局步数值,因此除非你需要该值用于日志记录/调试,否则你通常不会显式地评估global_step

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注