пятница, 8 февраля 2013 г.

требования к пакету нс задачи распознавания образов

% создаем новую сеть с использованием диалогового окна

P = alphabet; % входная матрица, содержащая информацию о буквах

[S2,Q] = size(targets); % количество нейронов на втором слое (количество выходов сети)

S1 = 10; % количество нейронов на скрытом слое

А если записать в синтаксисе скриптового языка MATLAB это все, то получим:

Построим нейронную сеть, которая включает в себя 35 входов (потому что вектор состоит из 35 элементов) и 26 выходов (потому что букв 26). Данная НС является двухслойной сетью. Функцией активации поставим логарифмическую сигмоидную функцию, которую удобно использовать, потому что выходные векторы содержат элементы со значениями в диапазоне от 0 до 1, что потом удобно перевести в булеву алгебру. На скрытый уровень выделим 10 нейронов (потому что просто так, можно любое значение, дальше проверим, а сколько их надо). Если Вам, что-то не понятно из выше написанного про построение сети, прочитайте, пожалуйста, про это в литературе (нужные понятия, если собираетесь работать с НС). Схематически рассматриваемую сеть можно представить следующей схемой:

Подведя итог, на вход нейронной сети подается входной 35-элементный вектор, который сопоставляется с соответствующей буквой из 26-элементного выходного вектора. Выходом НС является 26-элементный вектор, в котором только один элемент, который кодирует соответствующую букву алфавита, равен 1. Разобравшись с созданием интерфейса для работы с НС приступим к её созданию.

Из теории известно, что нам надо входные данные и выходные данные (targets, целевые данные) для обучения сети. Целевой вектор будет содержать 26 элементов, где один из элементов имеет значение 1, а все остальные элементы равны 0, номер элемента содержащего единицу кодирует соответствующую букву алфавита.

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

MATLAB предлагает символы, формализуемые матрицей из 7 строк и 5 столбцов. Но такую матрицу нельзя просто так подать на вход нейронной сети, для этого необходимо еще собрать 35 элементный вектор.

Не много представив происходящее в голове, приступим к реализации этого в MATLAB. В данном пакете уже предоставлен латинский алфавит, даже есть демо-пример работы с ним, но с него возьмем только алфавит. Поэтому можно воспользоваться их данными, а можно даже нарисовать все буквы самому, это по желанию.

Теперь вернемся к проблеме представления изображения, понятного для нейронной сети. Понятно, что каждая буква на изображение может быть представлена как матрица с определенными значениями элементов, которые четко могут определить букву. То есть представление символа латинского алфавита удобно формализовать матрицей из n строк и m столбцов. Каждый элемент такой матрицы может принимать значения в диапазоне [0, 1]. Так, символ A в таком формализованном виде будет выглядеть следующим образом (слева без искажений, справа с искажениями):

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

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

Попробуем разобраться с возможностями при использовании нейронной сети с обратным распространением ошибки в целях распознавания букв латинского алфавита. Алгоритм будем реализовывать в программной среде инженерного математического пакета MATLAB, а именно понадобится мощь Neural Network Toolbox.

Определимся с тем, что мы должны разобрать, понять и сделать. Нам необходимо построить экспертную систему, которая сможет распознавать буквы латинского алфавита. Для этого требуется разобраться с возможностями нейронных сетей (НС) и построить такую систему, которая сможет распознавать буквы латинского алфавита. Детально с теорией нейронных сетей можно познакомиться по ссылкам, приведенным в конце статьи. В данной статье не найти описания теории (математики) работы НС или описания команд при работе с MATLAB (ну только если по ссылкам в конце статьи), это остается на вашей совести. Целью статьи ставится задача показать и рассказать применение нейронной сети для практической задачи, показать результаты, наткнутся на подводные камни, постараться показать, что возможно выжать из нейронной сети, не вдаваясь в подробности, как она реализована, для остального есть специализированная литература, от которой все равно не убежать.

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

В последнее время на Хабре появилось, а также существует много содержательных статей, описывающих работу и принцип понятия нейронная сеть , но, к сожалению, как всегда очень мало описания и разбора полученных практических результатов или их не получения. Я думаю, что многим, как и мне удобней, проще и понятней разбираться на реальном примере. Поэтому в данной статье постараюсь описать почти пошаговое решение задачи распознавания букв латинского алфавита + пример для самостоятельного исследования. уже сделано, теперь давайте еще разберёмся и научим компьютер распознавать буквы.

Нейронные сети и распознавание символов

Нейронные сети и распознавание символов / Хабрахабр

Комментариев нет:

Отправить комментарий