Caffe代碼閱讀筆記(1)_Caffe

來源:互聯網
上載者:User
1. 程式入口

程式的入口在/CAFFE_ROOT/tools/caffe.cpp中,即 main()函數所在的類檔案。在/tools/目錄下,提供了架構的工具。但是,訓練相關的幾個工具,如train,test,finetune已經被整合到了/caffe.cpp中。

我們想知道的是,一條標準的訓練指令:
./build/tools/caffe train --solver=models/xx_caffenet/solver.prototxt, 當我們點下斷行符號鍵後,到底發生了什麼。 1.1 caffe.cpp概述

該類提供了使用者指令的響應介面。它所支援的命令包括:
- train:訓練或者finetune一個模型
- test : Score a model
- device_query : Show GPU diagnostic information
- time :Benchmark model execution time

在類檔案中,上述命令分別對應著四個函數:train(),test(),time(),device_query()。main函數作為所有命令的入口,通過解析命令列,將命令匯入相應的處理流程。 1.2 解析命令列

命令列解析是一個需要耐心且容易出錯的工作。大概是為了方便,架構使用了一個叫做gflags的開源庫。

gflags是Google開源的一個處理命令列參數的開源庫。它使用C++開發,具備Python介面。該架構使用方便,但不支援參數簡寫。

該庫的使用方法也比較簡單。
1. 包含標頭檔#include <gflags/gflags.h>
2. 將需要的命令列參數使用gflags的宏定義在檔案當中。該宏定義是全域的,格式如DEFINE_xxxx(變數名,預設值,description)
3. 支援的參數類型如下:
- DEFINE_bool : boolean
- DEFINE_int32 :32-bit integer
- DEFINE_int64 :64-bit integer
- DEFINE_string:C++ string
- DEFINE_uint64 :64-bit unsigned integer
- DEFINE_double:double
4. gflags預設已定義了-h和--version,可通過gflags::SetVersionString和gflags::SetUsageMessage來設定。更加詳細的資訊可搜尋網路,或者直接參考https://github.com/gflags.

有了以上這些介紹,代碼中的一些相關處就可以明白是怎麼回事了。例如caffe::GlobalInit(&argc, &argv);這行代碼,就是初始化了gflags的相關內容。 1.3 引導到處理流程

如果命令中使用了python,在支援Python的情況下,會響應Python的命令,否則直接拋出錯誤資訊。標準的流程中,使用函數GetBrewFunction(caffe::string(argv[1]))();來匯入到命令流程中去。

static BrewFunction GetBrewFunction(const caffe::string& name)函數,返回的是一個函數指標 「typedef int (*BrewFunction)()」。函數指標是存放在一個map中,應該是在宏定義展開時註冊上的。

所以,可以看到每個命令函數最後,都有一句RegisterBrewFunction(name)。

比如,caffe train ......命令,最終程式會將train提取出來,映射到已經註冊好的train()函數,並執行之。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.