从Caffe源码分析训练过程
来源:互联网 发布:java四个月培训找工作 编辑:程序博客网 时间:2024/05/18 06:01
下面开始来具体进行介绍。
先从Caffe.cpp文件中的train()函数开始说起。
1、创建一个SolverParameter solver_param用来保存求解(优化)的一些参数,SolverParameter这个数据结构具体被定义在caffe.proto文件中。
2、Caffe::readProtoFromTextFileDie(“solver.proto”,&solver_param)//读取solver.proto中的求解参数,并将其保存在solver_param中。
3、设置Solver模式—设置GPU/CPU进行训练求解。
4、创建shared_ptr<caffe::Solver<float>> solver(caffe::GetSolver<float>(solver_param))对象,这里是一种简单工厂的设计模式,caffe::GetSolver<float>(solver_param),根据solver_param参数的不同,创建不同的对象实例。在这里caffe默认创建一个SGD的对象实例,即SGD(SGD派生类)求解方式。
在这里具体实现有:
1、调用Solver类构造函数,调用Init()函数;
2、Init()函数中调用InitTrainNet(),这个函数创建训练网络Net,首先创建一个Net对象net_,这个net_对象会根据自己配置的网络结构文件创建不同类型的layer. InitTestNet()与InitTrainNet()类似。
3、调用PreSolve函数,这个函数功能是将参数push_back到history_,update_,temp_这三个vector中。
5、solver->Solve求解,主要是反复调用Net::ForwardBackward函数,因为误差来自于loss层,因此Net::ForwardBackward()只有一个参数。
Net::Forward函数函数,调用Net::ForwardPrefilled(), Net::ForwardPrefilled()调用Net::ForwardFromTo—这个函数将调用layers::Forward函数,因为在Net创建时,layers_对象就保存了每一层类型,因此每一个layers_[i]调用属于它自己类型的Forward和Backward函数(虚函数,多态)。
第一次写博客,首先先把caffe的整体训练的过程理清楚,接下来将写blob,layers,net,solver的具体实现啦。
- 从Caffe源码分析训练过程
- Caffe源码训练的基本过程
- caffe 训练过程源码层理解
- 【caffe源码研究】第二章:使用篇(6) : 训练过程分析工具
- Caffe 训练 cifar10 详细过程
- caffe训练过程中的可视化
- Caffe训练源码基本流程
- Caffe训练源码基本流程
- Caffe训练源码基本流程
- 从源码分析View的measure过程
- HashMap从源码角度分析遍历过程
- caffe源码 layer分析
- [caffe] 源码分析
- caffe:LSTM源码分析
- Caffe源码:blob 分析
- Caffe源码:math_functions 分析
- caffe利用snapshot从断点恢复训练
- Caffe训练过程:test_iter test_interval等概念
- 面试题 21
- 网站前端开发-一个网站页面的组成部分
- hdu2141 二分搜索+数据处理
- 手动释放ubuntu内存
- Ember.js 入门指南——绑定(bingding)
- 从Caffe源码分析训练过程
- python导入文件出现问题
- svn st 状态详解
- 谈测试面试(上)
- 前、中、后、序递归遍历二叉树以及非递归遍历
- Mysql开启远程连接方法
- 使用XIB实现嵌套自定义视图
- Web前端——JQuery的进阶(动态的显示某个div控件,选择器的构建)
- Android系统性能调优工具介绍