画像ではなくベクター(20×128×128)である独自のデータでネットワークをトレーニングしました。ここで、トレーニング済みネットワークを使用して予測したいと考えています。しかし、コードを試してみると、入力ベクトルが何であっても同じ出力が得られました。私が使用したファイルを添付します。アドバイスをいただければ幸いです。
import cv2
import numpy as np
import os
import caffe
import lmdb
import leveldb
from caffe.proto import caffe_pb2
caffe_root = '../'
import sys
sys.path.insert(0, caffe_root + 'python')
def read_txt(file_path):
X = np.empty((20,128,128),dtype=np.float)
if os.path.exists(file_path) == False:
return X
f = open(file_path)
lines2 = f.readlines()
f.close()
count = -1
for line in lines2:
count = count + 1
i = count % 130
k = count//130
if i <= 127 and k<20:
words = line.split(',')
for j in range(0,128):
X[k,i,j]=float(words[j])/500000
return X
MODEL_FILE = '************/try_bn_deploy.prototxt'
PRETRAINED = '*********/bn__iter_20000.caffemodel'
base_path = '*************/database/txt/'
f = open('*****************/val.txt')
line = f.readline()
caffe.set_mode_cpu()
net = caffe.Net(MODEL_FILE, PRETRAINED,caffe.TEST)
count = 0
correct = 0
while line:
count += 1
# load feature vector
pair = line.strip().split()
image_path = pair[0]
label = pair[1]
X=np.empty((20,128,128),dtype=np.float)
X[:,:,:] = read_txt(base_path + image_path)
net.blobs['data'].data[...] = X
# forcast
out = net.forward()
plabel = int(out['prob'][0].argmax())
print count, label, plabel
line = f.readline()
f.close`
これは私の展開ファイルです
name: "Net"
input: "data"
input_shape {
dim: 1
dim: 20
dim: 128
dim: 128
}
...
layer {
name: "prob"
type: "Softmax"
bottom: "fc8"
top: "prob"
}