补:主要函数运行顺序: main>>GetBrewFunction>>train>>Solve

從main函數說起:

1、gflags庫中爲main函數設置usage信息 是google的一個開源的處理命令行的參數的庫。在使用命令行參數的文件夾文件中(源文件或頭文件),首先使用以下定義語句進行變量的定義。 DEFINE_int32, DEFINE_int64, DEFINE_bool等, 語法爲:DEFINE_int32(name,default_value,"description")。接着你就可以使用FLAGS_name變量了,這些變量的值則是由命令行參數傳遞,無則爲默認值,在其他代碼文件中若想使用該命令參數,可以用DECLARE_int32(name)聲明(name爲int32類型,也可以使用其它支持類型)

2、main函數中,出現了GetBrewFunction函數,在標準指令下,main函數將執行GetBrewFunction函數。

在caffe.cpp中定義了一些BrewFunction類的函數,通过RegisterBrewFunction(function)注册进容器g_brew_map:

int device_query(): 用来查询GPU信息

int train(): 训练神经网络

int time(): 测试model执行时间

GetBrewFunction函数通过caffe命令后第一个参数在g_brew_map容器中查找对应函数指针并返回,简单来说就是决定之后的操作是Train or Test。

3、train函数

-----------------------------------------------------------------------------------

检查 --solver --snapshot --weight 并输出消息 利用glog庫输出

-----------------------------------------------------------------------------------

实例化 SolverParameter 类,该类保存solver参数和相对应的方法 将-solver指定的solver.prototxt文件内容解析到solver_param中,该函数声明在include/caffe/util/upgrade_proto.hpp中,是现在src/caffe/util/upgrade_proto.cpp中

-----------------------------------------------------------------------------------

处理snapshot,stop or none 信号,其声明在include/caffe/util/signal_Handler.h中

GetRequestedAction在caffe.cpp中,将‘stop’,'snapshot','none'转换为标准信号,即解析:

caffe::SignalHandler singal_handler(GetRequestedAction(FLAGS_sigint_effect),GetRequestedAction(FLAGS_sighup_effect));

-----------------------------------------------------------------------------------

从snapshot或caffemodel中恢复train:

solver->Restore

-----------------------------------------------------------------------------------

开始优化

solver->Solve();

优化完成

Caffe 源碼閱讀(三) caffe.cpp的更多相关文章

  1. Caffe 源碼閱讀(五) Solver.cpp

    1.Solver类两个构造函数 Solver(const SolverParameter& param) Solver(const string& param_file) 初始化两个类 ...

  2. Caffe 源碼閱讀(六) data_layer.cpp

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  3. Caffe 源碼閱讀(四) Layer.hpp Layer.cpp

    1.Setup() Layer初始化参数 (1.完成层参数的读入.处理 2.设置底层顶层的shape,在前向传播前完成) InitMutex CheckBolbCounts: LayerSetup:d ...

  4. Caffe 源碼閱讀(六) InternalThread

    类InternalThread是一个虚类,是Caffe中的多线程接口,其本质是为封装了boost::thread 看源码可以得到以下结论: 1.每个派生类都需要实现一个InternalThreadEn ...

  5. Caffe 源碼閱讀(一) Blob.hpp

    Blob 四維度(N K H W) N : SGD 一次 mini-batch 個數 K : 如果是圖片表示圖片通道數 如果是中間結果 則理解爲 feature map 個數 H.W : 如果是圖片理 ...

  6. Caffe 源碼閱讀(二) SyncedMemory.hpp

    1. to_cpu 數據由現存同步到內存 2. to_gpu 數據由內存同步到顯存 3. cpu_str_ 內存指針 4. gpu_str_ 顯存指針 5. size_ 數據大小 6. own_cpu ...

  7. caffe源码阅读(一)convert_imageset.cpp注释

    PS:本系列为本人初步学习caffe所记,由于理解尚浅,其中多有不足之处和错误之处,有待改正. 一.实现方法 首先,将文件名与它对应的标签用 std::pair 存储起来,其中first存储文件名,s ...

  8. Caffe源码阅读(1) 全连接层

    Caffe源码阅读(1) 全连接层 发表于 2014-09-15   |   今天看全连接层的实现.主要看的是https://github.com/BVLC/caffe/blob/master/src ...

  9. caffe源码学习

    本文转载自:https://buptldy.github.io/2016/10/09/2016-10-09-Caffe_Code/ Caffe简介 Caffe作为一个优秀的深度学习框架网上已经有很多内 ...

随机推荐

  1. 《BI项目笔记》无法解密受保护的 XML 节点“DTS:Password” 解决办法

    说明: 无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“该项不适于在指定状态下使用.”.可能您无权访问此信息.当发生加密错误时会出现此错误.请确保提供正确的密 ...

  2. jQuery实现两个按钮的位置互换

    页面上有2个按钮A和B.点击按钮A和按钮B互换位置 ,点击按钮B和按钮A互换位置.应该如何实现? html代码如下: <body> <!--页面上有2个按钮A和B. 点击按钮A和按钮 ...

  3. 《浅谈磁盘控制器驱动》,磁盘控制器驱动答疑解惑![2012.1.29完结]by skyfree

    <浅谈磁盘控制器驱动>,磁盘控制器驱动答疑解惑![2012.1.29完结]  https://www.itiankong.net/thread-178655-1-1.html Skyfre ...

  4. SQL语句中SUM与COUNT的区别

    SUM是对符合条件的记录的数值列求和 COUNT 是对查询中符合条件的结果(或记录)的个数 例如: 表fruit id     name    price 1     apple     3.00 2 ...

  5. C#虚方法

    若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法.虚方法与非虚方法的最大不同是,虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的(以后再讲)虚方法的特点:虚方法前不允 ...

  6. ASP.NET 程序中删除文件夹导致session失效解决问题

    在Global中  Application_Start 添加 如: void Application_Start(object sender, EventArgs e)    {        //在 ...

  7. Gradient Boost Decision Tree(GBDT)中损失函数为什么是对数形式

    由于最近要经常用到XGBOOST的包,不免对相关的GBDT的原理又重新学习了一遍, 发现其中在考虑损失函数的时候,是以对数log进行度量的,囿于误差平方和函数的印象 那么为什么是对数呢?可能是下面的原 ...

  8. php WIN下编译注意问题

    下载VC2012,安装打开CMD 须运行 vcvars32.bat (初始化VC编译环境) 下载PHP WIN编译包:http://windows.php.net/downloads/php-sdk/ ...

  9. 便携式文件夹加密器 lockdir 5.74

    便携式文件夹加密器 lockdir 5.74下载地址 http://www.hoposoft.com/lock/ 注册码两枚: 注册名:Long 注册码:6088805000000E7E25F09A6 ...

  10. oracle job create table insert into

    create or replace procedure proc_tzyj is begin insert into t_trade_activity@dw3_link.regress.rdbms.d ...