如果要把訓練好的模型拿來測試新的樣本,那必須得要乙個deploy.prototxt檔案,這個檔案實際上和test.prototxt檔案差不多,只是頭尾不相同而已。deploy檔案沒有第一層資料輸入層,樣本是被直接輸入到net.blobs裡面的,也沒有最後的accuracy層,但最後多了乙個softmax概率層。
import numpy as np
import sys,os
# 設定當前的工作環境在caffe下
caffe_root = '/home/***/caffe/'
# 我們也把caffe/python也新增到當前環境
sys.path.insert(0, caffe_root + 'python')
import caffe
os.chdir(caffe_root)#更換工作目錄
# 設定網路結構
net_file=caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt'
# 新增訓練之後的引數
caffe_model=caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
# 均值檔案
mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy'
# 這裡對任何乙個程式都是通用的,就是處理
# 把上面新增的兩個變數都作為引數構造乙個net
net = caffe.net(net_file,caffe_model,caffe.test)
# 得到data的形狀,這裡的是預設matplotlib底層載入的
transformer = caffe.io.transformer()
# matplotlib載入的image是畫素[0-1],的資料格式[weight,high,channels],rgb
# caffe載入的需要的是[0-255]畫素,資料格式[channels,weight,high],bgr,那麼就需要轉換
# channel 放到前面
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
# 畫素放大到[0-255]
transformer.set_raw_scale('data', 255)
# rgb-->bgr 轉換
transformer.set_channel_swap('data', (2,1,0))
# 這裡才是載入
# 用上面的transformer.preprocess來處理剛剛載入
net.blobs['data'].data[...] = transformer.preprocess('data',im)
#注意,網路開始向前傳播啦
out = net.forward()
# 最終的結果: 當前這個的屬於哪個物體的概率(列表表示)
output_prob = output['prob'][0]
# 找出最大的那個概率
print 'predicted class is:', output_prob.argmax()
# 也可以找出前五名的概率
top_inds = output_prob.argsort()[::-1][:5]
print 'probabilities and labels:'
zip(output_prob[top_inds], labels[top_inds])
# 最後載入資料集進行驗證
imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'
labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')
top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
print top_k[i], labels[top_k[i]]
測試乙個訓練好的caffe模型
在學習caffe的過程中,訓練了出了模型出來,出了當時的準確率和loss值,並沒有看到給定輸入看到真正的輸出,這個時候需要測試一下訓練出來的模型,實際檢視一下效果,其中用到的配置檔案和網路模型在caffe的目錄下都有,自己測試自己的模型時需要修改為自己的 prototxt和 caffemodel u...
使用caffe訓練好的模型測試單張手寫數字
使用caffe訓練好的模型測試單張手寫數字 初次學習caffe的時候都會按照網上的教程,對caffe經典案例手寫字型識別進行訓練一下,很滿意,訓練完後可以獲得99 的準確率,而且可以獲得乙個訓練好的lenet iter 10000.caffemodel這麼乙個模型。很多人會有困惑,有這麼乙個模型,我...
caffe練習例項(3) 使用訓練好的模型
input data input shapelayer include opencv2 dnn.hpp include opencv2 imgproc.hpp include opencv2 highgui.hpp using namespace cv using namespace cv dnn ...