深度学习基础知识 学习率调度器的用法解析

深度学习基础知识 学习率调度器的用法解析

1、自定义学习率调度器**:**torch.optim.lr_scheduler.LambdaLR

实验代码:

python 复制代码
import torch
import torch.nn as nn

def lr_lambda(x):
    return x*2
    
net=nn.Sequential(nn.Conv2d(3,16,3,1,1))

optimizer=torch.optim.SGD(net.parameters(),lr=0.01,momentum=0.9)

lr_scheduler=torch.optim.lr_scheduler.LambdaLR(optimizer,lr_lambda=lr_lambda)

for _ in range(10):
    optimizer.step()
    lr_scheduler.step()
    print(optimizer.param_groups[0]['lr'])

打印结果:

分析数据变化如下图所示:

2、正儿八经的模型搭建流程以及学习率调度器的使用设置


代码:

python 复制代码
import torch
import torch.nn as nn
import numpy as np

def create_lr_scheduler(optimizer,
                        num_step:int,
                        epochs:int,
                        warmup=True,
                        warmup_epochs=1,
                        warmup_factor=1e-3):
    assert num_step>0 and epochs>0
    if warmup is False:
        warmup_epochs=0
    
    def f(x):
        """
            根据step数,返回一个学习率倍率因子,
            注意在训练开始之前,pytorch会提前调用一次create_lr_scheduler.step()方法

        
        """

        if warmup is True and x <= (warmup_epochs * num_step):
            alpha=float(x) / (warmup_epochs * num_step)
            # warmup过程中,学习率因子(learning rate factor):warmup_factor -----> 1
            return warmup_factor * (1-alpha) + alpha
        else:
            # warmup后,学习率因子(learning rate factor):warmup_factor -----> 0
            return (1-(x - warmup_epochs * num_step) / (epochs-warmup_epochs * num_step)) ** 0.9
        
    return torch.optim.lr_scheduler.LambdaLR(optimizer,lr_lambda=f)


net=nn.Sequential(nn.Conv2d(3,16,1,1))
optimizer=torch.optim.SGD(net.parameters(),lr=0.01,momentum=0.9)

lr_scheduler=create_lr_scheduler(optimizer=optimizer,num_step=5,epochs=20,warmup=True)

image=(np.random.rand(1,3,64,64)).astype(np.float32)
image_tensor=torch.tensor(image.copy(),dtype=torch.float32)
print(image.dtype)

for epoch in range(20):
    net.train()

    predict=net(image_tensor)
    optimizer.zero_grad()
    optimizer.step()
    lr_scheduler.step()
    print(optimizer.param_groups[0]['lr'])   # 打印学习率变化情况
相关推荐
sali-tec6 分钟前
C# 基于halcon的视觉工作流-章42-手动识别文本
开发语言·人工智能·算法·计算机视觉·c#·ocr
mit6.8249 分钟前
[VoiceRAG] 前端实时通信 | useRealTime钩子
人工智能
B站_计算机毕业设计之家13 分钟前
机器学习实战项目:Python+Flask 汽车销量分析可视化系统(requests爬车主之家+可视化 源码+文档)✅
人工智能·python·机器学习·数据分析·flask·汽车·可视化
CV-杨帆33 分钟前
论文阅读:arxiv 2025 Scaling Laws for Differentially Private Language Models
论文阅读·人工智能·语言模型
羊羊小栈37 分钟前
基于「多模态大模型 + BGE向量检索增强RAG」的航空维修智能问答系统(vue+flask+AI算法)
vue.js·人工智能·python·语言模型·flask·毕业设计
viperrrrrrrrrr738 分钟前
GPT系列模型-详解
人工智能·gpt·llm
peter676841 分钟前
pandas学习小结
学习·pandas
机器视觉知识推荐、就业指导1 小时前
STM32 外设驱动模块【含代码】:SG90 舵机模块
stm32·单片机·嵌入式硬件·学习
算家计算1 小时前
Wan2.2-Animate-14B 使用指南:从图片到动画的完整教程
人工智能·开源·aigc
西柚小萌新1 小时前
【深入浅出PyTorch】--4.PyTorch基础实战
人工智能·pytorch·python