Многослойный персептрон для ocr работает только с некоторыми наборами данных

НОВАЯ РАЗРАБОТКА

Недавно я использовал реализацию MLP OpenCV, чтобы проверить, может ли он решить те же задачи. OpenCV смог классифицировать те же наборы данных, что и моя реализация, но не смог решить тот, который не мог мой. Возможно, это связано с параметрами завершения (определение того, когда заканчивать тренировку). Я остановился перед 100000 итераций, и MLP не обобщал. На этот раз сетевая архитектура состояла из 400 входных нейронов, 10 скрытых нейронов и 2 выходных нейронов.

Я реализовал многослойный алгоритм персептрона и убедился, что он работает с логическим вентилем XOR. Для распознавания текста я научил сеть правильно классифицировать буквы "А" и "В", которые были нарисованы толстым рисунком (маркером). Однако, когда я пытаюсь научить сеть классифицировать инструмент для рисования (карандаш), сеть оказывается застрявшей в долине и неспособной классифицировать буквы за разумное время. То же самое касается писем, которые я нарисовал в GIMP.

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

Моя сетевая архитектура состоит из 400 входных нейронов (по одному на каждый пиксель), 2 скрытых слоя по 25 нейронов в каждом и 2 нейрона в выходном слое. Изображения являются полутоновыми изображениями, а входные значения составляют -0,5 для черного пикселя и 0,5 для белого пикселя.

РЕДАКТИРОВАТЬ:

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

Я полагаю, что я достиг локального минимума, а не долины, но это не должно повторяться.

1 ответ

Решение

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

Есть несколько причин, по которым ваша модель не работает. Параметр установлен неправильно, установка параметров MLP - нетривиальная задача.

Самый простой способ - сначала установить большую скорость обучения, вес импульса и вес регуляризации, но установить очень большой вес итерации (или эпохи). Как только модель расходится, вдвое снижается скорость обучения, вес импульса и вес регуляризации.

Этот подход может заставить модель медленно сходиться к локальному оптимуму, а также дать ей возможность выскочить из плохой долины.

Более того, на мой взгляд, одного выходного нейрона достаточно для двухклассовой задачи. Нет необходимости увеличивать сложность модели, если в этом нет необходимости. Аналогичным образом, если возможно, используйте трехслойный MLP вместо четырехслойного MLP.

Другие вопросы по тегам