CNN+caffe學習4:自己訓練網絡全過程

本問創建於2017年1月。由於caffe版本更新, 可能部分操作已經過時不能使用,希望大家多看源碼,增強自主學習能力。

資料下載地址:https://github.com/EmmaW8/caffe.git
branch選擇201701,code文件夾裏面是需要用到的執行文件,models裏面是我自己設計的5層CNN模型配置文件,以及訓練結果。

1. 準備數據

2. 數據分類

get-filename-label.py文件
我的文件路徑比較複雜,此處很麻煩,如果你不用我的數據,可以不用我這個執行文件,自己寫一個就好,很easy~
注意修改內部數據文件路徑

$ python get-filename-label.py

會生成3個文件,分別爲train.txt,val.txt,test.txt.
train和val裏面有label,訓練用,test無label,分類時用。
train:val=9:1,你也可以嘗試4:1.

這裏其實很簡單,就是獲取數據路徑名稱,以及其label,我的文件僅供參考,可以根據這個寫出你自己的Python提取文件。

3. 生成lmdb文件,生成均值文件(mean.binaryproto)

creat_atypia.sh文件
修改DATA路徑。
運行:

$ sh creat_atypia.sh

生成3個lmdb文件和一個mean文件,這裏用到caffe自己提供的工具來生成。
示例;

echo "Creating train lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $DATA/atypia_train_initialsize_$DBTYPE

利用convert_imageset來生成lmdb文件

echo "Computing image mean..."

$TOOLS/compute_image_mean -backend=$DBTYPE \
  $DATA/atypia_train_initialsize_$DBTYPE $DATA/initialsize_mean.binaryproto

利用compute_image_mean和剛生成的train_lmdb文件生成mean文件。

4. 自己設計網絡結構

我設計的網絡結構在models文件夾裏,-solver.prototxt是solver文件,-train_val.prototxt是描述網絡框架文件,*.caffemodel是我訓練完畢後生成的模型文件。deploy.prototxt是用於test分類時的文件。

在訓練之前,需要把solver 和 train_val.prototxt文件配置好。
具體如何配置,請參考我的文件進行修改。注意修改路徑。

此處一定要注意是layer {},還是layers{},如果定義的layer不同,那麼內部的參數會不同,上次就栽在這個坑裏了。layers裏面的type都是大寫的,並且param的設置不同。一個prototxt文檔裏,只能出現一種,不能layer和layers混用。

5. 訓練

執行code裏面的可執行文件train-atypia.sh

$ sh train-atypia.sh

開始訓練。

文件說明

#!/usr/bin/env sh
# begin train

set -e
# 指定log文件路徑和名稱
LOG=/home/emma/software/caffe/models/atypia/log/train-`date +%Y-%M-%d-%H-%M-%S`.log
#指定一些變量名,便於後續開發
TOOLS=/home/emma/software/caffe/build/tools
MODEL=/home/emma/software/caffe/models/atypia
NAME=atypia
# fine-tune 別人的模型,此處不需要
#$TOOLS/caffe train  -solver $MODEL/$NAME-solver.prototxt  -weights $MODEL/VGG_16_layers.caffemodel -gpu 0 > VGG2.log
# 訓練自己的模型,並將控制檯輸出導入到log文件
$TOOLS/caffe train -solver $MODEL/$NAME-solver.prototxt -gpu 0 2>&1 | tee $LOG

6. 可視化,畫出訓練loss,以及test accuracy

訓練完畢後,可以得到log文件,我的log文件位於models/log/
對log文件進行處理,提取出accuracy和loss的數值,然後畫圖。
可執行文件:plot.sh

./plot_training_log.py.example 0 /home/emma/software/caffe/models/atypia/log/curve/test_accuracy.png /home/emma/software/caffe/models/atypia/log/train-2017-52-07-19-52-39.log

0:代表畫出test_accuracy 和iters的曲線
2:代表畫出test_loss和iters的曲線
6:代表畫出train_loss 和iters的曲線

第二個參數是,圖片保存位置,第三個參數log文件所在的位置

我生成的曲線存儲在models/log/curve裏面,例如
這裏寫圖片描述

注意事項:

如果loss未收斂,記得及時調整學習率。

第一次使用自己設計的網絡時,選擇10個訓練數據,並且訓練數據=val數據集,看一下訓練幾次後準確率是否會達到100%,如果會,就說明模型可用!!!


EMMA
SIAT

發佈了60 篇原創文章 · 獲贊 68 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章