Caffe的solver参数设置: http://caffe.berkeleyvision.org/tutorial/solver.html


net: "path to prototxt (train and val)"

test_iter:

每次test_interval的test的迭代次数,假设测试样本总数为10000张图片,一次性执行全部的话效率很低,所以将测试数据分为几个批次进行测试,

每个批次的数量就是batch_size。如果batch_size=100,那么需要迭代100次才能将10000个数据全部执行完,所以test_iter设置为100。

Caffe默认的迭代次数是50,当batch_size=1时可以通过设置test_iter为20000来修改迭代次数实现测试样本全覆盖。

test_interval:测试间隔,每训练多少次进行一次测试。

test_initialization:表示是否在训练之前进行一次TestALL()操作,其中如果设置了snapshot,会进行一次snapshot动作;

iter_size: 处理batchsize*itersize张图片后,才调用一次ApplyUpdate函数根据学习率、method(SGD、AdaSGD等)进行梯度下降

Caffe的solver类提供了6种优化算法,配置文件中可以通过type关键字设置:
Stochastic Gradient Descent (type: “SGD”)
AdaDelta (type: “AdaDelta”)
Adaptive Gradient (type: “AdaGrad”)
Adam (type: “Adam”)
Nesterov’s Accelerated Gradient (type: “Nesterov”)
RMSprop (type: “RMSProp”)
inv: (type:“inv”)逐渐下降 return base_lr*(1+gamma*iter)^(-power) 简单地讲,solver就是一个告诉caffe你需要网络如何被训练的一个配置文件
lr_policy:
这个参数代表的是learning rate应该遵守什么样的变化规则,这个参数对应的是字符串,选项及说明如下:
“step” - 需要设置一个stepsize参数,返回base_lr * gamma ^ ( floor ( iter / stepsize ) ),iter为当前迭代次数
“multistep” - 和step相近,但是需要stepvalue参数,step是均匀等间隔变化,而multistep是根据stepvalue的值进行变化
“fixed” - 保持base_lr不变
“exp” - 返回base_lr * gamma ^ iter, iter为当前迭代次数
“poly” - 学习率进行多项式误差衰减,返回 base_lr ( 1 - iter / max_iter ) ^ ( power )
“sigmoid” - 学习率进行sigmod函数衰减,返回 base_lr ( 1/ 1+exp ( -gamma * ( iter - stepsize ) ) )
base_lr:网络基准学习率0.1,lr过大会导致不收敛,过小会导致收敛过慢;并且根据学习策略和对应的gamma值,进行学习率调整;
lr = base_lr * gamma ^ ( floor ( iter / stepsize ) )
gamma:α 是lr的衰减系数,如 0.1
stepsize:是lr的衰减步长,
momentum:μ 上一次梯度更新的权重,如 0.9;
weight_decay:权重衰减项,用于防止过拟合,如 0.0005

SGD

Stochastic gradient descent (type: “SGD”) updates the weights W by a linear combination of the negative gradient ∇L(W) and the previous weight update Vt. The learning rate α is the weight of the negative gradient. The momentum μ is the weight of the previous update.

Formally, we have the following formulas to compute the update value Vt+1 and the updated weights Wt+1 at iteration t+1, given the previous weight update Vt and current weights Wt:

Vt+1=μVt−α∇L(Wt) 
Wt+1=Wt+Vt+1 
The learning “hyperparameters” (α and μ) might require a bit of tuning for best results. If you’re not sure where to start, take a look at the “Rules of thumb” below, and for further information you might refer to Leon Bottou’s Stochastic Gradient Descent Tricks [1].

[1] L. Bottou. Stochastic Gradient Descent Tricks. Neural Networks: Tricks of the Trade: Springer, 2012.

display:间隔多少迭代次数对结果进行输出;

average_loss:取多次foward的loss作平均,进行显示输出

max_iter: 最大迭代次数;

snapshot:间隔多少迭代次数进行一次模型的保存;

solver_mode:选择CPU训练或者GPU训练;

snapshot_prefix:"训练模型保存的路径及前缀";


就个人经验而论 batchsize越大越好1.震荡明显减少 2.收敛速度加快 3.同样学习率下大batch可以收敛到更好的水平。目前没发现什么大batch过早陷入局部最优的现象,在我这都是batch越大,精度越高;
Batch Size(批处理大小)对于模型来说是非常重要,在梯度下降方法训练模型时,Batch Size的大小决定了梯度下降的方向收敛的效果和速率,以及内存的利用率。一般来说:过于小的Batch Size可能导致模型不收敛,随着Batch Size的增大,模型的处理速度会加快,但同时达到最优精度的epoch数量也随之增多;因此,Batch Size可能达到时间最优,以及收敛精度最优。所以在选择时一方面根据计算能力来选择,一方面需要进行不同的试验选择相对较优的Batch Size。

  

