用訓練好的caffe模型來測試樣本

2021-07-25 09:01:53 字數 2351 閱讀 8075

如果要把訓練好的模型拿來測試新的樣本,那必須得要乙個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 ...