caffe solver通过协调网络前向推理和反向梯度传播来进行模型优化,并通过权重参数更新来改善网络损失求解最优算法,而solver学习的任务被划分为:监督优化和参数更新,生成损失并计算梯度。caffe solver是caffe中的核心,它定义着整个模型如何运转,不管是命令行方式还是pycaffe接口方式进行网络训练或测试,都是需要一个solver配置文件的,而solver的配置参数总共有42个,罗列如下:

net                       weight_decay
net_param regularization_type
train_net stepsize
test_net stepvalue
train_net_param clip_gradients
test_net_param snapshot
train_state snapshot_prefix
test_state snapshot_diff
test_iter snapshot_format
test_interval solver_mode
test_compute_loss device_id
test_initialization random_seed
base_lr type
display delta
average_loss momentum2
max_iter rms_decay
iter_size debug_info
lr_policy snapshot_after_train
gamma solver_type
power layer_wise_reduce
momentum weights

模型网络定义prototxt相关

net: "train_test.prototxt"
net_param {
name: "LeNet"
layers {
name: "mnist"
type: DATA
top: "data"
top: "label"
data_param {
source: "examples/mnist/mnist_train_lmdb"
backend: LMDB
batch_size: 64
}
transform_param {
scale: 0.00390625
}
include: { phase: TRAIN }
} ... layers {
name: "loss"
type: SOFTMAX_LOSS
bottom: "ip2"
bottom: "label"
top: "loss"
}
}
train_net: "train.prototxt"
test_net: "test.prototxt"
train_net_param: {...}
test_net_param: {...}

net:训练网络用的prototxt文件,该文件可能包含不止一个的测试网络,通常不与train_net和test_net同时定义;

net_param:内联的训练网络prototxt定义,可能定义有不止一个的测试网络,通常忽略;

train_net_param:内联的训练网络prototxt定义,通常忽略;

test_net_param:内联的测试网络prototxt定义,通常忽略;

train_net:训练网络用的prototxt文件,通常不与net同时定义;

test_net:测试网络用的prototxt文件,通常不与net同时定义;

模型运行状态

train_state: {
phase: TRAIN
}
test_state: {
phase: TEST
stage: 'test-on-test'
}

train_state:训练状态定义,默认为TRAIN,否则按照模型网络prototxt定义的来运行;

test_state:测试状态定义,默认为TEST并在测试集上进行测试,否则按照模型网络prototxt定义的来运行;

测试网络参数配置

test_iter: 50
test_interval: 200
test_compute_loss: false
test_initialization: true

test_iter:测试网络前向推理的迭代次数,注意每测试迭代一次是一个测试网络定义的batch size大小,test_iter与test_batch_size的乘积应为整个测试集的大小;
test_interval:训练时每隔多少次迭代则进行一次测试,默认为0即每次训练完后都会进行一次测试,应该要配置该参数,否则训练速度超级慢;
test_compute_loss:测试时是否计算损失值,默认为假,通常用于debug分析用;
test_initialization:在第一次训练迭代之前先运行一次测试,用于确保内存够用和打印初始的loss值,默认为真;

学习率相关的参数配置

base_lr: 0.1
lr_policy: "multistep"
max_iter: 100000
stepvalue: 10000
stepsize: 5000
gamma: 0.1
power: 0.75

base_lr :初始的学习率;
lr_policy:学习率调整策略;
maxiter:训练迭代的最大次数;
stepsize:lr_policy为“step”时学习率多少次训练迭代会进行调整;
stepvalue:lr_policy为“multistep”时学习率多少次训练迭代会进行调整,该参数可设置多个以用于多次学习率调整;
gamma:用于计算学习率的参数,lr_policy为step、exp、inv、sigmoid时会使用到;
power:用于计算学习率的参数,lr_policy为inv、poly时会使用到;

lr_policy学习率调整策略:

  • - fixed:保持base_lr不变.
  • - step:如果设置为step,则还需要设置一个stepsize,返回base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
  • - exp:返回base_lr * gamma ^ iter, iter为当前迭代次数
  • - inv:如果设置为inv,还需要设置一个power,返回base_lr * (1 + gamma * iter) ^ (- power)
  • - multistep:如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multstep则是根据stepvalue值变化
  • - poly:学习率进行多项式误差,返回 base_lr * (1 - iter/max_iter) ^ (power)
  • - sigmoid:学习率进行sigmod衰减,返回 base_lr * ( 1/(1 + exp(-gamma * (iter - stepsize))))

模型优化相关参数

type: "Adam"
solver_type: "Adam"(已弃用)
momentum: 0.9
momentum2: 0.999
rms_decay: 0.98
delta: 1e-8
weight_decay: 0.0005
regularization_type: "L2"
clip_gradients: 0.9

type:优化器类型;
solver_type:已弃用的优化器类型;
momentum:用到动量来进行权重优化的优化器动量;
momentum2:“Adam”优化器的动量参数;
rms_decay:“RMSProp”优化器的衰减参数,其计算方式为MeanSquare(t) = rms_decay*MeanSquare(t-1) + (1-rms_decay)*SquareGradient(t)
delta:RMSProp、AdaGrad、AdaDelta及Adam等优化器计算值为0时的最小限定值,用于防止分母为0等溢出错误;
weight_decay:权重衰减参数,用于防止模型过拟合;
regularization_type:正则化方式,默认为L2正则化,可选的有L0、L1及L2,用于防止模型过拟合;
clip_gradients:限定梯度的最大值,用于防止梯度过大导致梯度爆炸;

