pytorch的学习率调整策略
作者:互联网
测试一下CosineAnnealingLR策略
这种方法通过余弦函数周期性地对学习率进行调整,其参数参考博客
这次,对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