torch.optim.lr_scheduler.CosineAnnealingWarmRestarts、OneCycleLR定义与使用

article/2025/9/16 20:31:55

torch中有多种余弦退火学习率调整方法,包括:OneCycleLR、CosineAnnealingLR和CosineAnnealingWarmRestarts。

CosineAnnealingWarmRestarts(带预热的余弦退火)学习率方法定义

torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, \
eta_min=0, last_epoch=- 1, verbose=False)

CosineAnnealingWarmRestarts参数:

- optimizer (Optimizer) – Wrapped optimizer. 优化器

- T_0 (int) – Number of iterations for the first restart.学习率第一次回到初始值的epoch位置

- T_mult (int, optional) – A factor increases T_{i} mult应该是multiply的意思,即T_mult=2意思是周期翻倍,第一个周期是1,则第二个周期是2,第三个周期是4。

- eta_min (float, optional) – Minimum learning rate. Default: 0.

- last_epoch (int, optional) – The index of last epoch. Default: -1.

- verbose (bool) – If True, prints a message to stdout for each update. Default: False.

CosineAnnealingWarmRestarts使用

scheduler 初始化之后,在batch中使用scheduler.step()

import torch
from torch.optim.lr_scheduler import CosineAnnealingLR, CosineAnnealingWarmRestarts,StepLR, OneCycleLR
import torch.nn as nn
from torchvision.models import resnet18
import matplotlib.pyplot as pltmodel = resnet18(pretrained=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)mode = 'cosineAnnWarm'
#mode = 'cosineAnn'
if mode == 'cosineAnn':scheduler = CosineAnnealingLR(optimizer, T_max=5, eta_min=0.001)
elif mode == 'cosineAnnWarm':scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=5, T_mult=2)
plt.figure()
max_epoch = 50
iters = 200
cur_lr_list = []
for epoch in range(max_epoch):for batch in range(iters):optimizer.step()scheduler.step()cur_lr = optimizer.param_groups[-1]['lr']cur_lr_list.append(cur_lr)print('Cur lr:', cur_lr)
x_list = list(range(len(cur_lr_list)))
plt.plot(x_list, cur_lr_list)
plt.show()

在这里插入图片描述

 OneCycleLR使用

        pytorch版本>=1.7

mode = 'OneCycleLR'
#mode = 'cosineAnn'
max_epoch = 500
iters = 200
if mode == 'cosineAnn':scheduler = CosineAnnealingLR(optimizer, T_max=5, eta_min=0.001)
elif mode == 'cosineAnnWarm':scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=5, T_mult=2)
elif mode == 'OneCycleLR':scheduler = OneCycleLR(optimizer, max_lr=0.5, steps_per_epoch=iters, epochs=max_epoch, pct_start=o.3)
plt.figure()
cur_lr_list = []
for epoch in range(max_epoch):for batch in range(iters):optimizer.step()scheduler.step()cur_lr = optimizer.param_groups[-1]['lr']cur_lr_list.append(cur_lr)#print('Cur lr:', cur_lr)
x_list = list(range(len(cur_lr_list)))
plt.plot(x_list, cur_lr_list)
plt.show()

在这里插入图片描述

        在目前的pytorch1.9版本中新添加了一个three_phase参数,当这个three_phase=True

scheduler=torch.optim.lr_scheduler.OneCycleLR(optimizer,max_lr=0.9,steps_per_epoch=iters, epochs=max_epoch, pct_start=o.3,three_phase=True)

        得到的学习率变成下图:对称+陡降

————————————————
修改自:https://blog.csdn.net/qq_30129009/article/details/121732567


http://chatgpt.dhexx.cn/article/qdJtC89O.shtml

相关文章

torch.optim优化算法理解之optim.Adam()

torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼的优化算法也将整合进来。 为了使用torch.optim,需先构造一个优化器对象Optimizer,用来保存当前的状态&#x…

Python-torch.optim优化算法理解之optim.Adam()

目录 简介 分析 使用 Adam算法 参数 论文理解 torch.optim.adam源码理解 Adam的特点 转载torch.optim优化算法理解之optim.Adam() 官方手册:torch.optim — PyTorch 1.11.0 documentation 其他参考 pytorch中优化器与学习率衰减方法总结 Adam和学习率衰减…

