為了程序的簡潔,在caffe中是不帶練習數據的,因此需要自己去下載。但在caffe根目錄下的data文件夾里,作者已經為我們編寫好了下載數據的腳本文件,我們只需要聯網,運行這些腳本文件就行了。
注意:在caffe中運行所有程序,都必須在根目錄下進行,否則會出錯
1、mnist實例
mnist是一個手寫數字庫,由DL大牛Yan LeCun進行維護。mnist最初用於支票上的手寫數字識別, 現在成了DL的入門練習庫。征對mnist識別的專門模型是Lenet,算是最早的cnn模型了。
mnist數據訓練樣本為60000張,測試樣本為10000張,每個樣本為28*28大小的黑白圖片,手寫數字為0-9,因此分為10類。
首先下載mnist數據,假設當前路徑為caffe根目錄
# sudo sh data/mnist/get_mnist.sh
運行成功后,在 data/mnist/目錄下有四個文件:
train-images-idx3-ubyte: 訓練集樣本 (9912422 bytes)
train-labels-idx1-ubyte: 訓練集對應標注 (28881 bytes)
t10k-images-idx3-ubyte: 測試集圖片 (1648877 bytes)
t10k-labels-idx1-ubyte: 測試集對應標注 (4542 bytes)
這些數據不能在caffe中直接使用,需要轉換成LMDB數據
# sudo sh examples/mnist/create_mnist.sh
如果想運行leveldb數據,請運行 examples/siamese/ 文件夾下面的程序。 examples/mnist/ 文件夾是運行lmdb數據
轉換成功后,會在 examples/mnist/目錄下,生成兩個文件夾,分別是mnist_train_lmdb和mnist_test_lmdb,里面存放的data.mdb和lock.mdb,就是我們需要的運行數據。
接下來是修改配置文件,如果你有GPU且已經完全安裝好,這一步可以省略,如果沒有,則需要修改solver配置文件。
需要的配置文件有兩個,一個是lenet_solver.prototxt,另一個是train_lenet.prototxt.
首先打開lenet_solver_prototxt
# sudo vi examples/mnist/lenet_solver.prototxt
根據需要,在max_iter處設置最大迭代次數,以及決定最后一行solver_mode,是否要改成CPU
保存退出后,就可以運行這個例子了
# sudo time sh examples/mnist/train_lenet.sh
CPU運行時候大約13分鍾,GPU運行時間大約4分鍾,GPU+cudnn運行時候大約40秒,精度都為99%左右
2、cifar10實例
cifar10數據訓練樣本50000張,測試樣本10000張,每張為32*32的彩色三通道圖片,共分為10類。
下載數據:
# sudo sh data/cifar10/get_cifar10.sh
運行成功后,會在 data/cifar10/文件夾下生成一堆bin文件
轉換數據格式為lmdb:
# sudo sh examples/cifar10/create_cifar10.sh
轉換成功后,會在 examples/cifar10/文件夾下生成兩個文件夾,cifar10_train_lmdb和cifar10_test_lmdb, 里面的文件就是我們需要的文件。
為了節省時間,我們進行快速訓練(train_quick),訓練分為兩個階段,第一個階段(迭代4000次)調用配置文件cifar10_quick_solver.prototxt, 學習率(base_lr)為0.001
第二階段(迭代1000次)調用配置文件cifar10_quick_solver_lr1.prototxt, 學習率(base_lr)為0.0001
前后兩個配置文件就是學習率(base_lr)和最大迭代次數(max_iter)不一樣,其它都是一樣。如果你對配置文件比較熟悉以后,實際上是可以將兩個配置文件合二為一的,設置lr_policy為multistep就可以了。
base_lr: 0.001 momentum: 0.9 weight_decay: 0.004 lr_policy: "multistep" gamma: 0.1 stepvalue: 4000 stepvalue: 5000
運行例子:
# sudo time sh examples/cifar10/train_quick.sh
GPU+cudnn大約45秒左右,精度75%左右。