学习率的设置
学习率是决定模型好坏的一个关键因数。过大的学习率会导致在局部最优解附近活动,很难找到最优解;过小的学习率优会导致收敛速度太慢。
如何找到一个合适的学习率,一般来说我们可以自己根据模型的收敛程度去自己设置学习率,常用的学习率有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))