2013-04-22 3 views
0

Я работаю над распознаванием символов (и более поздним распознаванием отпечатков пальцев) с использованием нейронных сетей. Меня смущает последовательность событий. Я тренирую сеть с 26 письмами. Позже я увеличу это, включив 26 чистых писем и 26 шумных писем. Если я хочу, чтобы в одном письме говорилось «А», каков правильный способ сделать это? Вот что я сейчас делаю.Путаница с нейронными сетями в MATLAB

1) Поездная сеть с матрицей 26x100; каждая строка содержит букву от сегментации bmp (10x10). 2) Однако для тестовых целей я использую свою матрицу ввода для «А». У меня было 25 строк нулей после первого ряда, так что моя матрица ввода была того же размера, что и моя целевая матрица. 3) Я запускаю выполнение (нетто, testTargets, выходы), где выходы являются выходами из сети, обученной матрицей 26x100. testTargets - это матрица для «A».

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

1) Обучение сети для файла изображения, который я выбираю (после обработки изображения в логические массивы).

2) Используйте эту обученную сеть для распознавания буквы в другом файле изображения.

Итак, обучите сеть распознаванию A через Z. Затем выберите изображение, запустите сеть, чтобы увидеть, какие буквы распознаются на выбранном изображении.

+0

Не могли бы вы уточнить свой вопрос? Я не совсем уверен, в какой части этого процесса возникают проблемы. Не могли бы вы также опубликовать код? В общем, попытка реализовать метод ml без сильного интуитивного понимания того, как он работает, только закончится в слезах. У вас есть концептуальная проблема или ошибка в коде? –

+0

Проводка моего кода будет немного сложной, так как я реализовал для нее графический интерфейс. Когда я разрабатывал эту программу, я понял, что могу подумать об этом неправильно. У меня проблемы со всей процедурой. Когда я получу, чтобы узнать, может ли сеть распознать какой-либо вход, я его даю? Я понимаю, что я тренирую сеть для букв от A до Z, затем я представляю логический массив для любых букв или букв из обработки изображений с использованием bwlabel. Я надеюсь получить ответ от сети, в котором говорится, были ли мои письма признаны или нет. – roldy

ответ

0

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

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

Общий рабочий процесс начинается с любых нейронов/узлов верхнего уровня, которые вы используете получили, инициализировали их значениями ваших данных (в вашем случае вы, вероятно, запустили бы каждый из них, так как пиксельные значения в вашем изображении, нормализованные как бинарные, были бы простейшими). Затем каждый из этих узлов будет умножен на вес и подан вниз к вашему второму слою, который будет считаться «скрытым слоем» в зависимости от суммы (либо геометрической, либо арифметической суммы в зависимости от вашей реализации), которая будет использоваться с чтобы определить состояние вашего скрытого слоя.

Этот последний пункт был немного теоретическим и трудно следовать, поэтому вот пример. Представьте, что ваша первая строка имеет три узла ([1,0,1]), а веса, соединяющие три из этих узлов с первым узлом вашего второго слоя, - это что-то вроде ([0.5, 2.0, 0.6]). Если вы делаете арифметическую сумму, что означает, что взвешивание на первый узле в вашем «скрытом слое» будет

1*0.5 + 0*2.0 + 1*0.6 = 1.1

Если вы используете логистическую функцию в качестве функции работы (очень распространенной выбор, хотя tanh также является обычным явлением), это создало бы вероятность того, что этот узел оценит 1 приблизительно 75%.

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

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

Надеюсь, что это поможет, дайте мне знать, если у вас есть еще вопросы.

+0

У меня вопрос, который у меня есть, почему мы обучаем сеть целями и тем, что хотим распознать. Я понимаю, что мы хотим «построить» идеальную сеть, основанную исключительно на целевых задачах, получить весовые коэффициенты для этой сети, а затем представить наш образ, чтобы получить признание и посмотреть, каковы результаты. Я просто не понимаю, почему мы используем наш образ в процессе обучения. – roldy

+0

Подождите, вы не понимаете, почему вы тренируете сеть? Или вы смущены различием между контролируемыми и неконтролируемыми методами обучения? Причина, по которой вы тренируете сеть, состоит в том, что случайные веса не имеют смысла. Весы также абсолютно одинаковы для любой идентификации, которую вы делаете. Это точка нейронной сети. Также в идеале вы должны иметь различный набор для обучения и тестирования. Направьте сеть на один набор изображений и проверьте ее на другом наборе. –

+0

Я следил за созданным кодом MATLAB. Я понимаю, почему мы тренируем сеть. Я опубликую фрагмент сгенерированного кода завтра. – roldy

Смежные вопросы