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