caffe源碼解析-開篇

年前有一段時間在閱讀caffe源碼,近日又重新拾起。 目前發現了很多優秀的博客,例如: Caffe Source Code Analysis, Caffe代碼解析(1) 。尤其是Ldy 整理了一個開源項目BUPTLdy/Caffe_Code_Analysis 把一部分caffe源碼分析的資料做了總結,還提供了帶注釋源碼。

我個人學習知識的習慣是必須要寫出來 書寫是為了更好的思考,能教會別人才是真正的理解。 所以打算寫一個caffe源碼解析系列。很多內容都是引用自各位博主的文章,加上自己的理解和補充。如有不當,可私信交涉。

先說說caffe框架的整體結構:

摘自:Caffe Source Code Analysis

一般在介紹Caffe代碼結構的時候,大家都會說Caffe主要由Blob Layer Net 和 Solver這幾個部分組成。

  • Blob 主要用來表示網路中的數據,包括訓練數據,網路各層自身的參數(包括權值、偏置以及它們的梯度),網路之間傳遞的數據都是通過 Blob 來實現的,同時 Blob 數據也支持在 CPU 與 GPU 上存儲,能夠在兩者之間做同步。
  • Layer 是對神經網路中各種層的一個抽象,包括我們熟知的卷積層和下採樣層,還有全連接層和各種激活函數層等等。同時每種 Layer 都實現了前向傳播和反向傳播,並通過 Blob 來傳遞數據。
  • Net 是對整個網路的表示,由各種 Layer 前後連接組合而成,也是我們所構建的網路模型。
  • Solver 定義了針對 Net 網路模型的求解方法,記錄網路的訓練過程,保存網路模型參數,中斷並恢復網路的訓練過程。自定義 Solver 能夠實現不同的網路求解方式。

我的計劃是按照 alanse7en在 Caffe代碼解析(1) 中的思路

從外部介面逐漸深入,首先學習caffe的主函數的介面,然後是Solver特別是默認使用的SGDSolver的具體實現,調用了哪些Net的介面等;接下來學習和了解Net是如何封裝各個Layer來組成一個整體的網路,還有就是Net中如何利用Layer的介面完成數據的forward和backward的傳導;最後具體了解不同的Layer如何實現自定義的forward()和backward()介面,完成最重要的計算。雖然目前Caffe已經實現了多GPU並行化的功能,但是在這個學習的過程中,我將暫時忽略這一部分的代碼,而集中注意力到前面所述的這幾部分內容上。

所以目錄大概會是:

1. 輔助庫:Google Protocol Buffer , Google Flags,math_function 等

2. 命令行介面

3. solver

4. net

5. layer

6. blob

目前已經完成如下:

  • caffe源碼解析-開篇

  • Caffe源碼解析-輔助庫

  • caffe源碼解析-命令行介面

本篇將作為本系列文章的目錄持續更新。

書寫是為了更好的思考,能教會別人才是真正的理解。

參考:

  • Caffe代碼解析(1)

  • Caffe Source Code Analysis

  • BUPTLdy/Caffe_Code_Analysis

推薦閱讀:

谷歌人工智慧唇讀術完虐人類,僅憑5千小時電視節目!人類古老的技藝再次淪陷
TensorFlow 官方文檔譯者招募
保姆機器人被入侵變殺人機器?網路安全成共享經濟後的大風口!
如何評價udacity(優達學城)的人工智慧工程師課程(納米學位)?
機器學習原來這麼有趣!第三章:圖像識別【鳥or飛機】?深度學習與卷積神經網路

TAG:Caffe深度学习框架 | 深度学习DeepLearning | 人工智能 |