Моя модель CNN на Keras дает хорошие прогнозы по 10 из 11 классов, но ошибается в 11-м классе. Что я могу сделать для улучшения?

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

Мой проект включает классификацию печатных цифровых символов из реальных эссе. Мой набор данных включает 11 классов (‘0′ – ’10’), где метка ’10’ представляет символ “https://datascience.stackexchange.com/”.

Проблема в том, что, хотя мой обучающий набор данных сбалансирован, исходный размер изображений для класса “https://datascience.stackexchange.com/” составляет 28×28, тогда как для других — 224×224. Однако я изменил их размер на 28×28 перед обучением модели CNN.

Вот результаты:

На тестовом наборе данных:

Точность: 85%

Матрица ошибок:

enter image description here

На реальном тестовом наборе данных с 821 изображением:

Точность: 88%

Матрица ошибок:

enter image description here

Как видно из матрицы, имеется значительная ошибка классификации метки ’10’ (символ “https://datascience.stackexchange.com/”) в метки ‘1’ и ‘7’.

Конкретная проблема:

enter image description here

Я попробовал первое решение, предложенное в аналогичной теме, но оно не дало значительного улучшения результатов.

Есть ли у кого-нибудь решения или рекомендации по этой проблеме? Спасибо за ваше внимание. С нетерпением жду ваших ответов.

Недостаток симметрии интересен. Ваша модель путает “/” с “1” и “7”, но никогда “1” или “7” с “/”. На мой взгляд, это говорит о том, что отсутствие “клюва” на верхней части линии, который позволяет отличать “/” от “7”, по какой-то причине не распознается.

Я бы сначала проверил данные и посмотрел на “/”, чтобы убедиться, что они имеют правильно назначенные метки. Если все в порядке, попробуйте настроить архитектуру, чтобы помочь модели заметить отсутствующую часть линии, которая является разницей между “/” и “7”. Я бы попробовал эксперименты с:

  • различной активационной функцией
  • более глубокой сетью
  • некоторыми вариациями в слоях, такими как различия между выводами двух слоев

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

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

Теория

Начнем с теоретического обоснования проблемы. Ваша задача заключается в классификации печатных числовых символов, включая специфический символ "https://datascience.stackexchange.com/", который вы обозначили как класс ’10’. Главная трудность заключается в различной природе изображений: изначальное разрешение данного символа — 28×28 пикселей, в то время как остальные изображения имеют разрешение 224×224 пикселей. В конечной технике вы выравниваете разрешение всех изображений до 28×28 пикселей. Это может привести к потере важной информации, особенно для классов, которые сильно отличаются по визуальному представлению.

Примеры проблем

Давайте разберем примеры, как это может повлиять на качество предсказаний модели. Поскольку символы "/" и "7" часто путаются из-за их визуального сходства на пониженном разрешении, модель может не распознавать детали, которые обычно помогают человеку отличить один символ от другого. Этот факт подтверждается вашим наблюдением, что символ "/" постоянно путается с ‘1’ и ‘7’, но при этом ‘1’ и ‘7’ не путаются с ‘/’. Это может быть следствием потери информации при изменении разрешения и недостатка данных для успешного обучения модели сотрудничающих признаков различия.

Применение

  1. Проверка и подготовка данных: Прежде всего, следует убедиться, что все данные правильно маркированы. Проанализируйте прямо сейчас набор данных, чтобы подтвердить, что все изображения с меткой "/" действительно являются этим символом.

  2. Изменение архитектуры модели: Возможно, вам стоит попробовать увеличить глубину вашей нейронной сети или настроить разнообразие слоев. Добавление большего числа свёрточных слоев (convolutional layers) может улучшить способность модели к распознаванию мелких деталей в изображениях.

  3. Изменение разрешения для обучения: Рассмотрите возможность использования изображений с их исходным разрешением (224×224) для всех классов. Это позволит модели извлекать больше признаков, которые могли быть потеряны при сжатии до 28×28.

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

  5. Смена функции активации: Экспериментируйте с разными функциями активации. Для примера, попробуйте использовать ReLU, Leaky ReLU, или ELU, чтобы улучшить способность модели к обучению.

  6. Применение метрик и подходов валидации: Используйте метрики, такие как f1-score для отдельных классов, для того чтобы получить более полное понимание работы модели на каждом из классов, а не только в терминах общей точности.

  7. Использование предобученных моделей: Рассмотрите возможность использования предобученных моделей, таких как VGG, ResNet, или EfficientNet, которые могут успешно работать с изображениями разных размеров и извлекать из них больше характеристик.

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

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

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