R 语言 optim 使用

stats中的optim函数是解决优化问题的一个简易的方法。 Univariate Optimization f function(x,a) (x-a)^2 xmin optimize(f,interval c(0,1),a1/3) xminGeneral Optimization optim函数包含了几种不同的算法。 算法的选择依赖于求解导数的难易程度,通常最好提…

PyTorch基础(六)-- optim模块

PyTorch的optim是用于参数优化的库(可以说是花式梯度下降),optim文件夹主要包括1个核心的父类(optimizer)、1个辅助类(lr_scheduler)以及10个常用优化算法的实现类。optim中内置的常用算法包括a…

pytorch基础(四):使用optim优化函数

文章目录 前言一、问题描述二、官方文档代码三、optimizer的工作原理总结 前言 本系列主要是对pytorch基础知识学习的一个记录,尽量保持博客的更新进度和自己的学习进度。本人也处于学习阶段,博客中涉及到的知识可能存在某些问题,希望大家批评…

HTTP协议之GET与POST区别

GET和POST是HTTP请求的两种基本方式,对于这两种请求方式的区别,只要是接触过Web开发的就能说出一二:GET把参数包含在URL中,POST通过正文传参! 而我想深入了解以下的时候,就去了w3cschool,这是w…

Get和Post区别是什么

附上原文地址:https://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。…

get与post区别(很全~)

get与post区别 GET: (1)从指定的资源请求数据 (2)请求数据有长度限制(不同每个浏览器限制长度可能不一样) (3)请求url会在浏览器地址栏中显示 (4&#x…

Web中get和post区别

99% 的人都理解错了 HTTP 中 GET 与 POST 的区别(转) 转自:WebTechGarden 微信公众号GET 和 POST 是 HTTP 请求的两种基本方法,要说它们的区别,接触过 WEB 开发的人都能说出一二。最直观的区别就是 GET 把参数包含在 U…

get,post区别

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而H…

GET 与 POST 区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

GET和POST区别及缓存问题

2.就是get和post区别的缓存问题。 首先要了解什么是缓存。 HTTP缓存的基本目的就是使应用执行的更快,更易扩展,但是HTTP缓存通常只适用于idempotent request(可以理解为查询请求,也就是不更新服务端数据的请求)&#x…

Get与Post区别与范例讲解

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 一、 J2EE WEB应用文件目录结构 Java Web应用由一组静态HTML页、Servlet、JSP和其他相关的class组成,它们一起构成一个大的工程项目。每种组件在Web应用中都有固定的存放目录。Web应用的配…

GET和POST区别详解

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

get和post区别

GET和POST的安全性 1、GET是通过URL方式请求,可以直接看到,明文传输 2、POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的 3、GET请求会保存在浏览器历史纪录中,还可能会保存在Web的日志中 G…

post和get区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

GET 和 POST 有什么区别?

GET 和 POST 是 HTTP 请求中最常用的两种请求方法,在日常开发的 RESTful 接口中,都能看到它们的身影。而它们之间的区别,也是一道常见且经典的面试题,所以我们本文就来详细的聊聊。 HTTP 协议定义的方法类型总共有以下 10 种&…

查找(一)——静态查找表

目录 一、查找的基本概念 二、顺序查找 (线性查找) 1、基本思想 2、核心代码 3、顺序查找设置哨兵 4、顺序查找的优点: 5、顺序查找的缺点: 6、折半查找 7、折半查找判定树 8、线性表查找的特点 三、索引顺序表&#x…

查找表结构

查找表介绍 在日常生活中,几乎每天都要进行一些查找的工作,在电话簿中查阅某个人的电话号码;在电脑的文件夹中查找某个具体的文件等等。本节主要介绍用于查找操作的数据结构——查找表。 查找表是由同一类型的数据元素构成的集合。例如电话号…

数据结构 第八章 查找(静态查找表)

集合 1、集合中的数据元素除了属于同一集合外,没有任何的逻辑关系 2、在集合中,每个数据元素都有一个区别于其他元素的唯一标识(键值或者关键字值) 3、集合的运算: 1 查找某一元素是否存在(内部查找、外部查找) 2 将集合中的元素按照它的唯一标识进行排序4、集合的…