轉自:http://suanfazu.com/t/caffe/281
Caffe是一個清晰而高效的深度學習框架,其作者是博士畢業於UC Berkeley的賈揚清,目前在Google工作。
Caffe是純粹的C++/CUDA架構,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接無縫切換:
Caffe::set_mode(Caffe::GPU);
Caffe的優勢
- 上手快:模型與相應優化都是以文本形式而非代碼形式給出。
Caffe給出了模型的定義、最優化設置以及預訓練的權重,方便立即上手。 - 速度快:能夠運行最棒的模型與海量的數據。
Caffe與cuDNN結合使用,測試AlexNet模型,在K40上處理每張圖片只需要1.17ms. - 模塊化:方便擴展到新的任務和設置上。
可以使用Caffe提供的各層類型來定義自己的模型。 - 開放性:公開的代碼和參考模型用於再現。
- 社區好:可以通過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 sudo kill all Xorg
安裝了CUDA之后,依次按照Caffe官網安裝指南1.3K安裝BLAS、OpenCV、Boost即可。
Caffe跑跑MNIST試試
在Caffe安裝目錄之下,首先獲得MNIST數據集:
cd data/mnist sh get_mnist.sh
生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把數據轉化成leveldb格式:
sh examples/mnist/create_mnist.sh
訓練網絡:
sh train_lenet.sh