可选的caffe优化器类型:

到目前的为止,caffe提供了六种优化算法来求解最优参数,在solver配置文件中,通过设置type类型来选择:

  • Stochastic Gradient Descent (type: "SGD"或“0”)
  • Nesterov’s Accelerated Gradient (type: "Nesterov"或“1”)
  • Adaptive Gradient (type: "AdaGrad"或“2”)
  • RMSprop (type: "RMSProp"或“3”)
  • AdaDelta (type: "AdaDelta"或“4”)
  • Adam (type: "Adam"或“5”)

模型保存快照相关参数

snapshot: 1000
snapshot_prefix: "examples/finetune_pascal_detection/pascal_det_finetune"
snapshot_diff: false
snapshot_format: BINARYPROTO
snapshot_after_train: true

snapshot:保存模型的间隔,即每隔多少次训练迭代保存一次模型快照,默认为0;
snapshot_prefix:模型保存的路径及路径名,但无后缀扩展类型,如果不设定,则使用无扩展的prototxt路径和文件名来作为模型保存文件的路径和文件名;
snapshot_diff:是否保存推理结果中的差异,默认不保存,如果保存可帮助调试但会增大保存文件的大小;
snapshot_format:模型保存的类型,有“HDF5”和“BINARYPROTO”两种,默认为后者BINARYPROTO;
snapshot_after_train:默认为真,即训练后按照模型保存设定的参数来进行快照,否则直到训练结束都不会保存模型;

其他的solver参数

display: 1000
average_loss: 50
iter_size: 1
solver_mode: GPU
device_id: 0
random_seed: 600
debug_info: false
layer_wise_reduce: true
weights: "models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel"

display:训练迭代多少次后显示相关信息到终端,如果置0则不会有任何有效信息打印;
average_loss:显示上一次迭代平均损失值的间隔,默认为1,通常不设定;
iter_size:用于多少个batch_size后再更新梯度,通常在GPU内存不足时用于扩展batch_size,真时的batch_size为iter_size*batch_size大小;
solver_mode:训练时使用CPU还是GPU,默认为GPU;
device_id:使用GPU时的设备id号,默认为0;
random_seed:随机种子起始数字,默认为-1参考系统时钟;
debug_info:默认为假,如果置真,则会打印模型网络学习过程中的状态信息,可用于分析调试;
layer_wise_reduce:数据并行训练的重叠计算和通信,默认为真;
weights:预训练模型路径,可用于加载预训练模型,如果命令行训练时也有定义“--weights”则其优先级更高将会覆盖掉solver文件中该参数的配置,如果命令行训练时有定义“--snapshot”时则其具有最高优先级将会覆盖掉“--weights”,如果存在多个权重模型用于加载,可使用逗号进行分离表示;

以上,是目前在caffe-master分支上所能看到的所有solver配置参数,caffe配置过程中如有不清楚的地方可进行参考!

caffe solver 配置详解的更多相关文章

  1. Log4j配置详解(转)

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  2. logback 常用配置详解<appender>

    logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...

  3. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  4. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  5. logback配置详解3<filter>

    logback 常用配置详解(三) <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY ...

  6. logback配置详解2<appender>

    logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...

  7. log4j.properties配置详解

    1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ...

  8. Log4J日志配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  9. Windows下Nginx Virtual Host多站点配置详解

    Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 window ...

随机推荐

  1. == 和 equal 区别

    在初学 Java 时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = new String(" ...

  2. Nginx 下Thinkphp5伪静态

    server { listen 80; server_name all.bjed.com; root "F:\www\asdata"; location / { index ind ...

  3. [转]Hadoop参数汇总

    出自:https://segmentfault.com/a/1190000000709725 Hadoop参数大全 主要配置文件: core hdfs yarn mapred 重要性表示如下: 重要 ...

  4. Oracle GoldenGate常用配置端口

    1 简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数 ...

  5. k8s 关键字以及管理流程。

    一.流程图如下 二.用户通过kubectl提交需要运行的docker container(pod). 三.api server把请求存储在etcd里面. 四.scheduler(调度)扫描,分配机器. ...

  6. BZOJ1968 [Ahoi2005]COMMON 约数研究 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1968 题意概括 求 ΣF(i)   (1<=i<=n)N<=1000000 F( ...

  7. POJ 1228 (稳定凸包问题)

    <题目链接> <转载于  >>> > 首先来了解什么是稳定的凸包.比如有4个点: 这四个点是某个凸包上的部分点,他们连起来后确实还是一个凸包.但是原始的凸包可 ...

  8. 洛谷 P1507 NASA的食物计划 【二维费用背包】 || 【DFS】

    题目链接:https://www.luogu.org/problemnew/show/P1507 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力 ...

  9. 第一章 Python入门

    一. 语言 计算机语言:人和计算机之间沟通的语言计算机语言: 按照级别分类:(越高级月进阶人类) 机器语言: 汇编语言: 助记符 ag. add 2 3 高级语言: c, PHP, java , .n ...

  10. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-3 蒙特卡罗 (三)

    开学人倍忙,趁着第二周周末,我们继续图形相关的博客  Preface 今天我们来介绍一些理论方面的东西,为Monte Carlo 应用到我们的光线追踪器做铺垫 我们今天会介绍两章的东西,因为有一章内容 ...