Warm tip: This article is reproduced from serverfault.com, please click

python-如何计算由predict_generator正确分类的图像数量

(python - How to count the amount of images correctly classified by predict_generator)

发布于 2020-11-30 15:07:13

如何计算正确/错误分类的图像数量Classifier.predict_generator我总共有6000张测想像,每类1000张图像(我的文件夹测试有6个代表这6个类的子文件夹)。


model_path = "Model.hdf5"
Classifier: Model = load_model(model_path)

mainDataPath = "donnees/"
testPath = mainDataPath + "test"

number_images = 6000
number_images_class_0 = 1000
number_images_class_1 = 1000
number_images_class_2 = 1000
number_images_class_3 = 1000
number_images_class_4 = 1000
number_images_class_5 = 1000

image_scale = 200

images_color_mode = "rgb"  # grayscale or rgb


test_data_generator = ImageDataGenerator(rescale=1. / 255)

test_itr = test_data_generator.flow_from_directory(
    testPath,# place des images
    target_size=(image_scale, image_scale), # taille des images
    class_mode="categorical",# Type de classification
    shuffle=False,# pas besoin de les boulverser
    batch_size=1,# on classe les images une e la fois
    color_mode=images_color_mode)# couleur des images

(x, y_true) = test_itr.next()

# Normalize Data
max_value = float(x.max())
x = x.astype('float32') / max_value


# Les classes correctes des images (1000 pour chaque classe) -- the ground truth
y_true = np.array([0] * number_images_class_0+ 
                  [1] * number_images_class_1+ 
                  [2] * number_images_class_2+ 
                  [3] * number_images_class_3+ 
                  [4] * number_images_class_4+ 
                  [5] * number_images_class_5)

test_eval = Classifier.evaluate_generator(test_itr, verbose=1)

print('>Test loss (Erreur):', test_eval[0])
print('>Test precision:', test_eval[1])

predicted_classes = Classifier.predict_generator(test_itr, verbose=1)
predicted_classes_perc = np.round(predicted_classes.copy(), 4)
predicted_classes = np.round(predicted_classes) # on arrondie le output

Questioner
Lynn
Viewed
0
mujjiga 2020-12-01 03:16:27

由于你已按样本顺序进行设置shuffle=Falsetest_itr因此数据生成器不会更改它;因此,地面真理将是y_true你创造的基础。

从预测的概率中获取预测的类别,然后使用sklearn(或其他类似方法)查找准确性得分。

from sklearn.metrics import accuracy_score

predicted_classes = Classifier.predict_generator(test_itr, verbose=1)
y_pred = np.argmax(predicted_classes , axis=1)
accuracy_score(y_true.flatten(), y_pred.flatten())