caffe中求解器介绍

本文内容参考自《21天实战Caffe》:

求解器负责对模型优化,它的KPI(Key Performance Indicator, 关键绩效指标)就是使损失函数达到全局最小。
 
特性如下:

  • 负责记录优化过程,创建用于学习的训练网络和用于评估学习效果的测试网络。
  • 调用Forward -> 调用Backward -> 更新权值,反复迭代优化模型。
  • 周期性地评估测试网络。
  • 在优化过程中保存模型、求解器状态等快照。

为了让权值从初始化状态向着更好的模型前进,求解器在每次迭代中完成如下工作:

  • 调用Net的前向传播函数来计算输出和损失函数。
  • 调用Net的反向传播函数来计算梯度。
  • 根据求解器方法,将梯度转换为权值增量。
  • 根据学习速率、历史权值、所用方法更新求解器状态。

Caffe的求解器有以下几种:

1. 随机梯度下降法(Stochastic Gradient Descent, SGD),最常用的一种

2. AdaDelta

3. 自适应梯度法(Adaptive Gradient, ADAGRAD)

4. Adam

5. Nesterow加速梯度法(Nesterov's Accelerated Gradient, NAG)

6. RMSprop

求解器其类中包含一个Net的指针,主要是实现了训练模型参数所采用的优化算法,其派生类就可以对整个网络进行训练。不同的模型训练方法通过重载函数ComputeUpdateValue( )实现计算update参数的核心功能。在进行整个网络训练过程(即运行Caffe训练某个模型)中,实际上是在运行caffe.cpp中的train( )函数,而这个函数实例化一个Solver对象,初始化后调用了Solver中的Solve( )方法,而Solve( )函数主要就是在迭代运行ComputeUpdateValue()和net_->Update()函数。 重要成员变量:shared_ptr<Net<Dtype> > net_

求解器会在Solver::Snapshot()和Solver::SnapshotSolverState()中将权值和它训练时的状态打快照。权值快照将学习到的模型导出,而求解器快照允许从特定快照点恢复训练。使用Solver::Restore()和Solver::RestoreSolverState()恢复训练。权值保存到.caffemodel文件中,求解器状态保存到.solerstate文件中。每个文件都有_iter_N后缀,用于标记打快照时的训练迭代次数。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页