Caffe代码导读(0):路线图
轉載自:
Caffe代碼導讀(0):路線圖 - 卜居 - 博客頻道 - CSDN.NET
??http://blog.csdn.net/kkk584520/article/details/41681085
【Caffe是什么?】
Caffe是一個深度學習框架,以代碼整潔、可讀性強、運行速度快著稱。代碼地址為:https://github.com/BVLC/caffe
【博客目的】
從接觸Caffe、編譯運行、閱讀代碼、修改代碼一路走來,學習到不少內容,包括深度學習理論,卷積神經網絡算法實現,數學庫MKL,計算機視覺庫OpenCV,C++模板類使用,CUDA程序編寫……
本博客目的是為初學者清除代碼閱讀中的障礙,結合官網文檔、融入個人理解、注重動手實踐。
【如何開始】
在開始閱讀Caffe代碼之前,應該做好下面幾件事:
(1)下載Caffe源碼;
(2)配置開發環境(安裝CUDA、OpenCV、boost、leveldb、lmdb、Python等,安裝步驟參考http://tutorial.caffe.berkeleyvision.org/installation.html);
(3)編譯;
(4)運行例子(如MNIST、CIFAR10、ImageNet等);
【路線圖】
(1)Caffe源碼閱讀路線圖應該是從CAFFE_ROOT/src/caffe/proto/caffe.proto開始,了解各類數據結構,主要是內存對象和序列化磁盤文件的一一對應關系,知道如何從磁盤Load一個對象到內存,以及如何將內存對象Save到磁盤,中間的過程實現都是由Protobuf自動完成的。
(2)第二步就是看頭文件,不用急于去看cpp文件,先理解整個框架。Caffe中類數目眾多,但脈絡十分清晰。在Testing時,最外層的類是Caffe::Net,包含了多個Caffe::Layer對象,而Layer對象派生出神經網絡多種不同層的類(DataLayer, ConvolutionLayer, InnerProductionLayer, AccurancyLayer等),每層會有相應的輸入輸出(Blob對象)以及層的參數(可選,Blob對象);Blob中包括了SyncedMemory對象,統一了CPU和GPU存儲器。自頂向下去看這些類,結合理論知識很容易掌握使用方法。
(3)第三步就是有針對性地去看cpp和cu文件了。一般而言,Caffe框架不需要修改,只需要增加新的層實現即可。例如你想自己實現卷積層,只需從ConvolutionLayer派生一個新類MyConvolutionLayer,然后將幾個虛函數改成自己的實現即可。所以這一階段關注點在算法上,而不是源碼本身。
(4)第四步就很自由了,可以編寫各類工具,集成到Caffe內部。在CAFFE_ROOT/tools/下面有很多實用工具,可以根據需要修改。例如從訓練好的模型中抽取參數進行可視化可以用Python結合matplot實現。
(5)接下來,如果想更深層次學習,最好是自己重新寫一遍Caffe(時間充裕的情況)。跳出現有的框架,重新構建自己的框架,通過對比就能學到更多內容。
總結
以上是生活随笔為你收集整理的Caffe代码导读(0):路线图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CS231n课程笔记翻译
- 下一篇: Caffe代码导读(1):Protobu