关于动态调整学习率

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import LambdaLR

initial_lr = 0.1

class model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)

    def forward(self, x):
        pass

net_1 = model()

optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = LambdaLR(optimizer_1, lr_lambda=lambda epoch: 1/(epoch+1))

print("初始化的学习率:", optimizer_1.defaults['lr'])

for epoch in range(1, 11):
    # train

    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step()

初始化的学习率: 0.1
第1个epoch的学习率:0.100000
第2个epoch的学习率:0.050000
第3个epoch的学习率:0.033333
第4个epoch的学习率:0.025000
第5个epoch的学习率:0.020000
第6个epoch的学习率:0.016667
第7个epoch的学习率:0.014286
第8个epoch的学习率:0.012500
第9个epoch的学习率:0.011111
第10个epoch的学习率:0.010000

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import LambdaLR

initial_lr = 0.1

class model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)

    def forward(self, x):
        pass

net_1 = model()

optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = LambdaLR(optimizer_1, lr_lambda=lambda epoch: 2/(epoch+1))

print("初始化的学习率:", optimizer_1.defaults['lr'])

for epoch in range(1, 11):
    # train

    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step()

初始化的学习率: 0.1
第1个epoch的学习率:0.200000
第2个epoch的学习率:0.100000
第3个epoch的学习率:0.066667
第4个epoch的学习率:0.050000
第5个epoch的学习率:0.040000
第6个epoch的学习率:0.033333
第7个epoch的学习率:0.028571
第8个epoch的学习率:0.025000
第9个epoch的学习率:0.022222
第10个epoch的学习率:0.020000

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import StepLR
import itertools


initial_lr = 0.1

class model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)

    def forward(self, x):
        pass

net_1 = model()

optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = StepLR(optimizer_1, step_size=3, gamma=0.1)

print("初始化的学习率:", optimizer_1.defaults['lr'])

for epoch in range(1, 11):
    # train

    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step()

初始化的学习率: 0.1
第1个epoch的学习率:0.100000
第2个epoch的学习率:0.100000
第3个epoch的学习率:0.100000
第4个epoch的学习率:0.010000
第5个epoch的学习率:0.010000
第6个epoch的学习率:0.010000
第7个epoch的学习率:0.001000
第8个epoch的学习率:0.001000
第9个epoch的学习率:0.001000
第10个epoch的学习率:0.000100

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import ReduceLROnPlateau
import itertools


initial_lr = 0.1

class model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)
    def forward(self, x):
        pass

net_1 = model()
print(net_1)
optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = ReduceLROnPlateau(optimizer_1, mode='min', factor=0.1, patience=2)

print("初始化的学习率:", optimizer_1.defaults['lr'])

for epoch in range(1, 15):
    # train

    test = 2
    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step(test)
    print(test)

model(
(conv1): Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1))
)
初始化的学习率: 0.1
第1个epoch的学习率:0.100000
2
第2个epoch的学习率:0.100000
2
第3个epoch的学习率:0.100000
2
第4个epoch的学习率:0.100000
2
第5个epoch的学习率:0.010000
2
第6个epoch的学习率:0.010000
2
第7个epoch的学习率:0.010000
2
第8个epoch的学习率:0.001000
2
第9个epoch的学习率:0.001000
2
第10个epoch的学习率:0.001000
2
第11个epoch的学习率:0.000100
2
第12个epoch的学习率:0.000100
2
第13个epoch的学习率:0.000100
2
第14个epoch的学习率:0.000010
2

import torch
import torch.nn as nn
from torch.optim.lr_scheduler import ReduceLROnPlateau
import itertools


initial_lr = 0.1

class model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)
    def forward(self, x):
        pass

net_1 = model()
print(net_1)
optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = ReduceLROnPlateau(optimizer_1, mode='min', factor=0.1, patience=5)

print("初始化的学习率:", optimizer_1.defaults['lr'])

for epoch in range(1, 15):
    # train

    test = 2
    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step(test)
    print(test)

model(
(conv1): Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1))
)
初始化的学习率: 0.1
第1个epoch的学习率:0.100000
2
第2个epoch的学习率:0.100000
2
第3个epoch的学习率:0.100000
2
第4个epoch的学习率:0.100000
2
第5个epoch的学习率:0.100000
2
第6个epoch的学习率:0.100000
2
第7个epoch的学习率:0.100000
2
第8个epoch的学习率:0.010000
2
第9个epoch的学习率:0.010000
2
第10个epoch的学习率:0.010000
2
第11个epoch的学习率:0.010000
2
第12个epoch的学习率:0.010000
2
第13个epoch的学习率:0.010000
2
第14个epoch的学习率:0.001000
2


