1. 程式人生 > >跟我上手深度學習: 五分鐘嘗試第一個深度學習(Caffe)訓練和影象分類(詳細圖文步驟)

跟我上手深度學習: 五分鐘嘗試第一個深度學習(Caffe)訓練和影象分類(詳細圖文步驟)

申請深度學習的開發環境

申請了使用者帳號後,進入“Supervessel Cloud”申請虛擬機器“Apply VM"。如下圖:

登陸之後,進入雲平臺的控制檯(dashboard),選擇介面頂部的“More services”,出現"Market Image"的選項,如下圖:

進入“Market Image"之後,選擇“深度學習”型別下的“GPU Accelerated Caffe Deep Learning Development Environment", 如下圖:

點選“Details”,即會彈出對話方塊,確認要啟動一個新的帶GPU加速的Caffe深度學習開發環境(容器)。大概過1到2分鐘,使用者的控制檯就可以顯示這個新的容器(docker)。在最左邊的按鈕“More actions"下拉,可以選擇“Console“,來進入基於網頁的容器登陸環境。或使用者可以使用VPN來使用別的ssh終端軟體(如putty)進行登陸。關於如何安裝和配置VPN,詳見以下連結:

https://services.ptopenlab.com/mediawiki/index.php/VPN%E7%9A%84%E4%BD%BF%E7%94%A8/en

初次登陸該深度學習容器,系統會強制使用者更改使用者密碼(帳號為opuser,密碼檢視控制檯資訊)和root的使用者密碼(密碼檢視控制檯資訊)。至此,準備環境就緒。

深度學習模型訓練

在這一部分,我們將以CIFAR10為例子,來給大家介紹如何用Caffe進行最簡單的深度學習模型訓練。CIFAR10和CIFAR100是很有名並被廣泛使用的影象資料集。CIFAR10相對比較簡單,是由60000張32X32畫素的彩色圖片組成,分為10類,每類含6000張圖片。這10類圖片分別是飛機、車、鳥、貓、鹿、狗、青蛙、馬、船和卡車。

我們要做的第一步是下載訓練的CIFAR10資料集。在容器中,切換到root許可權,執行如下命令:

cd /home/opuser/caffe-master-20150813
./data/cifar10/get_cifar10.sh

get_cifar10.sh就是執行資料集下載的指令碼,整個資料集大概100多兆。接著執行:

./examples/cifar10/create_cifar10.sh

create_cifar10.sh是對資料集進行預處理,以便能被Caffe直接處理,並計算資料集的均值。

之後,執行如下命令就可以開始進行模型訓練了:

./examples/cifar10/train_quick.sh

在train_quick.sh這個指令碼中,主要的輸入是 examples/cifar10/cifar10_quick_solver.prototxt 這個檔案。這是對這個模型的配置檔案,內容如下:

# The train/test net protocol buffer definition
net: "examples/cifar10/cifar10_quick_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100
# Carry out testing every 500 training iterations.
test_interval: 500
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.001
momentum: 0.9
weight_decay: 0.004
# The learning rate policy
lr_policy: "fixed"
# Display every 100 iterations
display: 100
# The maximum number of iterations
max_iter: 4000
# snapshot intermediate results
snapshot: 4000
snapshot_prefix: "examples/cifar10/cifar10_quick"
# solver mode: CPU or GPU
solver_mode: GPU

該檔案定義了深度神經網路的檔案 cifar10_quick_train_test.prototxt,迭代次數4000,以及使用GPU進行模型訓練等重要引數。

在模型訓練的過程中,每迭代100次,會列印一次輸出結果。直到最後輸出:

Snapshotting to binary proto file examples/cifar10/cifar10_quick_iter_4000.caffemodel
Snapshotting solver state to binary proto fileexamples/cifar10/cifar10_quick_iter_4000.solverstate
Iteration 4000, loss = 0.599427
Iteration 4000, Testing net (#0)
Test net output #0: accuracy = 0.7159
Test net output #1: loss = 0.863218 (* 1 = 0.863218 loss)
Optimization Done.

首先,訓練後得到的模型存在檔案 cifar10_quick_iter_4000.caffemodel 中,該模型檔案將用於後面進行測試和分類應用。solverstate檔案比起.caffemodel檔案多了模型名稱、當前迭代次數等。solverstate是用來恢復訓練的,防止意外終止而儲存的快照(有點像斷點續傳的感覺)。

在訓練過程,Caffe會根據.prototxt檔案的定義,隨機選取資料集中的一部分資料進行模型精度測試,所以本次訓練所得到的模型精度為 0.7159.

至此,我們第一個模型訓練就完成了。

利用訓練模型進行圖片分類

深度學習的目的是要讓我們的應用獲得認知能力。假設我們要開發一個圖片分類應用,我們已經使用Caffe通過前面的步驟訓練得到一個懂得10個分類的學習模型。在這部分,我們要做的是如何把這個模型使用起來,為我們的應用服務。