其他分享
首页 > 其他分享> > pytorch的学习率调整策略

pytorch的学习率调整策略

作者:互联网

测试一下CosineAnnealingLR策略

这种方法通过余弦函数周期性地对学习率进行调整,其参数参考博客

Pytorch 调整学习率:torch.optim.lr_scheduler.CosineAnnealingLR和CosineAnnealingWarmRestarts_Kevin在成长的博客-CSDN博客

这次,对T_max进行了测试,其代表余弦函数的半个周期,即经过T_max个epoch,学习率达到余弦函数的最大或最小值。

此外还测试了一下scheduler.step()函数,其括号内参数设置代表当前调整的epoch轮数,如果设置为固定不变的数值,则学习率固定为余弦函数的某一个值。

测试代码如下:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision.models import resnet18
from matplotlib import pyplot as plt

def test_scheduler():
    model = resnet18(pretrained=True)
    optimizer = optim.SGD(model.parameters(), lr=0.05, momentum=0.9, weight_decay=1e-4)
    scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10)
    epochs = 30
    lr_list = list()
    for i in range(epochs):
        print(scheduler.get_last_lr())
        lr_list.append(scheduler.get_last_lr())
        scheduler.step()

    _, ax = plt.subplots()
    ax.set_title('learning rate curve')
    ax.scatter([i for i in range(len(lr_list))], lr_list)
    plt.show()


if __name__ == '__main__':
    test_scheduler()

首先测试了学习率变化,可以看出每10个epoch为余弦函数的半个周期变化,

若将scheduler的step内参数设置为1,则学习率固定为此时的第1轮数值。

总的来说,此学习率设置了学习率的最大值为初始化学习率,此后每次学习率的调整按照余弦函数进行调整,但其不会超过此上限。

 

标签:策略,optim,list,余弦,学习,pytorch,lr,scheduler
来源: https://www.cnblogs.com/lzqdeboke/p/16692271.html