```python
import torch
import torch.nn as nn
from torch.optim.lr_scheduler import LambdaLR

initial_lr = 0.1

class model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)

    def forward(self, x):
        pass

net_1 = model()

optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_1, 64)

print("初始化的学习率:", optimizer_1.defaults['lr'])

for epoch in range(0, 100):
    # train

    optimizer_1.zero_grad()
    optimizer_1.step()
    print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))
    scheduler_1.step()

初始化的学习率: 0.1
第0个epoch的学习率:0.100000
第1个epoch的学习率:0.099940
第2个epoch的学习率:0.099759
第3个epoch的学习率:0.099459
第4个epoch的学习率:0.099039
第5个epoch的学习率:0.098502
第6个epoch的学习率:0.097847
第7个epoch的学习率:0.097077
第8个epoch的学习率:0.096194
第9个epoch的学习率:0.095199
第10个epoch的学习率:0.094096
第11个epoch的学习率:0.092886
第12个epoch的学习率:0.091573
第13个epoch的学习率:0.090160
第14个epoch的学习率:0.088651
第15个epoch的学习率:0.087048
第16个epoch的学习率:0.085355
第17个epoch的学习率:0.083578
第18个epoch的学习率:0.081720
第19个epoch的学习率:0.079785
第20个epoch的学习率:0.077779
第21个epoch的学习率:0.075705
第22个epoch的学习率:0.073570
第23个epoch的学习率:0.071378
第24个epoch的学习率:0.069134
第25个epoch的学习率:0.066844
第26个epoch的学习率:0.064514
第27个epoch的学习率:0.062149
第28个epoch的学习率:0.059755
第29个epoch的学习率:0.057337
第30个epoch的学习率:0.054901
第31个epoch的学习率:0.052453
第32个epoch的学习率:0.050000
第33个epoch的学习率:0.047547
第34个epoch的学习率:0.045099
第35个epoch的学习率:0.042663
第36个epoch的学习率:0.040245
第37个epoch的学习率:0.037851
第38个epoch的学习率:0.035486
第39个epoch的学习率:0.033156
第40个epoch的学习率:0.030866
第41个epoch的学习率:0.028622
第42个epoch的学习率:0.026430
第43个epoch的学习率:0.024295
第44个epoch的学习率:0.022221
第45个epoch的学习率:0.020215
第46个epoch的学习率:0.018280
第47个epoch的学习率:0.016422
第48个epoch的学习率:0.014645
第49个epoch的学习率:0.012952
第50个epoch的学习率:0.011349
第51个epoch的学习率:0.009840
第52个epoch的学习率:0.008427
第53个epoch的学习率:0.007114
第54个epoch的学习率:0.005904
第55个epoch的学习率:0.004801
第56个epoch的学习率:0.003806
第57个epoch的学习率:0.002923
第58个epoch的学习率:0.002153
第59个epoch的学习率:0.001498
第60个epoch的学习率:0.000961
第61个epoch的学习率:0.000541
第62个epoch的学习率:0.000241
第63个epoch的学习率:0.000060
第64个epoch的学习率:0.000000
第65个epoch的学习率:0.000060
第66个epoch的学习率:0.000241
第67个epoch的学习率:0.000541
第68个epoch的学习率:0.000961
第69个epoch的学习率:0.001498
第70个epoch的学习率:0.002153
第71个epoch的学习率:0.002923
第72个epoch的学习率:0.003806
第73个epoch的学习率:0.004801
第74个epoch的学习率:0.005904
第75个epoch的学习率:0.007114
第76个epoch的学习率:0.008427
第77个epoch的学习率:0.009840
第78个epoch的学习率:0.011349
第79个epoch的学习率:0.012952
第80个epoch的学习率:0.014645
第81个epoch的学习率:0.016422
第82个epoch的学习率:0.018280
第83个epoch的学习率:0.020215
第84个epoch的学习率:0.022221
第85个epoch的学习率:0.024295
第86个epoch的学习率:0.026430
第87个epoch的学习率:0.028622
第88个epoch的学习率:0.030866
第89个epoch的学习率:0.033156
第90个epoch的学习率:0.035486
第91个epoch的学习率:0.037851
第92个epoch的学习率:0.040245
第93个epoch的学习率:0.042663
第94个epoch的学习率:0.045099
第95个epoch的学习率:0.047547
第96个epoch的学习率:0.050000
第97个epoch的学习率:0.052453
第98个epoch的学习率:0.054901
第99个epoch的学习率:0.057337


>1, 原则上test就是评价函数,一般就是所谓的损失函数loss,根据test进行动态调整学习率,和patience有较大的关系。
>2,一般第一次epoch不计算在patience之内。从epoch=2开始,比如最后一个例子,lr=0.1,loss没有改变,则等待epoch=3,4,其中test依旧没有改变,则需要进一步降低学习率。epoch=5,6,7,loss依旧没有改变。进一步降低lr。
![关于图形直观解释动态调整学习率](https://img-blog.csdnimg.cn/20210402185636727.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW50YWlxaXU=,size_16,color_FFFFFF,t_70#pic_center)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值