Caffe程式碼結構
目錄結構
caffe資料夾下主要檔案: 這表示資料夾
data
用於存放下載的訓練資料docs
幫助文件example
一些程式碼樣例matlab
MATLAB介面檔案python
Python介面檔案model
一些配置好的模型引數scripts
一些文件和資料用到的指令碼
下面是核心程式碼資料夾:
tools
儲存的原始碼是用於生成二進位制處理程式的,caffe在訓練時實際是直接呼叫這些二進位制檔案。include
Caffe的實現程式碼的標頭檔案src
實現Caffe的原始檔
後面的學習主要圍繞後面兩個檔案目錄(include
和src
)下的程式碼展開
原始碼結構
由於include
和src
兩個目錄在層次上基本一一對應因此主要分析src
即可瞭解檔案結構。
這裡順便提到一個有意思的東西,我是在Sublime上面利用SublimeClang外掛分析程式碼的(順便推薦下這外掛,值得花點時間裝)。在配置的時候發現會有錯誤提示找不到”caffe/proto/caffe.pb.h”,去看了下果然沒有,但編譯的時候沒有報錯,說明是生成過後又刪除了,檢視Makefile檔案後發現這裡用了proto編譯的,所以在”src/caffe/proto”下面用CMakeLists檔案就可以編譯出來了。
src
gtest
google test一個用於測試的庫你make runtest時看見的很多綠色RUN OK就是它,這個與caffe的學習無關,不過是個有用的庫caffe
關鍵的程式碼都在這裡了test
用gtest測試caffe的程式碼util
資料轉換時用的一些程式碼。caffe速度快,很大程度得益於記憶體設計上的優化(blob資料結構採用proto)和對卷積的優化(部分與im2col相關)[1]。proto
即所謂的“Protobuf”[2],全稱“Google Protocol Buffer”,是一種資料儲存格式,幫助caffe提速。layers
深度神經網路中的基本結構就是一層層互不相同的網路了,這個資料夾下的原始檔以及目前位置“src/caffe”中包含的我還沒有提到的所有.cpp檔案就是caffe的核心目錄下的核心程式碼了。
原始碼主要關係
如上所言我們現在可以知道,caffe核心中的核心是下面的文件和檔案:(這部分目前不清楚的地方先參照別人的觀點)
- blob[.cpp .h] 基本的資料結構Blob類[3]。
- common[.cpp .h] 定義Caffe類
- internal_thread[.cpp .h] 使用boost::thread執行緒庫
- net[.cpp .h] 網路結構類Net
- solver[.cpp .h] 優化方法類Solver
- data_transformer[.cpp .h] 輸入資料的基本操作類DataTransformer
- syncedmem[.cpp .h] 分配記憶體和釋放記憶體類CaffeMallocHost,用於同步GPU,CPU資料
- layer_factory.cpp layer.h 層類Layer
layers
此資料夾下面的程式碼全部至少繼承了類Layer
Caffe的官方說明
根據Caffe官方文件介紹,caffe大致可以分為三層結構blob,layer,net。資料的儲存,交換以及操作都是以blob的形式進行的,layer是模型和計算的基礎,net整和並連線layer。solver則是模型的優化求解。
[1]: linger: 我所寫的CNN框架 VS caffe
[2]: Google Protocol Buffer 的使用和原理
[3]: caffe原始碼簡單解析——Blob(1)
相關文章
- caffe學習(1)caffe模型三種結構模型
- caffe study - 資料結構(1)資料結構
- caffe的基本資料結構資料結構
- (2)caffe總結之目錄結構
- caffe study- AlexNet 之結構篇
- particle雲架構程式碼結構架構
- java架構的程式碼結構Java架構
- 如何在Caffe中配置每一個層的結構
- caffe 網路結構幾個部分簡單介紹
- 程式碼結構-可維護性程式碼
- (14)caffe總結之Linux下Caffe如何除錯Linux除錯
- 現代 JavaScript 教程 — 程式碼結構JavaScript
- Golang 扁平專案程式碼結構Golang
- 程式碼目錄結構記錄
- 資料結構程式碼常用模板資料結構
- YYModel 原始碼歷險記:程式碼結構原始碼
- 關於 Go 程式碼結構的思考Go
- 如何結構化我們的程式碼
- 優化你的程式碼結構 --- MVP優化MVP
- 淺談PHP程式碼設計結構PHP
- Vector底層結構和程式碼解析
- 程式結構
- (11)caffe總結之命令列解析命令列
- HongHu雲架構common-service程式碼結構分析架構
- (四)構建dubbo分散式平臺-maven程式碼結構分散式Maven
- Spring Cloud雲服務架構 - HongHu程式碼結構構建SpringCloud架構
- 支付寶程式碼示例結構說明
- Vert.x 程式碼結構最佳實踐
- jQuery 學習筆記:jQuery 程式碼結構jQuery筆記
- 重構遺留程式碼(11):終結篇
- 深入理解flutter的程式碼結構:元件Flutter元件
- 資料結構 - 圖之程式碼實現資料結構
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- Spring Cloud雲服務架構 - 雲架構程式碼結構構建SpringCloud架構
- 整合spring cloud雲服務 - HongHu架構程式碼結構構建SpringCloud架構
- (8)caffe總結之solver及其配置
- [AI開發]零程式碼分析影片結構化類應用結構設計AI
- PostgreSQL:程式結構SQL