CNN - 混淆矩阵错误显示

CNN - Confusion Matrix wrong display

我在 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.

想请教各位,我是在代码中哪里做错了,导致出现这个奇怪的结果。

我检查了你的代码,我找到了解决你问题的方法。混淆矩阵的计算尽可能地有效。问题是您的网络根本没有学习,它将所有数据分类为 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)

你应该对你的测试集做同样的事情。