← Вернуться к списку

Попытка решения задачи оптического распознавания символов с помощью прямого распространения.

Краткое содержание

Я провожу эксперименты с нейронными сетями и для этого пытаюсь запрограммировать простую задачу OCR. Я узнал, что CNN — лучший выбор, но пока что из-за неопытности я хочу идти шаг за шагом и начать с полносвязных сетей. Итак, мои обучающие данные — это набор примерно из 400 изображений размером 16×16, извлеченный из скрипта, который рисует каждый символ алфавита на маленьком изображении для небольшого набора шрифтов, зарегистрированных на моем компьютере. Затем тестовый набор данных извлекается по той же процедуре, но для всех шрифтов на моем компьютере. Что ж, результаты довольно плохие. Точность составляет около 45-50%, что очень низко... но это не мой вопрос. Дело в том, что я не могу снизить MSE ниже 0,0049, какое бы распределение скрытых слоев я ни применял к сети. Я пробовал несколько архитектур, и всё сводится к этой цифре. Означает ли это, что сеть не может учиться дальше, учитывая данные? Однако это значение MSE дает и такие плохие результаты. Я использую API TensorFlow напрямую, без keras или оценщиков.

Полный текст

Пытаюсь решить задачу оптического распознавания символов с помощью прямой сети Задать вопрос

Задан 6 лет, 10 месяцев назад Изменен сегодня Просмотрен 187 раз

Задан 6 лет, 10 месяцев назад

3 $\begingroup$ Я провожу эксперименты с нейронными сетями и пытаюсь запрограммировать простую задачу OCR. Я знаю, что CNN — лучший выбор, но на данном этапе и из-за неопытности хочу идти шаг за шагом и начать с прямых сетей. Мои обучающие данные — это набор примерно из 400 изображений 16*16, извлеченных из скрипта, который рисует каждый алфавитный символ в маленьком изображении для небольшого набора шрифтов, зарегистрированных на моем компьютере. Затем тестовый набор извлекается по той же процедуре, но для всех шрифтов на моем компьютере. Ну, результаты довольно плохие. Точность около 45-50%, что очень плохо... но это не мой вопрос. Дело в том, что я не могу снизить MSE ниже 0,0049, какое бы распределение скрытых слоев я ни применял к сети. Я пробовал несколько архитектур, и все сводится к этой цифре. Означает ли это, что сеть не может учиться дальше, учитывая данные? Однако это значение MSE дает и такие плохие результаты. Я использую API Tensorflow напрямую, без keras или estimators, и для списка из 62 распознаваемых символов вот примеры архитектур, которые я использовал: [256,1860,62] [256,130,62] [256,256, 128 ,62] [256,3600,62] .... Но никогда не получал MSE ниже 0,0049, и все равно результаты не превышают 50%. Любые подсказки будут очень кстати. feedforward-neural-networks optical-character-recognition Share Improve this question Follow edited Mar 5, 2019 at 10:04 nbro 43.2k 14 14 gold badges 121 121 silver badges 222 222 bronze badges asked Mar 4, 2019 at 21:13 Chal.lo 51 1 1 bronze badge $\endgroup$ 5 $\begingroup$ на самом деле дело не только в архитектуре, как насчет значения скорости обучения? вы пытались ее настроить? как насчет количества обучающих эпох? $\endgroup$ malioboro – malioboro 2019-03-04 22:23:52 +00:00 Commented Mar 4, 2019 at 22:23 $\begingroup$ 400 обучающих примеров — довольно маленькое число, я думаю, для решения этой задачи. Вам понадобятся тысячи картинок, чтобы достичь хороших результатов, я полагаю. $\endgroup$ nbro – nbro 2019-03-05 10:04:51 +00:00 Commented Mar 5, 2019 at 10:04 $\begingroup$ Сколько у вас категорий? 26? $\endgroup$ user9947 – user9947 2019-03-05 10:33:21 +00:00 Commented Mar 5, 2019 at 10:33 $\begingroup$ Нет, 62. Выход сети — это one-hot массив, каждая позиция соответствует различному символу для распознавания $\endgroup$ Chal.lo – Chal.lo 2019-03-06 07:44:19 +00:00 Commented Mar 6, 2019 at 7:44 $\begingroup$ Я бы порекомендовал использовать более большой набор данных. Наборы данных MNIST или EMNIST отлично подходят для обучения OCR. Также, сколько поколений вы обучаете свою сеть. $\endgroup$ Sean Mabli – Sean Mabli 2021-03-24 17:18:35 +00:00 Commented Mar 24, 2021 at 17:18 Add a comment | 1 Answer 1 Sorted by: Reset to default Highest score (default) Date modified (newest first) Date created (oldest first) 0 $\begingroup$ Итак, обучающие данные — это небольшое число примеров (400), взятых из небольшого набора шрифтов, а тестовые данные — это гораздо более большой набор данных, взятый из гораздо большего набора шрифтов и поэтому гораздо более изменчивый, чем обучающие данные. Два вопроса здесь — это небольшой размер обучающих данных и разница в распределениях между обучающими и тестовыми данными. Я бы попробовал следующее: Вместо определения собственной архитектуры попробуйте некоторые из предварительно обученных архитектур, доступных в Keras, таких как ResNet50 или VGG16. Вы можете запустить их либо со случайными весами, либо с весами imagenet. Удалите верхний слой и поместите свои собственные слои. Вы также можете выборочно размораживать слои и посмотреть, имеет ли это какое-либо значение. Чтобы справиться с упомянутыми выше проблемами, используйте аугментацию данных для введения изменчивости в обучающий набор. Вы также не упомянули в посте, как вы решаете прекратить обучение сети. В случае переобучения сети вы можете попробовать f