Необычный результат от прогнозирования с использованием categoryorical_crossentropy - PullRequest
2 голосов
/ 17 мая 2019

Предисловие: я совершенно новичок в машинном обучении, поэтому, вероятно, это простое решение.

Ожидается: сначала я обучил модель CNN с использованием binary_crossentropy в двух классах (хорошем и плохом) с точностью проверки97% представили новые изображения для прогнозирования и получили ожидаемые результаты (два новых изображения были отсортированы правильно с вероятностью их правильности в 90-х годах.

1 #print(model.predict_classes(img))
0.965675 #print(model.predict_proba(img))

Проблема: сейчас я пытаюсь перейти к categoryorical_crossentropyчтобы использовать три класса (b1, b2, b3), модель обучается с точностью до 96%. Я отправляю 3 новых изображения для прогноза, 2 изображения должны совпадать, а одно выходит из левого поля и не должно совпадать. Все три изображения предположительно совпадают с1. вероятность.

[1] #print(model.predict_classes(img))
[[0. 1. 0.]] #print(model.predict_proba(img))

[2]
[[0. 0. 1.]]

[1]
[[0. 1. 0.]]

Вопрос: Почему изображение вне левого поля соответствует одному из классов с моделью, обученной до 96%? Почему все категории вероятностей в категориальном «1» (100%)?

Приложение:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='Adadelta', metrics=['accuracy'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...