本文系轉載,具體出處不詳
目錄結構
caffe文件夾下主要文件:
data
用於存放下載的訓練數據docs
幫助文檔example
一些代碼樣例matlab
MATLAB接口文件python
Python接口文件model
一些配置好的模型參數scripts
一些文檔和數據用到的腳本
下面是核心代碼文件夾:
tools
保存的源碼是用於生成二進制處理程序的,caffe在訓練時實際是直接調用這些二進制文件。include
Caffe的實現代碼的頭文件src
實現Caffe的源文件
後面的學習主要圍繞後面兩個文件目錄(include
和src
)下的代碼展開
源碼結構
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