gpt4 book ai didi

python - Tensorflow:global_step 不递增;因此 exponentialDecay 不起作用

转载 作者:太空狗 更新时间:2023-10-30 02:41:48 25 4
gpt4 key购买 nike

我正在尝试学习 Tensorflow,我想使用 Tensorflow 的 cifar10 教程框架并在 mnist 之上训练它(结合两个教程)。

在cifar10.py的train方法中:

cifar10.train(total_loss, global_step):
lr = tf.train.exponential_decay(INITIAL_LEARNING_RATE,
global_step,
100,
0.1,
staircase=True)
tf.scalar_summary('learning_rate', lr)
tf.scalar_summary('global_step', global_step)

global_step 被初始化并传入,global_step 确实在一步增加 1,学习率适当衰减源代码可以在 tensorflow 的 cifar10 教程中找到。

但是,当我尝试对修改后的 mnist.py 的训练方法代码执行相同操作时:

mnist.training(loss, batch_size, global_step):
# Decay the learning rate exponentially based on the number of steps.
lr = tf.train.exponential_decay(0.1,
global_step,
100,
0.1,
staircase=True)
tf.scalar_summary('learning_rate1', lr)
tf.scalar_summary('global_step1', global_step)

# Create the gradient descent optimizer with the given learning rate.
optimizer = tf.train.GradientDescentOptimizer(lr)
# Create a variable to track the global step.
global_step = tf.Variable(0, name='global_step', trainable=False)
# Use the optimizer to apply the gradients that minimize the loss
# (and also increment the global step counter) as a single training step.
train_op = optimizer.minimize(loss, global_step=global_step)
tf.scalar_summary('global_step2', global_step)
tf.scalar_summary('learning_rate2', lr)
return train_op

全局步骤初始化为(在 cifar10 和我的 mnist 文件中):

with tf.Graph().as_default(): 
global_step = tf.Variable(0, trainable=False)
...
# Build a Graph that trains the model with one batch of examples and
# updates the model parameters.
train_op = mnist10.training(loss, batch_size=100,
global_step=global_step)

这里,我记录了两次global step和learning rate的scalar_summary:learning_rate1 和 learning_rate2 相同且恒定为 0.1(初始学习率)。global_step1 在 2000 步中也恒定为 0。global_step2 每一步线性增加 1。

更详细的代码结构可以在以下位置找到: https://bitbucket.org/jackywang529/tesorflow-sandbox/src

我很困惑为什么会这样(在我的 global_step 的情况下,因为我认为一切都是象征性地设置的,所以一旦程序开始运行,无论我在哪里写摘要,全局步骤都应该递增) 我认为这就是为什么我的学习率是恒定的。当然,我可能犯了一些简单的错误,很乐意得到帮助/解释。

global_steps written before and after the minimize function is called

最佳答案

您正在将一个名为 global_step 的参数传递给 mnist.training,并且还在 mnist.training 中创建一个名为 global_step 的变量。用于跟踪 exponential_decay 的是传入的变量,但实际递增(通过传递给 optimizer.minimize)的是新创建的变量。只需从 mnist.training 中删除以下语句,事情就会正常进行:

global_step = tf.Variable(0, name='global_step', trainable=False)  

关于python - Tensorflow:global_step 不递增;因此 exponentialDecay 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38253700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com