Solver:网络的求解策略
Solver 主要是实现了训练模型参数所采用的优化算法,根据优化算法的不同会派生不同的类,而基于这些子类就可以对网络进行正常的训练过程。
Solver的重要成员变量
shared_ptr<Net<Dtype> > net_;//net对象
protected的成员:shared_ptr net_ 是一个指向Net类型的智能指针(shared_ptr),Solver正是通过这个指针来和网络Net来交互并完成模型的优化。不同的子类分别实现了不同的优化方法:SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver和AdamSolver。默认使用的SGDSolver方法优化。
Solver的重要成员函数
void Step(int iters)
对已初始化后的网络进行固定次数的训练迭代过程
不同的模型训练方法通过重载函数ComputeUpdateValue( )实现计算update参数的核心功能
最后当进行整个网络训练过程(也就是你运行Caffe训练某个模型)的时候,实际上是在运行caffe.cpp中的train( )函数,而这个函数实际上是实例化一个Solver对象,初始化后调用了Solver中的Solve( )方法。而这个Solve( )函数主要就是在迭代运行下面这两个函数,就是刚才介绍的哪几个函数。
ComputeUpdateValue();
net_->Update();