Модель Keras CNN с неправильной кривой ROC и низкой точностью - PullRequest
0 голосов
/ 06 июля 2019

Я учусь писать CNN в Керасе на Kaggle, используя один из наборов данных, которые я там нашел.

Ссылка на мою записную книжку:

https://www.kaggle.com/vj6978/brain-tumor-vimal?scriptVersionId=16814133

Код, набор данных и кривая ROC доступны по ссылке.Сама кривая ROC выглядит так, как если бы модель просто делала предположения, а не выученный прогноз.

Точность тестирования также, кажется, достигает пика только на уровне от 60% до 70%, что является тихо низким.Любая помощь будет оценена.

Спасибо Vimal James

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Вы используете softmax активацию с одним нейроном, это будет всегда производить постоянный выход 1.0, из-за нормализации, используемой в softmax, поэтому это не имеет смысла.Для двоичной классификации необходимо использовать активацию sigmoid с одним выходным нейроном.

0 голосов
/ 06 июля 2019

Я считаю, что ваша последняя активация должна быть сигмовидной, а не softmax.

ОБНОВЛЕНИЕ:

Просто разветвило ваше ядро ​​на Kaggle, и изменение следующим образом даст лучшие результаты:

model = Sequential()
model.add(Conv2D(128, (3,3), input_shape = data_set.shape[1:]))
model.add(Activation("relu"))
model.add(AveragePooling2D(pool_size = (2,2)))

model.add(Conv2D(128, (3,3)))
model.add(Activation("relu"))
model.add(AveragePooling2D(pool_size = (2,2)))

model.add(Flatten())
model.add(Dense(64))

model.add(Dense(1))
model.add(Activation("sigmoid")) # Last activation should be sigmoid for binary classification

model.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = ['accuracy'])

Это дало следующие результаты:

rain on 204 samples, validate on 23 samples
Epoch 1/15
204/204 [==============================] - 2s 11ms/step - loss: 2.8873 - acc: 0.6373 - val_loss: 0.8000 - val_acc: 0.8261
Epoch 2/15
204/204 [==============================] - 1s 3ms/step - loss: 0.7292 - acc: 0.7206 - val_loss: 0.6363 - val_acc: 0.7391
Epoch 3/15
204/204 [==============================] - 1s 3ms/step - loss: 0.4731 - acc: 0.8088 - val_loss: 0.5417 - val_acc: 0.8261
Epoch 4/15
204/204 [==============================] - 1s 3ms/step - loss: 0.3605 - acc: 0.8775 - val_loss: 0.6820 - val_acc: 0.8696
Epoch 5/15
204/204 [==============================] - 1s 3ms/step - loss: 0.2986 - acc: 0.8529 - val_loss: 0.8356 - val_acc: 0.8696
Epoch 6/15
204/204 [==============================] - 1s 3ms/step - loss: 0.2151 - acc: 0.9020 - val_loss: 0.7592 - val_acc: 0.8696
Epoch 7/15
204/204 [==============================] - 1s 3ms/step - loss: 0.1305 - acc: 0.9657 - val_loss: 1.2486 - val_acc: 0.8696
Epoch 8/15
204/204 [==============================] - 1s 3ms/step - loss: 0.0565 - acc: 0.9853 - val_loss: 1.2668 - val_acc: 0.8696
Epoch 9/15
204/204 [==============================] - 1s 3ms/step - loss: 0.0426 - acc: 0.9853 - val_loss: 1.4674 - val_acc: 0.8696
Epoch 10/15
204/204 [==============================] - 1s 3ms/step - loss: 0.0141 - acc: 1.0000 - val_loss: 1.7379 - val_acc: 0.8696
Epoch 11/15
204/204 [==============================] - 1s 3ms/step - loss: 0.0063 - acc: 1.0000 - val_loss: 1.7232 - val_acc: 0.8696
Epoch 12/15
204/204 [==============================] - 1s 3ms/step - loss: 0.0023 - acc: 1.0000 - val_loss: 1.8291 - val_acc: 0.8696
Epoch 13/15
204/204 [==============================] - 1s 3ms/step - loss: 0.0014 - acc: 1.0000 - val_loss: 1.9164 - val_acc: 0.8696
Epoch 14/15
204/204 [==============================] - 1s 3ms/step - loss: 8.6263e-04 - acc: 1.0000 - val_loss: 1.8946 - val_acc: 0.8696
Epoch 15/15
204/204 [==============================] - 1s 3ms/step - loss: 6.8785e-04 - acc: 1.0000 - val_loss: 1.9596 - val_acc: 0.8696
Test loss: 3.079359292984009
Test accuracy: 0.807692289352417
...