本文主要來自Caffe作者Yangqing Jia網站給出的examples。
@article{jia2014caffe, Author = {Jia, Yangqing and Shelhamer, Evan and Donahue, Jeff and Karayev, Sergey and Long, Jonathan and Girshick, Ross and Guadarrama, Sergio and Darrell, Trevor}, Journal = {arXiv preprint arXiv:1408.5093}, Title = {Caffe: Convolutional Architecture for Fast Feature Embedding}, Year = {2014} }
1.cuda-convnet
采用的網絡是Alex Krizhevsky的cuda-convnet,鏈接中詳細描述了模型的定義、所用的參數、訓練過程,在CIFAR-10上取得了很好的效果。
2.數據集的准備
本實驗使用的數據集是CIFAR-10,一共有60000張32*32的彩色圖像,其中50000張是訓練集,另外10000張是測試集。數據集共有10個類別,分別如下所示
下面假定caffe的根目錄是CAFFE_ROOT,在終端輸入命令下載數據集:
cd $CAFFE_ROOT ./data/cifar10/get_cifar10.sh #該腳本會下載二進制的cifar,並解壓,會在/data/cifar10中出現很多batch文件 ./examples/cifar10/create_cifar10.sh #運行后將會在examples中出現數據集./cifar10_xxx_lmdb和數據集圖像均值./mean.binaryproto
3.模型
CIFAR-10的卷積神經網絡模型由卷積層,pooling層,ReLU,非線性變換層,局部對比歸一化線性分類器組成。該模型定義在CAFFE_ROOT/examples/cifar10/cifar10_quick_train_test.prototxt
中。
4.訓練和測試“quick”模型
寫好網絡定義和solver以后,開始訓練模型。輸入下面的命令:
cd $CAFFE_ROOT ./examples/cifar10/train_quick.sh #先以0.001的學習率迭代4000次,再以0.01的學習率接着再迭代1000次,共5000次
可以看到每一層的詳細信息、連接關系及輸出的形式,方便調試。
初始化后開始訓練:
在solver的設置中,每100次迭代會輸出一次訓練損失,測試是500次迭代輸出一次:
訓練階段,lr是學習率,loss是訓練函數。測試階段,score 0是准確率,score 1是損失函數。最后的結果:
測試准確率大約有0.75,模型參數存儲在二進制protobuf格式的文件cifar10_quick_iter_5000
中。
參考CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt
的模型定義,就可以訓練其他數據了。
5.GPU使用
CIFAR-10比較小,可以用GPU訓練,當然也可以用CPU訓練。為了比較CPU和GPU的訓練速度,通過修改cifar*solver.prototxt
中的一行代碼來實現。
# solver mode: CPU or GPU solver_mode: CPU
- 1
- 2
6.”full”模型
同理可以訓練full模型,full模型比quick模型迭代次數多,一共迭代70000次,前60000次學習率是0.001,中間5000次學習率是0.0001,最后5000次學習率是0.00001。full模型的網絡層數也比quick模型多。
命令是:
cd $CAFFE_ROOT ./examples/cifar10/train_full.sh
- 1
- 2
測試准確率也比quick模型高,大約有0.82。
轉自 http://blog.csdn.net/liumaolincycle/article/details/47258937