torch.optim.lr_scheduler--学习率调整总结

目录

    • 调用例子:
    • 方法:
    • 一、lr_scheduler的手动方法:1.torch.optim.lr_scheduler.LambdaLR
    • 2.torch.optim.lr_scheduler.MultiplicativeLR
    • 3.torch.optim.lr_scheduler.StepLR
    • 4.torch.optim.lr_scheduler.MultiStepLR
    • 5.torch.optim.lr_scheduler.ConstantLR
    • 6.torch.optim.lr_scheduler.LinearLR
    • 7.torch.optim.lr_scheduler.ExponentialLR
    • 8.torch.optim.lr_scheduler.CosineAnnealingLR
    • 二、结合多个lr_scheduler的措施:1.torch.optim.lr_scheduler.ChainedScheduler
    • 2.torch.optim.lr_scheduler.SequentialLR
    • 二、lr_scheduler的自动方法:1.torch.optim.lr_scheduler.ReduceLROnPlateau
    • 2.torch.optim.lr_scheduler.CyclicLR
    • 3.torch.optim.lr_scheduler.OneCycleLR
    • 4.torch.optim.lr_scheduler.CosineAnnealingWarmRestarts

参考链接:https://blog.csdn.net/qyhaill/article/details/103043637
https://zhuanlan.zhihu.com/p/352821601
https://blog.csdn.net/qq_37612828/article/details/108213578

调用例子:

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

initial_lr = 5

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),verbose = True)

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

for epoch in range(1, 11):

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

结合不同调度器的方法:

方法:

一、lr_scheduler的手动方法:1.torch.optim.lr_scheduler.LambdaLR

初始学习率乘以系数,由于每一次乘系数都是乘初始学习率,因此系数往往是epoch的函数。

torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)

计算公式:

lr_lambda = f(epoch)
new_lr = lr_lambda * init_lr

lr_lambda: lambda epoch: 1 / (epoch + 1)如下图:
torch.optim.lr_scheduler--学习率调整总结_第1张图片

参数:

  • optimizer (Optimizer) – 需要优化的优化器
  • lr_lambda:关于epoch的数学函数,或者一个此类函数的列表,比如: lambda: epoch*2。在每个epoch中进行。
  • last_epoch:最后一个epoch的索引,默认为-1。
  • verbose:如果设置为True, 打印每个epoch的new_lr。
    在这里插入图片描述
    例子:
lambda1 = lambda epoch: 0.95 ** epoch
scheduler = LambdaLR(optimizer, lr_lambda=lambda1, verbose = True)
for epoch in range(100):
	train(...)
	validate(...)
	scheduler.step()

2.torch.optim.lr_scheduler.MultiplicativeLR

与LambdaLR不同,该方法用前一次的学习率乘以lr_lambda,因此通常lr_lambda函数不需要与epoch有关。

torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)

lr_lambda: lambda epoch: 0.9如下图:

你可能感兴趣的:(代码,优化器,pytorch,深度学习,机器学习)