ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytorch的学习率调整策略

2022-09-14 11:00:16  阅读:221  来源: 互联网

标签:策略 optim list 余弦 学习 pytorch lr scheduler


测试一下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

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

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有