caffe 学习率设置问题

2023-11-13

solver算是caffe的核心的核心,它协调着整个模型的运作。caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为# caffe train --solver=*_slover.prototxt

Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解。solver的主要作用就是交替调用前向(forward)算法和后向(backward)算法来更新参数,从而最小化loss,实际上就是一种迭代的优化算法。

// The learning rate decay policy. The currently implemented learning rate

  // policies are as follows:

  //    - fixed: always return base_lr.

  //    - step: return base_lr * gamma ^ (floor(iter / step))

  //    - exp: return base_lr * gamma ^ iter

  //    - inv: return base_lr * (1 + gamma * iter) ^ (- power)

  //    - multistep: similar to step but it allows non uniform steps defined by

  //      stepvalue

  //    - poly: the effective learning rate follows a polynomial decay, to be

  //      zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power)

  //    - sigmoid: the effective learning rate follows a sigmod decay

  //      return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

  //

  // where base_lr, max_iter, gamma, step, stepvalue and power are defined

  // in the solver parameter protocol buffer, and iter is the current iteration.

  optional string lr_policy = 8;

  optional float gamma = 9; // The parameter to compute the learning rate.

  optional float power = 10; // The parameter to compute the learning rate.

 

optional float base_lr = 5; // The base learning rate

 

// the stepsize for learning rate policy "step"

  optional int32 stepsize = 13;

  // the stepsize for learning rate policy "multistep"

  repeated int32 stepvalue = 34;

使用最多的学习策略有fixedstepinvmultistep

1fixed 固定策略

故名思议就是学习率始终是一个固定值,如果是一个新手或者正准备训练一个全新的网络,建议使用这种策略。因为现在对于数据的分布和网络参数还都一无所知,fixed策略方便调节,我们可以根据训练情况包括lossaccuracy的值随时调节我们的学习率。比如,我喜欢开始时将学习率设置一个较大的值0.1-0.01之间),但是不能使loss爆掉呦。而后通过观察lossaccuracy的值,比如两者下降缓慢或不在下降,出现震荡的情况,就将学习率调小。也就是逐次减小的策略。

2step 均匀分步策略

这个策略要结合参数stepsize使用,当循环次数达到stepsize的整数倍时lr=base_lr*gamma^(floor(iter/stepsize)).在这里给大家说一个我最近使用这种策略所犯的错误。我从250000次开始继续训练我的网络,我将base_lr设置成0.001stepsize设置成100000gamma设置成0.1,我的本意是想让训练在300000次的时候学习率降到0.0001。结果呢?相信大家已经知道答案了学习率变成了1e-6.因此特别提醒你,如果你是在训练中途将学习策略改变成step,请仔细计算stepsize的值。

3multistep 多分步或不均匀分步

这种学习策略也是我们最近才看到有人使用,这种学习策略和step策略很相似。这种学习策略需要配合参数stepvalue使用,stepvalue可以在文件中设置多个,如stepvalue=10000stepvalue=20000......,当迭代次数达到我们依次指定的stepvalue的值时,学习率就会根据公式重新计算。这种学习率策略我虽然尝试的并不多,但是我发现他有一个很好的用处,就是我们在刚开始训练网络时学习率一般设置较高,这样lossaccuracy下降很快,一般前200000次两者下降较快,后面可能就需要我们使用较小的学习率了。step策略由于过于平均,而lossaccuracy的下降率在整个训练过程中又是一个不平均的过程,因此有时不是很合适。fixed手工调节起来又很麻烦,这时multistep可能就会派上用场了。

base_lr: 0.01

momentum: 0.9  //一次梯度更新的权重

weight_decay: 0.0005  //权重衰减项,防止过拟合的一个参数。

# The learning rate policy

lr_policy: "multistep"

gamma: 0.9

stepvalue: 5000

stepvalue: 7000

stepvalue: 8000

stepvalue: 9000

stepvalue: 9500

4exp: 返回base_lr * gamma ^ iteriter为当前迭代次数

5poly: 学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)

6sigmoid:习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

7inv

其实,从公式中我们就可以看到,这种学习策略的优势就在于它使得学习率在每一次迭代时都减小,但每次减小又都是一个非常小的数,这样就省去的自己手动调节的麻烦。这种策略使用的也很普遍。

net: "examples/mnist/lenet_train_test.prototxt"

test_iter: 100

test_interval: 500

base_lr: 0.01

momentum: 0.9  

type: SGD  //这一行可以省掉,因为默认值就是SGD

//六种选择

