CNN-混淆矩阵错误显示

时间:2019-11-13 14:27:50

标签: python deep-learning nlp conv-neural-network confusion-matrix

我已经在Keras中使用CNN训练了用于手写数字多类分类的模型。我正在尝试使用相同的训练图像评估模型,以估算算法的准确性;但是,当我评估CNN混淆矩阵时,它仅给出以下形式的一列:

[[4132    0    0    0    0    0    0    0    0    0]
 [4684    0    0    0    0    0    0    0    0    0]
 [4177    0    0    0    0    0    0    0    0    0]
 [4351    0    0    0    0    0    0    0    0    0]
 [4072    0    0    0    0    0    0    0    0    0]
 [3795    0    0    0    0    0    0    0    0    0]
 [4137    0    0    0    0    0    0    0    0    0]
 [4401    0    0    0    0    0    0    0    0    0]
 [4063    0    0    0    0    0    0    0    0    0]
 [4188    0    0    0    0    0    0    0    0    0]]

我猜该算法给出了正确的结果,因为这些是数据库中每个数字的总数;但是,混淆矩阵应为:

[[4132    0    0    0    0    0    0    0    0    0]
 [   0 4684    0    0    0    0    0    0    0    0]
 [   0    0 4177    0    0    0    0    0    0    0]
 [   0    0    0 4351    0    0    0    0    0    0]
 [   0    0    0    0 4072    0    0    0    0    0]
 [   0    0    0    0    0 3795    0    0    0    0]
 [   0    0    0    0    0    0 4137    0    0    0]
 [   0    0    0    0    0    0    0 4401    0    0]
 [   0    0    0    0    0    0    0    0 4063    0]
 [   0    0    0    0    0    0    0    0    0 4188]]

The code is in this link

The data can be taken from the "train.csv" file in this Kaggle project.

我想问大家我在代码中做错了什么,以便得到这个奇怪的结果。

1 个答案:

答案 0 :(得分:4)

我检查了您的代码,并为您解决了问题。混淆矩阵的计算尽可能地有效。问题是您的网络根本不学习,并且将所有数据分类为0。您可以通过在fit函数中将verbose参数设置为1来验证这一点,然后可以观察到大约10%的准确度随机猜测。

model.fit(X_train, Y_train, epochs=100, batch_size=32, validation_data=(X_train, Y_train), verbose=1)

这是因为您没有规范化数据。您所要做的就是将数据集除以255,以使数值在[0; 1],然后一切正常,您的网络正在学习。

X_train = X.reshape((-1, 28, 28, 1))
X_train = X_train / 255.0
Y_train = to_categorical(Y)

您应该对测试集执行相同的操作。

相关问题