caffe源码解析之solver

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yudiemiaomiao/article/details/77477217

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();

猜你喜欢

转载自blog.csdn.net/yudiemiaomiao/article/details/77477217