学习率
在梯度下降法中,都是给定的统一的学习率,整个优化过程中都以确定的步长进行更新, 在迭代优化的前期中,学习率较大,则前进的步长就会较长,这时便能以较快的速度进行梯度下降,而在迭代优化的后期,逐步减小学习率的值,减小步长,这样将有助于算法的收敛,更容易接近最优解。故而如何对学习率的更新成为了研究者的关注点。
在模型优化中,常用到的几种学习率衰减方法有:分段常数衰减、多项式衰减、指数衰减、自然指数衰减、余弦衰减、线性余弦衰减、噪声线性余弦衰减。
本文详细介绍分段常数衰减函数及其用法。
tf.train.piecewise_constant(x,boundaries,values,name)
指定间隔的分段常数.
参数:
x:0-D标量Tensor.
boundaries:边界,tensor或list.
values:指定定义区间的值.
name:操作的名称,默认为PiecewiseConstant.
分段常数衰减就是在定义好的区间上,分别设置不同的常数 值,作为学习率的初始值和后续衰减的取值.
具体用法,在此处只是截取我的代码一部分,仅用于说明分段常数衰减的用法。
# 指定学习率变化的轮数区间
boundaries=[300]
# 指定学习率变化值,注意,values要比boundaries多一个值
values=[1e-5,1e-6]
# 初始化global_step,并指明其为不可训练参数
global_step=tf.Variable(0,trainable=False)
# 学习率函数
learning_rate=tf.train.piecewise_constant(global_step, boundaries, values, name=None)
#优化器,注意加了global_step=global_step,用于同步变化
optimizer=tf.train.AdamOptimizer(learning_rate).minimize(model['loss'],global_step=global_step)
# 在运行时
_, step,loss,accuracy = sess.run([optimizer,global_step, 'loss'],
feed_dict={'x': input_data,'labels': labels})
你学废了吗?