scheduler学习率设置

2023-11-08

在炼丹的过程中,学习率的调整是必不可少的,下面给出scheduler模块的调学习率的方法,后面会慢慢补充

调整学习率:PyTorch官方文档

一、CyclicLR

torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None)

  • optimizer: wrapped optimizer
  • base_lr: 学习率的最低值
  • max_lr:学习率的最大值
  • step_size_up: lr从最小值到最大值所需的步骤(即半个循环)
  • step_size_down: lr从最大值到最小值所需的步骤(即半个循环)

二、CosineAnnealingLR

torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1, verbose=False)

  • optimizer: wrapped optimizer
  • T_max: 最大迭代次数(就是学习率降到最小值的迭代次数)
  • eta_min:学习率的最小值,默认为0
  • last_epoch:
  • verbose:如果为True,每次更新lr的时候都会打印出来

学习率会随着epoch成周期性的变化,例如最大迭代次数为100,一共有300个epoch,那么前100个epoch学习率从0.0009降到0,然后100-200个周期从0又升到0.0009,200-300个epoch从0.0009降到0

更新公式:

η t = η m i n + 1 2 ( η m a x − η m i n ) ( 1 + c o s ( T c u r T m a x π ) ) \eta_{t} = \eta_{min} + \frac{1}{2}(\eta_{max}-\eta_{min})(1+cos(\frac{T_{cur}}{T_{max}}\pi)) ηt=ηmin+21(ηmaxηmin)(1+cos(TmaxTcurπ))

import torch.optim as optim
from torch.optim import lr_scheduler
from torchvision.models import AlexNet
import matplotlib.pyplot as plt


def plot(lr_list):
    f = plt.figure()

    plt.plot(lr_list)
    plt.show()


epochs = 50
model = AlexNet()
optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5)
scheduler = lr_scheduler.CosineAnnealingLR(optimizer, epochs, eta_min=1e-4, last_epoch=-1)
# scheduler = lr_scheduler.CosineAnnealingLR(optimizer, epochs - 10, eta_min=1e-4, last_epoch=-1)

# this zero gradient update is needed to avoid a warning message, issue #8.
optimizer.zero_grad()

lr_list = list()
for epoch in range(epochs*3):
    optimizer.step()
    scheduler.step()

    print('{} - {}'.format(epoch, scheduler.get_last_lr()))
    lr_list.append(scheduler.get_last_lr()[0])

plot(lr_list)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scheduler学习率设置 的相关文章

