【问题标题】:cannot build confusion matrix无法建立混淆矩阵
【发布时间】:2019-03-13 11:01:07
【问题描述】:

我想为我的 CNN 模型构建一个混淆矩阵,代码如下:

classifier = Sequential()


classifier.add(Conv2D(32, (3, 3), input_shape=(64,64, 3), 
activation='relu'))


classifier.add(MaxPooling2D(pool_size=(2, 2)))  

classifier.add(Flatten())
classifier.add(Dense(units=1, activation='sigmoid'))



classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics= 
['accuracy'])


batch_size = 32

train_datagen = ImageDataGenerator(rescale=1. / 255,
                               shear_range=0.2,
                               zoom_range=0.2,
                               horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

training_set = train_datagen.flow_from_directory('x1' ,
                                             target_size=(64,64),
                                             batch_size=64,
                                             class_mode='binary')

test_set = test_datagen.flow_from_directory('x2' ,
                                        target_size=(64,64),
                                        batch_size=64,
                                        class_mode='binary')



ep=50

H=classifier.fit_generator(training_set,
                     steps_per_epoch=1204/batch_size,
                     epochs=ep,
                     validation_data=test_set,
                     validation_steps=408/batch_size,
                                     )

validation_steps=408

混淆矩阵:

from sklearn.metrics import confusion_matrix
Y_pred = classifier.predict_generator(test_set,validation_steps//batch_size+1)


y_pred = np.argmax(Y_pred, axis=1)
print('Confusion Matrix')
print(confusion_matrix(test_set.classes, y_pred))

我收到了这个错误:

ValueError:发现样本数量不一致的输入变量: [408, 792]

我该怎么办?

【问题讨论】:

  • 试试model.predict_generator(test_generator,steps = len(test_set)) 并检查形状

标签: python keras confusion-matrix


【解决方案1】:

test_sety_pred 没有相同数量的观察值。您传递给predict_generator 的步骤数可能不正确。

不确定您使用的是哪个版本的 Keras,但请尝试 Y_pred =classifier.predict_generator(test_set)。在较新的版本中,省略步数将返回对所有图像的预测。

【讨论】:

  • 我用这个它给了我混淆矩阵但是混淆矩阵它不正确,因为它有两个类它返回 [[ 42 0] [366 0]] 它们每个都是项目的数量在两个类中,这意味着它预测所有这些都是正确的?如果是真的,为什么准确率不是 100%
  • 不,这并不意味着它是 100% 正确的。这意味着它将每一个观察结果分类到同一类中。左上和右下是正确的分类,所以366分类不正确。
  • 为什么都归为一类?我的代码不正确吗?你能看看我的代码@karl
  • 这意味着您的模型已经学会了将所有内容简单地分类为一个类而不是尝试拆分它们更容易。这可能有一百个原因。你的模型可能太简单,你的数据可能不够好,你的学习率可能太高,等等......
【解决方案2】:

你有

batch_size = 32

但在 test_set 内部,

batch_size=64

因此,当您使用 validation_steps//batch_size+1 步骤运行 predict_generator 时,您使用 32 个步骤来创建您的步骤,但为您的生成器使用 64 个步骤。

您必须同时设置为 32 或 64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 2020-08-13
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2020-10-01
    • 2012-01-20
    相关资源
    最近更新 更多