#java #cpp #нейронные_сети #обработка_изображений
Добрый вечер! Пытаюсь распознавать изображения латинских букв(A,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) и цифр(2,3,4,5,6,7,8,9) размером 30x30 пикселей. Архитектуру строю такую: 900 нейронов во входном слое, 100 нейронов в первом скрытом слое, 90 нейронов во втором скрытом слое и 33 нейрона на выходе(т.к всего 33 класса исходя из задачи - 25 букв и 8 цифр). Таким образом, на выходе сети получается 33-размерный вектор который соответствует какому-то классу. Например: output: 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - это двойка 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - тройка ...... 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 - Буква Z Входное изображение я преобразую в одномерный массив длины 30x30=900. Элементы массива - значения 0 или 1(Исходное изображение строго чёрно-белое). Получилось сформировать обучающую выборку на 752 элемента. На каждый класс(в среднем) по 15-20 обучающих выборок. Использую алгоритм "Обратного распространения ошибки". Очень долго происходит обучение, т.е на каждую эпоху обучения уходит очень много времени порядка 5 секунд. Скорость обучения выставляю в 0.1, постоянную момента устанавливаю в 0.5. Вопрос вот в чём: Как можно уменьшить количество нейронов на входе, чтобы было не 900, а 30 например. Тогда, я думаю, будет быстро происходить обучение. Т.к матрица изображения содержит 0 или 1, могу ли я произвести суммирование по строкам или столбцам чтобы уменьшить количество нейронов? Порекомендуйте так же подобрать архитектуру сети, по возможности. Спасибо!
Ответы
Ответ 1
Такую проблему уже решили. Действительно она была актуальной,тк получается у вас слишком большое кол-во весов. Посчитайте на своём примере сами, их очень много. Решили проблему - придумав новую архитектуру, и в целом структуру нейронных сетей. Это сверточные нейросети (CNN), как раз предназначенные для распознавания образов. Если Вы НЕ из принципа взяли обычный перцептрон для этой задачи, то советую использовать CNN. Изучение этой сети стоит этого.
Комментариев нет:
Отправить комментарий