【问题标题】:How to count the amount of images correctly classified by predict_generator如何计算由 predict_generator 正确分类的图像数量
【发布时间】:2021-03-12 12:31:49
【问题描述】:

我如何计算由Classifier.predict_generator 分类的正确/错误图像的数量?我总共有 6000 个测试图像,每个类 1000 个图像(我的文件夹 test 有 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

【问题讨论】:

    标签: python numpy matrix keras deep-learning


    【解决方案1】:

    由于您在test_itr 中设置了shuffle=False,因此数据生成器不会更改样本的顺序;所以基本事实将在您创建的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())
    
    

    【讨论】:

    • 但我的问题是如何正确输出图像数量和错误分类
    • @Hazel 你认为accuracy score 是什么意思? 0.5 100 个样本的准确率意味着 50 个正确分类和 50 个错误分类。即correct = accuracy_score*no:of samplesincorrect = no:of samples - correct
    • 没错,我什至没有想过这个快捷方式,谢谢。顺便说一句,你知道如何打印这个分类器的热图吗?
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2018-07-11
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多