Реализую нейронную сеть распознавания цифр на чистом
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 нейронов (каждый нейрон для каждой цифры)
Понимаю, что вряд-ли кому-то будет не лень смотреть код и что я там наворотил, но на всякий случай вот
ссылочка.