Stochastic Gradient Descent (type: "SGD"),

    AdaDelta (type: "AdaDelta"),

    Adaptive Gradient (type: "AdaGrad"),

    Adam (type: "Adam"),

    Nesterovs Accelerated Gradient (type: "Nesterov") and

    RMSprop (type: "RMSProp")

weight_decay: 0.0005

lr_policy: "inv"

gamma: 0.0001

power: 0.75

display: 100    //每训练100次,在屏幕上显示一次。如果设置为0,则不显示。

max_iter: 20000  //最大迭代次数。这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。

//快照。将训练出来的modelsolver状态进行保存,snapshot用于设置训练多少次后进行保存,默认为0,不保存。snapshot_prefix设置保存路径。还可以设置snapshot_diff,是否保存梯度值,默认为false,不保存。也可以设置snapshot_format,保存的类型。有两种选择:HDF5 BINARYPROTO ,默认为BINARYPROTO.

snapshot: 5000

snapshot_prefix: "examples/mnist/lenet" 

 solver_mode: CPU //设置运行模式。默认为GPU,如果你没有GPU,则需要改成CPU,否则会出错。

 

 

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

caffe 学习率设置问题 的相关文章

  • 编写出一个通用的人员类(Person),该类具有姓名(Name)、年龄(Age)、性别(Sex)等域。然后对Person 类的继承得到一个学生类(Student),该类能够存放学生的5门课的成绩,并能

    编写出一个通用的人员类 Person 该类具有姓名 Name 年龄 Age 性别 Sex 等域 然后对Person 类的继承得到一个学生类 Student 该类能够存放学生的5门课的成绩 并能求出平均成绩 最后在Main函数中对studen
  • vue点击当前元素添加class 删除兄弟元素的class

    在vue中当我们要实现点击元素动态添加类名时 我们不能像JQ那样去用 xxx addClass class siblings removeClass class 实现 那我们应该怎样去做呢 解决方案 1 在data里面申明一个属性 默认值最
  • LeetCode-1780. 判断一个数字是否可以表示成三的幂的和【数学】

    LeetCode 1780 判断一个数字是否可以表示成三的幂的和 数学 题目描述 解题思路一 将n转为3进制 如果没有2出现那么返回true 例如12 110 3 返回true 21 210 3 返回false 解题思路二 0 解题思路三
  • 计算机毕业设计-基于SSM的个性影片推荐管理系统

    项目系统开发的技术 Java语言 Java主要采用CORBA技术和安全模型 可以在互联网应用的数据保护 它还提供了对EJB Enterprise JavaBeans 的全面支持 java servlet API Java java serv
  • 重磅发布

    微众银行区块链积极听取社区意见和建议 基于多年研发FISCO BCOS底层开源平台的经验 沉淀了一套 FISCO BCOS应用落地指南 百科式地为FISCO BCOS的应用落地提供操作指引 现将该指南开放回馈社区 获取指南 可在文末添加 小
  • HashMap和LinkedHashMap的区别

    java为数据结构中的映射定义了一个接口java util Map 它有四个实现类 分别是 HashMap Hashtable LinkedHashMap TreeMap Map主要用于存储健值对 根据键得到值 因此不允许键重复 重复了覆盖
  • 用Flutter构建漂亮的UI界面 - 基础组件篇

    1 前言 Flutter作为时下最流行的技术之一 凭借其出色的性能以及抹平多端的差异优势 早已引起大批技术爱好者的关注 甚至一些闲鱼 美团 腾讯等大公司均已开始使用 虽然目前其生态还没有完全成熟 但身靠背后的Google加持 其发展速度已经
  • 基于SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

    一 简介 1 过滤器 依赖于servlet容器 在实现上基于函数回调 可以对几乎所有请求进行过滤 但是缺点是一个过滤器实例只能在容器初始化时调用一次 使用过滤器的目的是用来做一些过滤操作 获取我们想要获取的数据 比如 在过滤器中修改字符编码
  • 【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码

    1 简介 人脸是反应人身份的最直接的 最可靠的信息资源 通过人脸我们可以很快辨识一个人 这就是所谓的人脸识别 最初的人脸研究人员是一些从事社会心理学的工作者 从20世纪50年代开始有一些文献资料陆续发布在各种学术网上 人脸识别开始了最初的发
  • 软件工程——结构化分析:一种自上而下的分析方法(包含习题)

    什么是结构化分析 数据流图 数据字典 功能分解结构图 过程描述 结构化分析的优势与挑战 结合不同方法以适应不同场景 总结 习题1 银行计算机储蓄系统 习题2 机票预定系统 习题3 患者监护系统 习题4 复印机的状态转换图绘制 习题5 高校计
  • 一文详解分布式系统的分区

    为什么要分区 数据的复制是冗余的过程 冗余会增加可用性 并且可以有效均衡读取负载 而数据的分区是一个整体转换为局部的过程 这种拆解就像你拥有大量图书 但你的书架放不下 所以需要再加几个书架存储是一个道理 将整体拆分 局部存储在多个较小空间内
  • spring中创建bean的方式

    一 常见的bean创建方式 1 基于xml配置bean 2 使用 Component派生注解 3 使用 Configuration和 Bean注解 1 常见的使用xml中setter方法创建bean bean xml文件中配置bean时 加
  • 史上最全的OpenCV入门教程

    一 Python OpenCV 入门 欢迎阅读系列教程 内容涵盖 OpenCV 它是一个图像和视频处理库 包含 C C Python 和 Java 的绑定 OpenCV 用于各种图像和视频分析 如面部识别和检测 车牌阅读 照片编辑 高级机器
  • JS实现奇偶数的判断

    奇数和偶数的判断是数学运算中经常碰到的问题 比如 有变量x 如果x 1则为奇数 为2则为偶数 这篇文章主要讲解通过JavaScript来实现奇偶数的判断 方法一 求余 if else的形式 var num parseInt prompt 请
  • 人物专访

    把算法应用到各行各业中 这是我从创业初期就有的梦想 华院计算创始人 董事长宣晓华表示 文 科创板日报 黄心怡 成立于2002年的华院计算 可谓国内算法和AI的最早探索者之一 多年来始终致力于算法技术的研究和应用 面对当前的大模型浪潮 宣晓华
  • keyshot保存为ksp_keyshot渲染教程:keyshot教你如何简单的渲染冰与水

    摘要 keyshot是一个互动性的光线追踪与全域光渲染程序 keyshot的渲染的教程有哪些呢 下面是小编整理的关于keyshot渲染教程之keyshot教你如何简单的渲染冰与水 keyshot是一个互动性的光线追踪与全域光渲染程序 key
  • Windows解决camelot报错OSError: Ghostscript is not installed

    文章目录 解决方案 1 安装并配置Ghostscript 2 添加环境变量 3 重启python应用 解决方法也很简单 就是安装并配置Ghostscript 解决方案 1 安装并配置Ghostscript 首先访问 https ghosts
  • LeetCode--初级算法--数组篇-存在重复

    题目 给定一个整数数组 判断是否存在重复元素 如果任何值在数组中出现至少两次 函数返回 true 如果数组中每个元素都不相同 则返回 false 示例 1 输入 1 2 3 1 输出 true 示例 2 输入 1 2 3 4 输出 fals
  • 我是如何在12周内由零基础成为一名程序员的(转)

    我是如何在12周内由零基础成为一名程序员的 我的故事 在海军陆战队服役超过10年后 我于去年7月份退役了 随后在8月份找到了一份赌场的工作做公关 到今年2月中旬的时候又被辞退了 到5月中旬的时候我在DE协会找到了一份临时的 初级用户体验工程
  • Redis持久化的原理及优化

    更多内容 欢迎关注微信公众号 全菜工程师小辉 Redis提供了将数据定期自动持久化至硬盘的能力 包括RDB和AOF两种方案 两种方案分别有其长处和短板 可以配合起来同时运行 确保数据的稳定性 RDB 保存数据快照至一个RDB文件中 用于持久

