关于学习率的调整

学习率的设置

学习率是决定模型好坏的一个关键因数。过大的学习率会导致在局部最优解附近活动,很难找到最优解;过小的学习率优会导致收敛速度太慢。
如何找到一个合适的学习率,一般来说我们可以自己根据模型的收敛程度去自己设置学习率,常用的学习率有0.1,0.01,0.001。除了我们手动去调节学习率,也可以使用指数衰减学习率(学习率随着训练的轮数而动态更新)。
学习指数衰减学习率,我们需要记住4个参数(base【初始值】,global_step【当前的训练轮数】是不可训练参数,decay【学习率衰减率】#在这里需要特别说明一下,防止像我这样的小白不太明白,指数衰减学习率的动态更新是一个是学习率不断减小下降的过程,训练的轮数越多,学习率就越小;batch_size【一次喂入的样本数】)

用tensorflow实现:

import tensorflow as tf
base=0.1
decay=0.99
rate_step=1#喂入多少轮batch_size后,更新一次学习率,一般设为:总样本数/batch_size

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

learning_rate=tf.train.exponential_decay(base,global_step,rate_step,decay,staircase=True)

w=tf.Variable(tf.constant(5,dtype=tf.float32))

loss=tf.square(w+1)

train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step)

with tf.Session() as sess:
    init=tf.global_variables_initializer()
    sess.run(init)
    for i in range(40):
        sess.run(train_step)
        learning_rate_val=sess.run(learning_rate)
        global_step_val=sess.run(global_step)
        w_val=sess.run(w)
        loss_val=sess.run(loss)
        print("After %s steps:global_step is %f,w is %f,learing_rate is %f ,loss is %f"%(i,global_step_val,w_val,learning_rate_val,loss_val))

猜你喜欢

转载自blog.csdn.net/hanrui4721960/article/details/80701849