Предисловие: я совершенно новичок в машинном обучении, поэтому, вероятно, это простое решение.
Ожидается: сначала я обучил модель 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'])