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

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

交流学术思想,加入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)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普普通通研究生学代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值