怎樣解讀Caffe源代碼
導讀
Caffe是如今非常流行的深度學習庫,能夠提供高效的深度學習訓練。該庫是用C++編寫。能夠使用CUDA調用GPU進行加速。可是caffe內置的工具不一定能夠滿足用戶的全部需求,所以閱讀源代碼並理解它,是非常有必要的。
這篇博文不是想把Caffe的全部函數都講一遍。由於Caffe的源代碼非常大,一本書都不一定能夠說清楚。
這里我僅僅是說說該怎么去閱讀源代碼,給大家提供一個思路和建議。讓大家能夠高速把握caffe的總體。出了問題該往哪個方向去思考。
caffe的編譯。網上已有非常多教程,大家能夠看看這篇。
Caffe的文件組織方式
| 文件夾 | 功能 |
|---|---|
| caffe-master | 根文件夾 |
| build | 編譯后的存放的文件夾 |
| data | examples使用到的全部數據都放在這里了 |
| docs | 這里有非常多解說caffe的文件,新手能夠把這里的東西好好看看。.md文件推薦使用atom軟件進行查看 |
| examples | 這里是放樣例的地方,能夠借着這些樣例好好理解下該怎么用caffe。特別是mnist |
| include | 這里存放着caffe的全部頭文件。閱讀頭文件能夠讓人非常快地把握全局而不考慮詳細實現 |
| matlab | 和 matcaffe有關的文件 |
| models | 這里有一些怎樣寫deploy文件的演示樣例,能夠用在訓練完畢后公布你的模型 |
| python | 和pycaffe有關的文件都放在這里了。 在python中使用caffe時。須要把該路徑給加上 |
| scripts | 一些幫助使用caffe的腳本 |
| src | 頭文件的實現都在這里 |
| tools | 一些經常使用的工具的源代碼,編譯后的可執行文件在build/tools中 |
理解演示樣例
examples里面由好幾個caffe的演示樣例,打開mnist看下,里面由非常多文件,我們先看readme.md。里面非常好的解說了怎樣執行這個模型,以及各個參數代表什么意思。
讀懂了這個的話,基本上你就會執行演示樣例了。
其它的演示樣例也能夠照這樣學習。
值得一提的是。學習這個部分時。能夠結合docs里面的解說。另一些 *.ipynb。
怎樣查看ipynb就不說了。自己查資料。
演示樣例執行得幾乎相同,你就能夠琢磨下怎樣使用deploy文件了。
理解caffe源代碼
為了更好的閱讀代碼,我建議按例如以下步驟使用Eclipse打開caffeproject:
- 配置下java。由於Eclipse須要java環境
- 下載eclipse cpp版
- 打開Eclipse,在菜單條File->import->c/c++->Existing code as Autotools project,按next,然后在browse中找到caffe-master。進入caffe-master后按確認。
這樣就導入了整個project了,可是不要嘗試使用Eclipse來編譯caffe。由於基本上都編譯不通過。
blob、layer、net、solver這幾個是要好好閱讀的(頭文件以及實現)。能夠結合這docs里面的文件看。看懂了這幾個文件。那么你基本上就大概知道caffe是怎樣執行的了。
可是你可能在執行演示樣例時非常納悶。每一個層那么多的參數。我該怎么知道它是什么意思。別操心。全部的這些信息都能夠在src/caffe/proto/caffe.proto中找到。看不懂的話,能夠查一下protobuf的使用。
上面的假設都看懂了,那就能夠好好研究下src/caffe/layers里面的文件了。把mnist用到的那些層好好看看它是怎么實現的。能夠先看cpp,有cuda基礎的就看看cu。
加入自己的層
加入自己的caffe層須要有一定的c++基礎。至少要明確什么是繼承。什么是虛函數,以及多線程的基本概念。能夠選擇繼承一個和自己功能最相近又滿足繼承關系的層。
詳細的步驟能夠參考下這篇博文。
使用pycaffe
使用pycaffe的話。我推薦使用cmake而不是直接的make編譯project。由於如今的版本號中make后的pycaffe經常出現找不到鏈接庫。
如今是看*.ipynb文件的時候了。里面詳細解說了怎樣使用caffe的python接口。出現故障的話就看源代碼。建議使用pycharm或者Eclipse Java版。
