1. 程式人生 > >Caffe自帶例子執行

Caffe自帶例子執行


首先說明一點,在caffe中執行所有程式,都必須在CAFFE的根目錄下進行,否則會出錯。

兩個例子分別是mnist和cifar10,mnist被稱為程式設計界的hello world。

1.mnist例子

介紹

mnist是一個手寫數字庫,由DL大牛Yan LeCun進行維護。mnist最初用於支票上的手寫數字識別, 現在成了DL的入門練習庫。徵對mnist識別的專門模型是Lenet,算是最早的cnn模型了。

mnist資料訓練樣本為60000張,測試樣本為10000張,每個樣本為28*28大小的黑白圖片,手寫數字為0-9,因此分為10類

下載

假設已經在caffe的根目錄下了,現在開始下載:
<span style="font-size:18px;"># sudo sh data/mnist/get_mnist.sh</span>

執行成功後,在 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資料

<span style="font-size:18px;"># sudo sh examples/mnist/create_mnist.sh</span>

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

<span style="font-size:18px;"># sudo vi examples/mnist/lenet_solver.prototxt</span>

根據需要,在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)不一樣,其它都是一樣。
執行例子:

# sudo time sh examples/cifar10/train_quick.sh
GPU+cudnn大約45秒左右,精度75%左右。