caffe中超参数文件讲解

以lenet_solver.prototxt为例

#网络模型描述文件
#也可以用train_net和test_net来对训练模型和测试模型分别设定
#train_net: "xxxxxxxxxx"
#test_net: "xxxxxxxxxx"
net: "E:/Caffe-windows/caffe-windows/examples/mnist/lenet_train_test.prototxt"
#测试迭代的次数,这个参数要跟test_layer结合起来考虑,在test_layer中一个batch是100,而总共的测试图片是10000张
#所以这个参数就是10000/100=100
test_iter: 100
#每训练500次进行一次测试,每次测试都是以全部的测试集来测试
test_interval: 500
#学习率
base_lr: 0.01
#动力
momentum: 0.9
#type:SGD #优化算法的选择。这一行可以省略,因为默认值就是SGD,Caffe中一共有6中优化算法可以选择
#Stochastic Gradient Descent (type: "SGD"), 在Caffe中SGD其实应该是Momentum
#AdaDelta (type: "AdaDelta"),
#Adaptive Gradient (type: "AdaGrad"),
#Adam (type: "Adam"),
#Nesterov’s Accelerated Gradient (type: "Nesterov")
#RMSprop (type: "RMSProp")
#权重衰减项,其实也就是正则化项。作用是防止过拟合
weight_decay: 0.0005
#学习率调整策略
#如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power),其中iter表示当前的迭代次数
lr_policy: "inv"
gamma: 0.0001
power: 0.75
#每训练100次屏幕上显示一次,如果设置为0则不显示
display: 100
#最大迭代次数
max_iter: 2000
#快照。可以把训练的model和solver的状态进行保存。每迭代5000次保存一次,如果设置为0则不保存
snapshot: 5000
snapshot_prefix: "E:/Caffe-windows/caffe-windows/examples/mnist/models"
#选择运行模式
solver_mode: GPU

首先说明一个概念:在caffe中的一次迭代iterration指的是一个batch,而不是一张图片。下面就主要说下几个概念

epoch:使用整个训练样本集传播一次.一次传播 = 一次前向传播 + 一次后向传播。但是考虑到内存不够用的问题,训练样本们往往并不是全都一起拿到内存中去训练,而是一次拿一个batch去训练,一个batch包含的样本数称为batch size。

iteration:使用batch size个样本传播一次。同样,一次传播=一次前向传播+一次后向传播。

test_iter: 在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)=测试集的大小,测试集batchsize可以在prototx文件里设置

test_interval:interval是区间的意思,所有该参数表示:训练的时候,每迭代500次就进行一次测试。

caffe在训练的过程是边训练边测试的。训练过程中每500次迭代(也就是32000个训练样本参与了计算,batchsize为64),计算一次测试误差。计算一次测试误差就需要包含所有的测试图片(这里为10000),这样可以认为在一个epoch里,训练集中的所有样本都遍历以一遍,但测试集的所有样本至少要遍历一次,至于具体要多少次,也许不是整数次,这就要看代码,大致了解下这个过程就可以了。
eg. 我们有10000个训练样本,batch size为100,那么完成一次epoch就需要100个iteration。
但是在caffe中没有epoch这个概念

需要补充的是,在深度学习领域中,常用随机梯度下降算法(Stochastic Gradient Descent, SGD)训练深层结构,它有一个好处就是并不需要遍历全部的样本,当数据量非常大时十分有效。此时,可根据实际问题来定义epoch,例如定义10000次迭代为1个epoch,若每次迭代的batch_size设为256,那么1个epoch相当于过了2560000个训练样本。

一、weight decay(权值衰减)使用的目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。

二、momentum是梯度下降法中一种常用的加速技术。对于一般的SGD,其表达式为

                                                         x←x−α∗dx

,x沿负梯度方向下降。而带momentum项的SGD则写生如下形式: 

                                                         v=β∗v−a∗dx

                                                         x←x+v
其中β即momentum系数,通俗的理解上面式子就是,如果上一次的momentum(即vv)与这一次的负梯度方向是相同的,那这次下降的幅度就会加大,所以这样做能够达到加速收敛的过程。(以上的推到,我不是很明白为何能加速,希望有大佬能解答)

三 、lr_policy

参考:图示caffe的solver中不同的学习策略(lr_policy)

// 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. 

1、fixed 固定策略

故名思议就是学习率始终是一个固定值。

base_lr: 0.01
lr_policy: "fixed"
max_iter: 400000

fixed学习率的更新公式:lr=base_lr

fixed学习率曲线如下图所示:

2、step 均匀分步策略

base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 30
max_iter: 100

step学习率的更新公式:lr=base_lr*gamma^(floor(iter/stepsize))

step学习率曲线如下图所示:

3、exp学习策略

base_lr: 0.01
lr_policy: "exp"
gamma: 0.1
max_iter: 100

exp学习率的更新公式:lr= base_lr*gamma^iter

exp学习率曲线如下图所示:

4、multistep 多分步或不均匀分步

base_lr: 0.01
lr_policy: "multistep"
gamma: 0.5
stepvalue: 1000
stepvalue: 3000
stepvalue: 4000
stepvalue: 4500
stepvalue: 5000
max_iter: 6000

multistep 学习率的更新公式:每一次学习率下降到之前的 gamma 倍

multistep 学习率曲线如下图所示:

5、inv 学习策略

base_lr: 0.01
lr_policy: "inv"
gamma: 0.1
power: 0.75
max_iter: 10000

inv 学习率的更新公式:base_lr * (1 + gamma * iter) ^ (- power)

inv 学习率曲线如下图所示:

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

5、poly学习策略

base_lr: 0.01
lr_policy: "poly"
power: 0.5
max_iter: 10000

poly学习率的更新公式:lr = base_lr *(1 - iter/max_iter) ^ (power)

poly学习率曲线如下图所示:

学习率曲线的形状主要由参数 power 的值来控制。当 power = 1 的时候,学习率曲线为一条直线。当 power < 1 的时候,学习率曲线是凸的,且下降速率由慢到快。当 power > 1 的时候,学习率曲线是凹的,且下降速率由快到慢。

6、sigmoid学习策略

base_lr: 0.01
lr_policy: "sigmoid"
gamma: -0.001
stepsize: 5000
max_iter: 10000

sigmoid学习率的更新公式:lr = base_lr *( 1/(1 + exp(-gamma * (iter - stepsize))))

sigmoid学习率曲线如下图所示:

参数 gamma 控制曲线的变化速率。当 gamma < 0 时,才能控制学习率曲线呈下降趋势,而且 gamma 的值越小,学习率在两头变化越慢,在中间区域变化越快。 

参考:

  1. Caffe训练过程:test_iter test_interval等概念
  2. caffe之epoch和iteration
  3. caffe 中 Batch Size、Iterations、epoch 的理解、设置
  4. 深度学习中关于epoch的几个词汇的理解
  5. 超参数momentum与weight-decay的作用
  6. caffe:lr_policy用法
  7. Caffe中学习率策略应如何选择
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值