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 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)
你应该对你的测试集做同样的事情。
我在 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 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)
你应该对你的测试集做同样的事情。