清晰高效的深度學習(Deep Learning)框架:Caffe
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
訓練網絡:
#sh train_lenet.sh
歡迎參與討論并關注 本博客 和 微博 以及 知乎個人主頁 后續內容繼續更新哦~
轉載請您尊重作者的勞動,完整保留 上述文字 以及 文章鏈接 ,謝謝您的支持!
原文 http://blog.csdn.net/ycheng_sjtu/article/details/39693655