tensorflow深度学习学习率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow深度学习学习率相关的知识,希望对你有一定的参考价值。

为什么我用学习率递减,没有效果,loss值一直停留在某个值浮动,正确率也很低求大佬指点

参考技术A 说明优化到一个极小值了呗。
试试adam?追问

我之前用0.001的学习率训练过模型了,能达到95%,大概2000多轮,我想做成学习率自降的训练,想缩短训练次数,但是结果10000多轮还是没有达到收敛的效果。一般不是应该会更快的收敛吗

tensorflow学习率控制及调试

在深度学习中,学习率变化对模型收敛的结果影响很大,因此很多时候都需要控制学习率的变化。本文以tensorflow实现learning rate test为例,讲述学习率变化控制的方法,以及怎么调试。

一、learning rate test

学习率测试(learning rate test)是一个找到学习率变化的范围的测试,详情可以查看自 Adam 出现以来,深度学习优化器发生了什么变化

二、tensflow实现学习率测试

  • 控制学习率以线性,或者指数形式增长
        def lr_test(global_step,min_lr=1e-5, max_lr=1e1, steps_per_epoch=784, epochs=20, linear=False):

            if global_step is None:
                raise ValueError("global_step is required for cyclic_learning_rate.")
            learning_rate = ops.convert_to_tensor(min_lr, name="learning_rate")
            dtype = learning_rate.dtype
            global_step = math_ops.cast(global_step, dtype)
            total_iterations = tf.cast(steps_per_epoch * epochs, dtype)
            min_lr = tf.cast(min_lr, dtype)
            max_lr = tf.cast(max_lr, dtype)


            if linear:
                lr_mult = tf.cast(max_lr / min_lr / total_iterations, dtype)
            else:
                lr_mult = tf.cast((max_lr / min_lr) ** (1 / total_iterations), dtype)
            mult = lr_mult * global_step if linear else lr_mult ** global_step
            return min_lr * mult
  • 创建优化器时,改变学习率
            if config.optimizer == 'Adam':
                optimizer = tf.train.AdamOptimizer(
                    learning_rate = lr_test(global_step=self.global_step),
                    beta1 = config.beta1,
                    beta2 = config.beta2,
                    epsilon = config.epsilon
                    )
  • 创建优化过程
 opt_op = optimizer.minimize(self.total_loss,global_step=self.global_step)

三、查看学习率变化过程

  • 计算每一步更新时的学习率
    optimizer = tf.train.AdamOptimizer中有一个属性记录跌倒的学习率。
lr = 0.1
step_rate = 1000
decay = 0.95

global_step = tf.Variable(0, trainable=False)
increment_global_step = tf.assign(global_step, global_step + 1)
learning_rate = tf.train.exponential_decay(lr, global_step, step_rate, decay, staircase=True)

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate, epsilon=0.01)
trainer = optimizer.minimize(loss_function)

# Some code here

print('Learning rate: %f' % (sess.run(trainer ._lr)))
  • tensorboard 显示学习率的变化
    其他tensorbord代码没什么不同,就不粘出来了。
tf.summary.scalar("lr",self.optimizer._lr)
  • 学习率变化的结果

以上是关于tensorflow深度学习学习率的主要内容,如果未能解决你的问题,请参考以下文章

小白入门深度学习 | 第六篇:TensorFlow2 回调极速入门

tensorflow学习率控制及调试

tensorflow学习率控制及调试

小白入门深度学习 | 第六篇:TensorFlow2 回调极速入门

[吃药深度学习随笔] 学习率

Tensorflow 'nan' 损失和 '-inf' 权重,即使学习率为 0