solver解析与设置的更多相关文章

  1. JSP Servlet 路径解析 路径设置

    转自:http://ethen.iteye.com/blog/800415 在用JSP和Servlet编写Web应用时,经常遇到的问题就是找不到.do路径,或者.do路径不能解析,其实归根到底就是Se ...

  2. Spring Boot默认的JSON解析框架设置

    方案一:启动类继承WebMvcConfigurerAdapter,覆盖方法configureMessageConverters ... @SpringBootApplication public cl ...

  3. MySQL的sql_mode解析与设置,sql文件导入报错解决

    在往MySQL数据库中插入一组数据时,出错了!数据库无情了给我报了个错误:ERROR 1365(22012):Division by 0:意思是说:你不可以往数据库中插入一个 除数为0的运算的结果.于 ...

  4. Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制

    一.SpringMVC概述 SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装.SpringMVC是处于Web层的框架,所以其主要的作用就是用来 ...

  5. 升级 mysql5.6 配置文件my.cnf sql_mode 解析与设置问题

    sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模式,所以开发.测试环境的数据库也必须要设置,这 ...

  6. MySQL的sql_mode解析与设置

    https://blog.csdn.net/hhq163/article/details/54140286 https://blog.csdn.net/ccccalculator/article/de ...

  7. 将String类型的XML解析并设置到实体类中

    package com.mooc.string; import java.util.ArrayList; import java.util.List; import org.dom4j.Documen ...

  8. 使用com.jayway.jsonpath.JsonPath包进行JSON的快速解析、设置值需要注意的性能提升方法

    一.包地址 1.Maven:http://mvnrepository.com/artifact/com.jayway.jsonpath/json-path <!-- https://mvnrep ...

  9. HTML解析器HtmlAgilityPack的一些使用总结(C#)

    哎~本来这些总结是作为使用时的快速备注,但是用不上了.实际应用当中HtmlAgilityPack的可靠性不太稳定,一主要问题是:-> 一些字符会出现乱码或者变成'?',如韩语字符.由于我是已经有 ...

随机推荐

  1. (三)Solr——Solr的基本使用

    1. Schema.xml 在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先 ...

  2. 抛弃【 LIMIT O,N 】,换种方法查询分页

    在分页功能开发时,我们很习惯用LIMIT O,N的方法来取数据.这种方法在遇到超大分页偏移量时是会把MySQL搞死的ooo... 通常,我们会采用ORDER BY LIMIT start, offse ...

  3. Layui 弹出层组件——layer的模块化开发实例应用

    Layui 弹出层组件——layer的模块化开发实例应用 1.首先在package.json中引入layer组件依赖 2.在源码中应用这个依赖 3.在源码中编写代码应用此组件 4.效果验证:点击日历上 ...

  4. java基础讲解10-----类的高级特性

    一.final关键字 1.final关键字修饰变量,表示变量不可以被改变,如果想修改,编译器不会接受的. 注意:final关键字定义的变量必须赋值 public  static final 修饰  白 ...

  5. ubuntu安装Skype 4.3

    Install Skype 4.3 Step 1: Remove previous version sudo apt-get remove skype skype-bin:i386 skype:i38 ...

  6. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  7. codesmith 自动生成C# model 实体模板

    <%-- Name:自动生成 Author: 陈胜威 Description: 直接生成model类 --%> <%@ Template Language="C#" ...

  8. 微信公共服务平台开发(.Net 的实现)4-------语音识别

    语音识别这个功能属于高级功能,必须微信实名认证后才能实现,认证费用300元/年,如果你作为开发者可以申请测试帐号,也是可以的.首先建立一个微信消息类,这个类比之前多了一个属性. class wxmes ...

  9. java 解析webservice 中的soapheader

    //从MessageContet中获取头域中的值 public HeaderBean getBeanFromRequest(org.apache.axis2.context.MessageContex ...

  10. 实时Web的发展历史

    传统的Web是基于HTTP的请求/响应模型的:客户端请求一个新页面,服务器将内容发送到客户端,客户端再请求另外一个页面时又要重新发送请求.后来有人提出了AJAX,AJAX使得页面的体验更加“动态”,可 ...