深度学习高阶篇—-学习率调度

高级深度学习—-学习率调度

交流学术思想,加入Q群 号:815783932

找到一个好的学习率非常重要。设置太高会导致训练发散,设置太低会收敛到最优解,但耗时长,更新慢。

1、幂调度

将学习率设置为迭代次数t的函数,公式如下:

其中初始学习率是η0,幂c一般设置为1,步骤s为超参数。根据迭代次数t可知,每一次epoch都会下降,下降为一开始迅速下降,最后越来越慢。
利用keras 实现 幂调度十分简单。

##幂调度
optimizer=keras.optimizers.SGD(learning_rate=0.001,decay=1e-4)

decay是超参数s的倒数,其中c默认为1。

2、指数调度


由上方公式可以看出,每经过s步将逐渐下降10倍,不同于幂调度,他是每次都降低10倍。

##指数调度
def exp_decay_fn(epoch):
    return 0.01*0.1**(epoch/20)

##若想使S 和初始化学习率 可以自己编写 则可写成下面编码方式
def exponential_decay(lr0,s):
    def exponential_decay_fn(epoch):
        return lr0*0.1**(epoch/20)
    return exponential_decay_fn

exponential_decay_fn=exponential_decay(lr0=0.001,s=20)

lr_scheduler=keras.callbacks.LearningRateScheduler(exponential_decay_fn)
history=model.fit(x_train,y_train,[...],callbacks=[lr_scheduler])

通过回调函数根据epoch 控制学习率的变化。

3、分段恒定调度(最常见最宜控制的)

##解决分段恒定调度 学习率
def priecewise_constant_fn(epoch):
    if epoch<5:
        return 0.01
    elif epoch<15:
        return 0.005
    else:
        return 0.001


lr_scheduler = keras.callbacks.LearningRateScheduler(priecewise_constant_fn)
history=model.fit(model_input, model_output, epochs=928, batch_size=5,callbacks=[lr_scheduler])


通过设定epoch数值的范围来控制,学习率参数的大小,这是我们做实验中最常见的一种方式。

4、性能调度(个人最常用的调度算法)

用下方回调函数时,其中factor=0.5,patience=5。表示每当联系5个轮次的最好验证损失还没有得到改善的时候,会将学习率乘以0.5。官方文档如下:https://tensorflow.google.cn/api_docs/python/tf/keras/callbacks/ReduceLROnPlateau

lr_scheduler = keras.callbacks.ReduceLROnPlateau(factor=0.5, patience=5)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年5月8日
下一篇 2022年5月8日

相关推荐