實戰Caffe-第三天
主要實現LeNet這個簡單的網路,順便驗證一下Caffe是否編譯成功。
1.下載資料:在caffe-master根目錄下,執行sudo bash ./data/mnist/get_mnist.sh,完畢之後會下載好四個檔案。
2.下載好的檔案是二進位制,caffe不能直接使用,需要轉換成LMDB或LEVELDB資料庫形式,或者其他形式配合相應的讀取方式。執行sudo bash ./example/mnist/create_mnist.sh。該指令碼會呼叫convert_mnist_data.bin轉換格式,生成mnist_train_lmdb和mnist_test_lmdb在caffe_master/example/mnist目錄下面。如果沒有在caffe-master根目錄下,可能會報錯:
create_mnist.sh: 17: create_mnist.sh: build/examples/mnist/convert_mnist_data.bin: not found
這是因為新版的caffe需要在caffe-mater根目錄下執行命令才行。
3.網路配置
這裡需要注意source的路徑,根據自己的情況修改。
4.訓練網路
執行sudo exampes/mnist/train_lenet.sh。實際執行的是lenet_solver.prototxt
注意將lenet_solver.prototxt中GPU改為CPU,我首先用GPU沒有跑通,改為CPU就沒問題了,不知道是不是自己cudnn沒有轉好,有點憂桑。
訓練好的模型結果存放在example/mnist/lenet_iter_10000.caffemodel。訓練狀態存放在example/mnist/lenet_iter_10000.solverstate。
5.測試網路
執行sudo ./build/tools/caffe.bin test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100
test:表示對訓練好的模型進行測試。其他引數有:train,time,device_query。
-model:指定模型prototxt檔案,詳細描述了網路結構和資料集資訊。
6.mnist手寫測試
測試圖片必須滿足:256位黑底白字;大小28*28;數字在圖片中間,上下無過多空白。
import os
import sys
import numpy as np
import matplotlib.pyplot as plt
caffe_root='/home/caeluszhao/caffe-master/'
sys.path.insert(0,caffe_root+'python')
import caffe
MODEL_FILE='/home/caeluszhao/caffe-master/examples/mnist/lenet.prototxt'
PRETRAINED='/home/caeluszhao/caffe-master/examples/mnist/lenet_iter_10000.caffemodel'
IMAGE_FILE='/home/caeluszhao/caffe-master/examples/images/5.png'
input_image=caffe.io.load_image(IMAGE_FILE,color=False)
net = caffe.Classifier(MODEL_FILE, PRETRAINED)
prediction=net.predict([input_image],oversample=False)
caffe.set_mode_cpu()
print 'predicted class: ', prediction[0].argmax()
使用了兩張圖片:2和5,測試成功。