【深度学习模型训练技巧】学习率--warm-up学习率策略

4 篇文章 0 订阅

warm-up学习率调整策略

模型在刚开始训练的时候比较不稳定的,刚开始的学习率应当设置得很低很低,这样可以保证网络能够具有良好的收敛性。但是较低的学习率会使得训练过程变得非常缓慢,因此采用较低学习率逐渐增大至较高学习率的方式实现网络训练的“热身”阶段,称为 warmup stage。
但是如果要使得网络训练的 loss 最小,那么一直使用较高学习率是不合适的,因为它会使得权重的梯度一直来回震荡,很难使训练的损失值达到全局最低谷。因此需要在经过一些steps之后学习率再慢慢变小。
之前训练模型很不容易收敛,模型总是有很大的震荡,各种调参都不太好使,后来用warm-up试了一下,收敛得很好,所以在这边记录一下。模型比较大、数据集比较小、不易训练的都可以尝试一下。

未使用warm-up
warm-up策略

    if p['scheduler'] == 'warm_up':
        warmup_epoch = 5
        if warmup_epoch and epoch<warmup_epoch:
            warmup_percent_done = epoch / warmup_epoch
            # gradual warmup_lr
            warmup_learning_rate = init_lr * warmup_percent_done
            lr = warmup_learning_rate
        else:
            lambd = pow(1 - (epoch / p['epochs']), 0.9)
            lr = lr * lambd

直接加入这一段即可,然后在配置中选择‘warm-up’策略。
其他策略也使用过,但模型震荡比较厉害。

    if p['scheduler'] == 'step':
        steps = np.sum(epoch > np.array(p['scheduler_kwargs']['lr_decay_epochs']))
        if steps > 0:
            lr = lr * (p['scheduler_kwargs']['lr_decay_rate'] ** steps)

    elif p['scheduler'] == 'poly':
        lambd = pow(1-(epoch/p['epochs']), 0.9)
        lr = lr * lambd
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值