随机推荐

  • Vue-router history模式下Nginx配置

    对于VUE的router mode history 模式 这里主要是为了去除链接上的 开发的时候 一般都不出问题 是因为开发时用的服务器为node Dev环境中已配置好了 nginx运行的时首页没有问题 链接也没有问题 但在点击刷新后 页面
  • 更改WPS云文档数据存储位置

    WPS的默认位置在C盘 当我们文档数据比较多 文件的体积也越来越大时 就会占用C盘的存储空间 下面为更改WPS云文档数据存储位置的具体步骤 双击 WPS网盘 进入WPS网盘界面 在界面右上方的 更多 中选择 同步与设置 选择 设置 在 缓存
  • 【计算机视觉笔记】图像检索学习 (Content Based Image Retrieval)

    论文跟踪 Awesome image retrieval papers https github com willard yuan awesome cbir papers 综述 SIFT Meets CNN A Decade Survey
  • 白嫖 GitHub Pages,轻松搭建个人博客

    Hexo 是一个快速 简单且功能强大的博客框架 使用 Markdown 解析文档 Hexo 能在几秒内生成带有自定义主题并集成各项功能的网站页面 本文采用 Github Pages Hexo 的方式 搭建个人博客 零 准备工作 1 使用个人
  • QT通过parentWidget()实现多界面跳转及关闭(切换界面和返回前一界面)

    QT通过parentWidget 实现多界面跳转及关闭 切换界面和返回前一界面 不需要跳转界面相互包含头文件 超简单的方法 先将第一级的窗口this指针传给次级的的窗口 子窗口通过parentWidget 返回第一级的this并用来调用sh
  • (五)复函数积分的定义与性质

    本文内容主要如下 1 复积分的概念 1 1 复积分的定义 1 2 复积分的存在性与计算 1 3 一个圆周上的重要积分公式 1 4 复积分的基本性质 1 复积分的概念 1 1 复积分的定义 定义 如图 C为平面上一条光滑的简单曲线 z z
  • k8s集群pod直接无法ping通

    简介 基于OpenStack云主机搭建的k8s集群 网络CNI选用的calico 使用的是BGP模式 pod直接无法ping通 宿主机也无法ping通pod 排除后发现不是安全组的原因 应该是OpenStack的网卡默认会丢掉非本网卡ip地
  • WSL2-解决无法ping通主机/配置使用主机代理

    WSL2无法ping通主机 省流 如果主机能ping通wsl从机 从机ping不通主机 大概率是防火墙拦截了 可以以管理员身份在powershell中运行下面的代码 或者手动在防火墙设置中添加相应的出入站规则 New NetFirewall
  • 音频-基于Core Audio技术采集音频(版本1)

    这个是第一次版本优化 优化是简单易懂 代码 WindowsAudioSession cpp 基本的利用WAS采集音频的demo include
  • extern关键字作用

    语法 extern放在变量和函数声明之前 表示该变量或者函数在别的文件中已经定义 提示编译器在编译时要从别的文件中寻找 除此之外 extern还可以用来进行链接指定 作用 声明外部变量 在声明全局变量时 不同的文件在编译器编译时是不透明的
  • 字节流与字符流

    流是个抽象的概念 是对输入输出设备的抽象 输入流可以看作一个输入通道 输出流可以看作一个输出通道 输入流是相对程序而言的 外部传入数据给程序需要借助输入流 输出流是相对程序而言的 程序把数据传输到外部需要借助输出流 字节流 传输过程中 传输
  • java基础系列 -- 类的三大特性:封装、继承、多态

    java类的特性 类有三大特性 封装 继承 多态 封装 封装就是将类的某些属性隐藏起来 限制在类的外部对类内部成员进行访问 通过接口对外开放 但是在外部不能直接进行查找属性 只通过公共接口来访问类的成员数据 为什么要设置隐藏 隐藏数据是为了
  • jpa.hibernate.ddl-auto属性说明

    jpa hibernate ddl auto 的几个常用属性值 none 默认值 什么都不做 每次启动项目 不会对数据库进行任何验证和操作 create 每次运行项目 没有表会新建表 如果表内有数据会被清空 create drop 每次程序
  • nginx_http_proxy,upstream,stream模块简析

    一 ngx http proxy module模块 模块功能 为后端httpd服务做反向代理 并且与Httpd 之间使用http进行通信 1 proxy pass URL Context location if in location li
  • 如何求C语言字符串长度(strlen函数和sizeof关键字)

    如何求C语言字符串长度 strlen函数和sizeof关键字 在程序里 一般会用 strlen 函数或 sizeof 来获取一个字符串的长度 但这2种方法获取的字符串的长度其实是不一样 我们用如下函数进行测试 void test6 char
  • Java8新特性-Lambda表达式

    Lambda表达式 也可称为闭包 它是推动Java8发布的最重要的特性 Lambda允许把函数作为一个方法的参数 函数作为参数传递进入方法中去 使用lambda表达式可以把代码变得更加简洁紧凑 语法 lambda表达式的语法格式如下 par
  • Ciclop开源3D扫描仪软件---Horus源码分析之point_cloud_roi.py

    联系方式 QQ 2468851091 call 18163325140 Email 2468851091 qq com coding utf 8
  • C语言小游戏——井字棋(数组实现)

    学c也学了有一些时间了 今天用c语言做了一个小游戏 井字棋 相信大家也玩过 我们这个游戏的思路呢 是玩家和电脑对弈 谁先把三颗棋子连成一条线 谁就赢了 如下图所示 要想实现我们这个井字棋需要用到数组的知识 所以 老规矩我们先简单的把数组讲一
  • SCI审稿流程(转)

    1 收到邮件 编辑约审稿 同意就接受 会约定审稿期限 一般三个月 Dear Mr Cat Please be informed you have been registered by our editorial team as a user
  • scheduler学习率设置

    在炼丹的过程中 学习率的调整是必不可少的 下面给出scheduler模块的调学习率的方法 后面会慢慢补充 调整学习率 PyTorch官方文档 一 CyclicLR torch optim lr scheduler CyclicLR opti