具有98%测试准确度的模型的不正确混淆矩阵

时间:2018-08-03 17:13:40

标签: python tensorflow scikit-learn keras confusion-matrix

我为二进制分类训练了模型,并获得了98%的测试准确度和99%的训练准确度。

今天我想计算混淆矩阵,并使用下面的代码来计算它们。

model = load_model("model.h5")

testGenerator = ImageDataGenerator(rotation_range=5,
                                width_shift_range=0.2,
                                height_shift_range=0.2,
                                horizontal_flip=False,
                                fill_mode='nearest'
                                )   

testData = testGenerator.flow_from_directory(
                                'Location', 
                                target_size=(74,448),                                                 
                                batch_size=15,
                                class_mode='binary',
                                shuffle=False
                                )

proba = model.predict_generator(testData,steps=3000//15)
y_true = np.array([0] * 1482 + [1] * 1482 )
y_pred = proba > 0.5
print(confusion_matrix(y_true, y_pred))

我收到了这个混淆矩阵:

Confusion Matrix

如sklearn所说:

enter image description here

在这里说假阴性和假阳性是如此之高。自从我达到98%的测试准确度后,这怎么可能?另外,我已经使用该模型几次来生成预测(使用model.predict()函数)并手动检查它们。但是每次它给我正确的分类。

任何想法如何获得准确的结果?

1 个答案:

答案 0 :(得分:0)

让我们从头开始。消息“ TypeError:无法散列的类型:'numpy.ndarray'”表示您不能使用numpy.ndarray作为字典键,因为它不是一个不变的对象。将其转换为tuple或其他东西以使其变得不可变。

关于您的混淆矩阵,我打赌生成器会以不可预测的顺序从文件夹中加载文件,不过,y_true设置为1482 zeros和1482 ones可能会或可能与生成器生成的文件顺序不匹配。因此,您会得到有趣的结果。