我创建了一个用于图像分类的模型,然后使用Keras
进行学习和评估。
使用学习的模型进行准确性评估时出现问题。
共有1至11个12类,外加X个类。
1, 2, 3, 4, 5 ,6, 7, 8, 9, 10, 11, X
我使用两个功能evaluate_generator
和predict_generator
进行了准确性评估。
使用predict_generator
的输出,将每个图像的最高概率类别指定为预测类别。
所以我根据实际等级和预测等级是否相同来评估准确性。
label_count = []
for label in labels:
if label != '1' :
test_id = test_id+[os.path.basename(fl) for fl in glob('{}/{}/*png'.format(test_path, label))]
if label == 'X' :
label_count+= ['12' for _ in glob('{}/{}/*png'.format(test_path, label))]
else :
label_count+= [label for _ in glob('{}/{}/*png'.format(test_path, label))]
else :
test_id = [os.path.basename(fl) for fl in glob('{}/{}/*png'.format(test_path, label))]
label_count+= [label for _ in glob('{}/{}/*png'.format(test_path, label))]
preds = model.evaluate_generator(
test_generator,
steps=len(test_id))
print("%s: %.2f%%" %(model.metrics_names[1], preds[1]*100))
preds = model.predict_generator(
test_generator,
steps=len(test_id),
verbose=1)
preds_list = list(preds)
temp=0
loss_count = 0
for pred in preds_list :
results = 0
top_ = 0
for i,pr in enumerate(pred) :
results += float(pr)*(i+1)
if float(pr) > top_ :
top_ = float(pr)
top = i+1
predict_ = round(results,2)
true_ = int(label_count[temp])
loss_ = abs(round(true_ - round(results,2),2))
if abs(top-true_) <= 1 :
loss_count += 1
# print('True class : ',true_,' Predict class : ',top,' Predict linear : ',predict_, ' loss : ', loss_)
temp += 1
print ('accuracy : ', round(loss_count/len(test_id)*100,2), '%')
evaluate_generator
输出为acc: 90.54%
但是predict_generator
的输出是accuracy : 56.76%