Ошибка предсказания при распознавании di git с использованием cnn - PullRequest
1 голос
/ 29 мая 2020

Я хочу предсказать, что di git равно 5 или нет от 0 до 9. Я использовал набор данных cmaterdb.

Для этой задачи я изменил все di git label 0, кроме 5 в набор обучающих и тестовых данных

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. что не так в моем коде или logi c?

1 Ответ

0 голосов
/ 29 мая 2020

Я могу предположить, что у вас точность около 90%, но ваша модель почти всегда предсказывает 0 (а не 5), верно?

Если это так, причина может быть в несбалансированных классах. Ваш исходный набор данных, я думаю, сбалансирован, как будто у нас почти N 0, почти N 1, ... и почти N 9. То, что вы сделали, вы сохранили почти N 5 и пометили его равным 1, а остальные почти 9 * N примеров превратили в метку 0. Это означает, что теперь у вас есть 10% данных с меткой 1 (это 5) и 90% данных с меткой 0. Это случай дисбаланса, и это нормально, что вы получаете хорошую точность около 90%, но плохой прогноз для класса меньшинства. Для несбалансированных случаев точность не является хорошим показателем c или, возможно, этого недостаточно. Попробуйте отследить Точность, отзыв и F1.

мое предложение, выборка из не 5 классов (1/10 из каждого) и сохраните все 5. Вы должны получить более точные прогнозы.

...