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 回调极速入门