caffe相关代码注释:https://github.com/QueenJuliaZxx/Caffe
1、求解器Solver
目的:让损失函数达到全局最小;
特性:
- 负责记录优化过程,创建用于学习的训练网络和用于评估学习效果的测试网络;
- 调用Forward-->调用Backword-->更新权值,反复迭代优化模型;
- 周期性地评估测试网络;
- 在优化过程中为模型、求解器状态打快照;
为了让权值从初始化状态向更好的模型前进,求解器在每次迭代中做了如下事情:
- 调用Net的前向传播函数来计算输出和损失函数;
- 调用Net的反向传播函数来计算梯度;
- 根据求解器方法,将梯度转换为权值增量;
- 根据学习速率、你是全职、所用方法更新求解器状态;
2、Solver的实现
- 学习速率(LR):负梯度的权重-->今天学了多少;
- 遗忘因子(Momentum):权值更新历史Vt的权重-->以前学过的知识记得多少;
注:如果训练发散(损失函数值变得非常大,甚至出现NaN或Inf),试着减小base_lr,然后重新训练,直到不再发散。
2.2、数据结构描述
(1).查看Solver描述信息;打开 caffe/src/proto/caffe.proto
(2).查看Solver类声明;打开 include/caffe/solver.hpp
(3).查看Solver类实现;打开 src/caffe/solvers/xx_solver.cpp
2.3、训练过程
求解器核心函数Solve()-->求解器迭代过程Step()-->SGDSolver中ApplyUpdate()实现...
2.4、预测过程
Solver里面test_nets_切换到新数据集进行预测,调用TestALL();
2.5、Solver的快照和恢复功能
求解器在Solver::Snapshot()和Solver::SnapshotSolverState()中将权值和训练时的状态打快照;
权值快照将学习到的模型导出,而求解器快照允许将特定快照点恢复训练,求解器在Solver::Restore ()和Solver::RestoreSolverState()恢复训练, 权值保存到*.caffemodel文件中,求解器保存到*.solverstate文件中,每个文件都有_iter_N后缀。
具体的实现还是得仔细看看相关文档!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度学习21天实战caffe学习笔记《12:Caffe 最优化求解过程》 - Python技术站