【问题标题】:Error in prediction in digit recognition using cnn使用 cnn 进行数字识别的预测错误
【发布时间】:2020-09-17 07:05:20
【问题描述】:

我想从0到9预测数字是5还是不是。我使用了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.我的代码或逻辑有什么问题?

【问题讨论】:

  • 请不要在没有理由的情况下对整个句子使用粗体(已编辑)。

标签: machine-learning keras neural-network conv-neural-network


【解决方案1】:

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

如果是这样,原因可能是不平衡的类。我猜你的原始数据集是平衡的,就像我们有几乎 N 个 0、几乎 N 个 1、……和几乎 N 个 9。你所做的,你保留了几乎 N 个 5s,并将其标记为 1,并将其余几乎 9*N 个示例转换为标记 0。这意味着现在你有 10% 的数据标记为 1(即 5s)和 90%标记为 0 的数据。这是一个不平衡的情况,很正常你得到 90% 左右的准确率,但对少数类的预测很差。对于不平衡的情况,准确性不是一个好的指标,或者可能还不够。尝试追踪 Precision、recall 和 F1。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-29
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    相关资源
    最近更新 更多