Модель Keras с 3 входными изображениями, дающая неправильный вывод

Вопрос или проблема

Я создал модель keras, которая принимает 3 изображения на вход, передает их в отдельные CNN backbone (mobilenet_v2) и объединяет результаты из 3 отдельных потоков. Эти объединенные выходы далее проходят через FCN и дают вероятностные значения для 10 классов. Теперь, когда я передаю 3 изображения в свою модель, используя model.predict(), я получаю выходные данные размером 3×10 (список из 3 выходов с 10 значениями в каждом).

Вот снимок сети
снимок сети

А вот выходные данные

*[[0.04718336 0.07464679 0.1329775  0.09312231 0.12029872 0.10404643 0.08732469 0.03571845 0.16900443 0.13567731]
 [0.0726063  0.0712122  0.12180576 0.07443767 0.14696348 0.10402806 0.09013776 0.03013403 0.17304562 0.11562922]
 [0.06313297 0.06455057 0.11175603 0.06945134 0.16163406 0.12042907 0.10410044 0.04393855 0.12963305 0.13137391]]*

Есть идеи, что здесь происходит?

Это возвращает вероятности того, что данный образец принадлежит какому-либо классу. У вас есть 10 классов. Вы можете увидеть, какой класс предсказывает ваша модель, добавив;

y_pred = y_pred.argmax(axis=1)

Ответ или решение

Проблема, с которой вы столкнулись при использовании вашей модели Keras, связана с некорректным интерпретированием выходных данных, а не с ошибками в самой архитектуре сети или процессе предсказания. Давайте разберемся более подробно.

Описание проблемы

Вы создали модель Keras, которая принимает на вход три изображения и обрабатывает их с помощью индивидуальных сверточных нейронных сетей (CNN). Затем результаты этих потоков объединяются, и обрабатываются через полносвязную нейронную сеть (FCN) для генерации вероятностей для 10 классов.

На выходе вы получили массив размерности 3×10, что означает, что ваша модель производит предсказания для трех входных изображений. Каждый из этих векторов вероятностей указывает, насколько вероятно, что соответствующее изображение относится к каждому из 10 классов.

Анализ результата

Исходные данные, которые вы представили, показывают, что для каждого из трёх изображений модель возвращает вектор из 10 вероятностей. Эти вероятности призваны отразить уверенность в принадлежности каждого изображения к различным классам.

Чтобы сделать окончательное предсказание о том, к какому классу относится конкретное изображение, вы можете воспользоваться методом argmax(), который возвращает индекс класса с максимальной вероятностью. Это достигается с помощью следующего кода:

y_pred = y_pred.argmax(axis=1)

Этот код преобразует ваш выходной массив (3×10) в одномерный массив, где каждый элемент соответствует указанному классу для каждого изображения.

Возможные проблемы

  1. Неочевидная интерпретация выходов: Как упомянуто выше, формат выхода 3×10 может быть неочевиден, особенно если вы ожидаете предсказание только для одного изображения. Убедитесь, что правильно интерпретируете ваши выходные данные.

  2. Обработка входных данных: Убедитесь, что все три изображения проходят через одну и ту же предварительную обработку (например, изменение размера, нормализация). Разные подходы к предварительной обработке могут привести к несбалансированным выводам.

  3. Правильная тренировка модели: Проверьте, что ваша модель хорошо обучена на достаточном количестве данных. Переобучение или недообучение могут привести к низким вероятностям для всех классов.

  4. Фузия выходов: Проверьте, как вы объединяете выходные данные из отдельных потоков. Неправильная операция может привести к неправильному расчету итоговых вероятностей.

Рекомендации

  • Проведите дополнительные тесты с вашими входными изображениями, чтобы выяснить, правильно ли модель предсказывает классы.
  • Визуализируйте выходы с помощью графиков, чтобы лучше понять, как модель реагирует на различные входные данные.
  • Убедитесь, что ваше обучение проходит на достаточном объеме данных и что они хорошо сбалансированы между классами.

Если все упомянутое выше выполнено, а результаты по-прежнему не удовлетворительные, возможно, вам потребуется провести дополнительную настройку архитектуры вашей модели или попробовать другие стратегии объединения извлеченных признаков.

Оцените материал
Добавить комментарий

Капча загружается...