标签:策略 optim list 余弦 学习 pytorch lr scheduler
测试一下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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。