随机推荐

  • An HTTP error occurred when trying to retrieve this URL.

    问题背景 conda install xxx 提示 An HTTP error occurred when trying to retrieve this URL Fetching package metadata CondaHTTPErr
  • 【Leetcode】863. 二叉树中所有距离为 K 的结点

    题目描述 题解 用map记录每个结点的父结点 然后让dfs从target结点开始 假设target就是根结点 然后递归时纪录深度 只要深度等于k 就是和target的距离等于k 就可以存入list 执行用时 14 ms 在所有 Java 提
  • LeetCode-1304. Find N Unique Integers Sum up to Zero

    Given an integer n return any array containing n unique integers such that they add up to 0 Example 1 Input n 5 Output 7
  • 毕业遭失业,前途一片黑暗...不得已转行软件测试,太多心酸和无助...

    大家好 我叫小涵 一名应届毕业生 目前已经成功转行互联网 写这篇文章的目的是因为很多人不喜欢自己的现状 想通过学习改变 奈何没有出路 所以想为这部分人提供一些思路 其次文章会总结我自己转行前后的经历和思考 提供一些我亲测有效的面试资源 找不
  • 解决Vmware Unbuntu 22虚拟机网络故障问题

    上午启动Vmware Unbuntu 22虚拟机 发现不能上网 屏幕右上侧的网络图标没有显示 怀疑是昨天在虚拟机上做路由器功能设置的时候某个操作产生的问题 于是进行排障 先尝试重启网络服务 service NetworkManager re
  • elasticsearch安装 及 启动异常解决

    虚拟机使用net连接模式 1 Download and unzip the latest Elasticsearch distribution 2 Run bin elasticsearch on Unix or bin elasticse
  • 第14课 右值引用(1)_基本概念

    1 左值和右值 1 两者区别 左值 能对表达式取地址 或具名对象 变量 一般指表达式结束后依然存在的持久对象 右值 不能对表达式取地址 或匿名对象 一般指表达式结束就不再存在的临时对象 2 右值的分类 将亡值 xvalue eXpiring
  • 数据中台-让数据用起来-7

    文章目录 第七章 数据体系建设 7 1 数体系规划 7 2 贴源数据层建设 全域数据统一存储 7 2 1 相关概念 7 2 2 贴源数据表设计 7 2 3 贴源数据表实现 7 3统一数仓层建设 标准化的数据底座 7 3 1 相关概念 7 3
  • Java高阶面试问答-通用基础

    线程和进程区别 进程是资源分配的最小单位 线程是程序执行的最小单位 进程有自己的独立地址空间 每启动一个进程 系统就会为它分配地址空间 建立数据表来维护代码段 堆栈段和数据段 线程是共享进程的数据空间 因此CPU切换一个线程的花费远比进程要
  • LeetCode-1775. 通过最少操作次数使数组的和相等【贪心,数组,计数】

    LeetCode 1775 通过最少操作次数使数组的和相等 贪心 数组 计数 题目描述 解题思路一 让sum1
  • kubernetes pv回收策略

    本文最近更新于2021 9 11 kubernetes pv回收策略 当用户不再使用其存储卷时 他们可以从 API 中将 PVC 对象删除 从而允许该资源被回收再利用 PersistentVolume 对象的回收策略告诉集群 当其被从申领中
  • 冈萨雷斯《数字图像处理》学习总结及感悟:第一章 绪论 百闻不如一见

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 好几月前开始自学OpenCV Python 但老猿以前没接触过图像基础知识 数学知识基本上也都忘光了 因此在自学OpenCV Pyt
  • Python处理txt数据实例

    现在有一个具体的案例是这样的 CST电磁仿真软件得到一些txt数据在origin data文件夹中 需要其中的一些数据来通过origin软件绘制曲线分析一些问题 而且需要里面的所有数据曲线显示在同一个图形中 如果通过手动将txt数据一一复制
  • LeetCode第55题解析

    给定一个非负整数数组 你最初位于数组的第一个位置 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个位置 示例 1 输入 2 3 1 1 4 输出 true 解释 我们可以先跳 1 步 从位置 0 到达 位置 1
  • js的闭包的理解

    js的变量的作用域分为全局变量和局部变量 函数内部的变量称为局部变量 在函数的内部可以访问到全局变量 但是函数外部无法访问函数内部的变量 闭包可以解决无法访问函数内部的变量的问题 且可以隐藏这个变量 不被外部直接访问 闭包 函数内部的子函数
  • JavaScript 搜索引擎 lunr.js

    lunr js 实现了在网页上的搜索引擎 类似 Solr 示例代码 view source print 01 定义索引 02 var idx lunr function 03 this field title boost 10 04 thi
  • flask需求文件requirements.txt的创建和使用

    flask需求文件requirements txt的创建及使用 简介 flask项目中包含一个requirements txt 文件 用于记录所有依赖包及其精确的版本号用以新环境部署 创建 生成需求文件 在命令行输入 pip freeze
  • 服务器一直被攻击怎么办?

    有很多人问说 网站一直被攻击 什么被挂马 什么被黑 每天一早打开网站 总是会出现各种各样的问题 这着实让站长们揪心 从修改服务器管理账号开始 到修改远程端口 什么措施都做了 还是会被攻击挂马 服务器一直被攻击时 要怎么做 1 切断网络 对服
  • 秋招-算法-动态规划篇

    秋招 算法 动态规划篇 只求秋招笔试能过 所以本文更多是怎么使用模板来解动态规划题 能过就好 对时间和空间的考虑不会太多 介绍 动态规划通过组合子问题的解得到原问题的解 适合动态规划解决的问题具有重叠子问题和最优子结构两大特征 通常使用空间
  • caffe 学习率设置问题

    solver算是caffe的核心的核心 它协调着整个模型的运作 caffe程序运行必带的一个参数就是solver配置文件 运行代码一般为 caffe train solver slover prototxt 在Deep Learning中