@gth-other

Почему нейронная сеть правильно распознает только данные из MNIST?

Реализую нейронную сеть распознавания цифр на чистом C++ (исключительно в образовательных целях). В качестве данных решил использовать MNIST. Для обучения взял 60 000 изображений, для тестирования - 10 000. Написал нейронную сеть, написал обратное распространение, минута обучения и данные для тестирования распознаются с вероятностью в 92.69% (9 269 / 10 000). После этого решил протестировать нейронную сеть на своих собственных изображениях. Открыл GIMP, написал цифры от 0 до 9 белым цветом на черном фоне, экспортировал в PBM формат, а после загрузил в программу. Правильность загрузки изображения проверял, изображение в массив цветов загрузилось корректно. Запускаю нейронную сеть и вижу, что правильные результаты появляются с вероятностью в 10-20%, то есть не многим лучше случайного выбора. Что делать? Какого может быть причина?

Топология нейронной сети:
  • Входной слой - 784 нейрона (28 * 28)
  • Скрытый слой 1 - 16 нейронов
  • Скрытый слой 2 - 16 нейронов
  • Выходной слой - 10 нейронов (каждый нейрон для каждой цифры)


Понимаю, что вряд-ли кому-то будет не лень смотреть код и что я там наворотил, но на всякий случай вот ссылочка.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@gth-other Автор вопроса
Я решил сопоставить свои изображения и изображения из MNIST'а. Выяснилось, что цифры на моих изображениях разного размера, написаны в разных частях картинки, а цифры из MNIST'а - примерно равного размера и написаны точно по центру. Именно поэтому нейронной сети легко определять цифры из MNIST'а и так сложно определять мои. Решение проблемы лежит в переходе с многослойных перцептронов на сверточные нейронные сети.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
скорее всего сеть переобучилась
известная беда для нейронных сетей
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы