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轮数值。

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

 

posted @ 2022-09-14 10:55  Anm半夏  阅读(436)  评论(0)    收藏  举报