Caffe中求解器(Solver)介绍

来源:互联网 发布:表白html源码 编辑:程序博客网 时间:2024/06/05 22:59

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

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

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

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

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

1 0