Caffe(http://caffe.berkeleyvision.org/)是一個清晰而高效的深度學習框架,其作者是博士畢業於UC Berkeley的賈揚清(http://daggerfs.com/),他眼下在Google工作。
Caffe是純粹的C++/CUDA架構。支持命令行、Python和MATLAB接口;能夠在CPU和GPU直接無縫切換:
Caffe::set_mode(Caffe::GPU);
Caffe的優勢
1. 上手快:模型與對應優化都是以文本形式而非代碼形式給出。
Caffe給出了模型的定義、最優化設置以及預訓練的權重。方便馬上上手。
2. 速度快:可以執行最優秀的模型與海量的數據。
Caffe與cuDNN結合使用。測試AlexNet模型,在K40上處理每張圖片僅僅須要1.17ms.
3. 模塊化:方便擴展到新的任務和設置上。
能夠使用Caffe提供的各層類型來定義自己的模型。
4. 開放性:公開的代碼和參考模型用於再現。
5. 社區好:能夠通過BSD-2參與開發與討論。
Caffe的網絡定義
Caffe中的網絡都是有向無環圖的集合。能夠直接定義:
name:"dummy-net" layers {name: "data" …} layers {name: "conv" …} layers {name: "pool" …} layers {name: "loss" …}
數據及其導數以blobs的形式在層間流動。
Caffe的各層定義
Caffe層的定義由2部分組成:層屬性與層參數,比如
name:"conv1" type:CONVOLUTION bottom:"data" top:"conv1" convolution_param{ num_output:20 kernel_size:5 stride:1 weight_filler{ type: "xavier" } }
這段配置文件的前4行是層屬性,定義了層名稱、層類型以及層連接結構(輸入blob和輸出blob);而后半部分是各種層參數。
Blob
Blob是用以存儲數據的4維數組,比如
對於數據:Number*Channel*Height*Width
對於卷積權重:Output*Input*Height*Width
對於卷積偏置:Output*1*1*1
訓練網絡
網絡參數的定義也很方便,能夠任意設置對應參數。
甚至調用GPU運算僅僅須要寫一句話:
solver_mode:GPU
Caffe的安裝與配置
Caffe須要預先安裝一些依賴項。首先是CUDA驅動。不論是CentOS還是Ubuntu都預裝了開源的nouveau顯卡驅動(SUSE沒有這樣的問題),假設不禁用。則CUDA驅動不能正確安裝。以Ubuntu為例。介紹一下這里的處理方法,當然也有其它處理方法。
在sudo vi/etc/modprobe.d/blacklist.conf 添加一行 :blacklist nouveau sudoapt-get --purge remove xserver-xorg-video-nouveau #把官方驅動徹底卸載: sudoapt-get --purge remove nvidia-*#清除之前安裝的不論什么NVIDIA驅動 sudo service lightdm stop#進命令行,關閉Xserver sudokill all Xorg
安裝了CUDA之后。依次依照官網提示(http://caffe.berkeleyvision.org/installation.html)安裝BLAS、OpenCV、Boost就可以。
Caffe跑跑MNIST試試
在Caffe安裝文件夾之下。首先獲得MNIST數據集:
#cddata/mnist #sh get_mnist.sh生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把數據轉化成leveldb格式:
# cdexamples/lenet #sh create_mnist.sh
訓練網絡:
</pre><pre name="code" class="cpp">#sh train_lenet.sh
歡迎參與討論並關注本博客和微博以及知乎個人主頁興許內容繼續更新哦~
轉載請您尊重作者的勞動。完整保留上述文字以及文章鏈接,謝謝您的支持。