Machine learning cnn数字识别中的预测误差

Machine learning cnn数字识别中的预测误差,machine-learning,keras,neural-network,conv-neural-network,Machine Learning,Keras,Neural Network,Conv Neural Network,我想预测数字是否为5,从0到9。我使用了cmaterdb数据集 对于此任务,我已更改了培训和测试数据集中除5之外的所有数字标签0 new_train_label=np.copy(train_labels) for i, label in enumerate(new_train_label): new_train_label[i] = 0 if (label == 5) else 1 new_test_label=np.copy(test_labels) for i, label in

我想预测数字是否为5,从0到9。我使用了cmaterdb数据集

对于此任务,我已更改了培训和测试数据集中除5之外的所有数字标签0

new_train_label=np.copy(train_labels)
for i, label in enumerate(new_train_label):
     new_train_label[i] = 0 if (label == 5) else 1

new_test_label=np.copy(test_labels)
for i, label in enumerate(new_test_label):
     new_test_label[i] = 0 if (label == 5) else 1

#train up model using cnn

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils import np_utils



model = Sequential()

model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Conv2D(15, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.02))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(train_examples, new_train_label, epochs=30)

val_loss, val_acc = model.evaluate(test_examples,new_test_label)
print(val_loss)
print(val_acc)

虽然准确度很好,但它不能预测5。我的代码或逻辑出了什么问题?

我可以猜,您的准确率约为90%,但您的模型几乎总是预测0(而不是5),对吗

如果是这样的话,原因可能是阶级不平衡。我猜你的原始数据集是平衡的,就像我们有近n0,近n1。。。几乎是n9。您所做的是,保留了几乎N个5s,并将其标记为1,然后将其余几乎9*N的示例标记为0。这意味着现在有10%的数据标记为1(即5s),90%的数据标记为0。这是一个不平衡的情况,很正常,你可以得到大约90%的准确率,但对于少数群体来说,这是一个糟糕的预测。对于不平衡的情况,准确度不是一个很好的衡量标准,或者可能是不够的。尝试跟踪精度、召回率和F1

我的建议是,从非5个班级中抽取样本(每个班级1/10),并保留所有
5秒。你应该得到更好的预测

我可以猜,你的准确率大约为90%,但你的模型几乎总是预测0(不是5),对吗

如果是这样的话,原因可能是阶级不平衡。我猜你的原始数据集是平衡的,就像我们有近n0,近n1。。。几乎是n9。您所做的是,保留了几乎N个5s,并将其标记为1,然后将其余几乎9*N的示例标记为0。这意味着现在有10%的数据标记为1(即5s),90%的数据标记为0。这是一个不平衡的情况,很正常,你可以得到大约90%的准确率,但对于少数群体来说,这是一个糟糕的预测。对于不平衡的情况,准确度不是一个很好的衡量标准,或者可能是不够的。尝试跟踪精度、召回率和F1

我的建议是,从非5个班级中抽取样本(每个班级1/10),并保留所有
5秒。你应该得到更好的预测

请不要在整句话(已编辑)中使用没有理由的粗体。请不要在整句话(已编辑)中使用没有理由的粗体。