gamma分布 pytorch_Pytorch中的学习率衰减及其用法

本文介绍了Pytorch中几种常用的学习率衰减方法,包括StepLR、MultiStepLR、ExponentialLR、CosineAnnealingLR、ReduceLROnPlateau和LambdaLR。详细阐述了每种策略的工作原理和使用方法,帮助读者理解如何在神经网络训练中有效地调整学习率以优化模型性能。
摘要由CSDN通过智能技术生成

学习率衰减是一个非常有效的炼丹技巧之一,在神经网络的训练过程中,当accuracy出现震荡或loss不再下降时,进行适当的学习率衰减是一个行之有效的手段,很多时候能明显提高accuracy。

Pytorch中有两种学习率调整(衰减)方法:

使用库函数进行调整;

手动调整。

1. 使用库函数进行调整:

Pytorch学习率调整策略通过 torch.optim.lr_sheduler 接口实现。pytorch提供的学习率调整策略分为三大类,分别是:

(1)有序调整:等间隔调整(Step),多间隔调整(MultiStep),指数衰减(Exponential),余弦退火(CosineAnnealing);

(2)自适应调整:依训练状况伺机而变,通过监测某个指标的变化情况(loss、accuracy),当该指标不怎么变化时,就是调整学习率的时机(ReduceLROnPlateau);

(3)自定义调整:通过自定义关于epoch的lambda函数调整学习率(LambdaLR)。

在每个epoch的训练中,使用scheduler.step()语句进行学习率更新,此方法类似于optimizer.step()更新模型参数,即一次epoch对应一次scheduler.step()。但在mini-batch训练中,每个mini-bitch对应一个optimizer.step()。即用法如下:

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)

def train(...):

for i, data in enumerate(train_loader):

......

y_ = model(x)

loss = criterion(y_,y)

loss.backward()

optimizer.step()

......

for epoch in range(epochs):

train(...)

test(...)

scheduler.step()

(1) 等间隔调整学习率 StepLR

torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

每训练step_size个epoch,学习率调整为lr=lr*gamma.

以下内容中都将epoch和step对等,因为每个epoch中只进行一次scheduler.step(),实则该step指scheduler.step()中的step, 即step_size指scheduler.step()进行的次数。

参数:

optimizer: 神经网络训练中使用的优化器,如optimizer=torch.optim.SGD(...)

step_size(int): 学习率下降间隔数,单位是epoch,而不是iteration.

gamma(float): 学习率调整倍数,默认为0.1

last_epoch(int): 上一个epoch数,这个变量用来指示学习率是否需要调整。当last_epoch符合设定的间隔时,就会对学习率进行调整;当为-1时,学习率设置为初始值。

26a7dbc15246

等间隔调整学习率:step_size=30, gamma=0.1

(2) 多间隔调整学习率 MultiStepLR

跟(1)类似,但学习率调整的间隔并不是相等的,如epoch=10时调整一次,epoch=30时调整一次,epoch=80时调整一次…

torch.optim.lr_sheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

参数:

milestone(list): 一个列表参数,表示多个学习率需要调整的epoch值,如milestones=[10, 30, 80

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值