Автор работы: Пользователь скрыл имя, 11 Марта 2012 в 18:47, отчет по практике
В данной практической работе будет исследована проблема распознавания образов с помощью использования искусственных нейронных сетей[1]. Практической частью данной работы является построение нейронной сети (в простом случае персептрона[2]), и обучение данной нейронной сети на множестве образов (графические растровые файлы, содержащие изображения геометрических фигур, цифр и букв английского алфавита). Также отдельной целью стоит уменьшение времени обучения сети и увеличение быстродействия работы самой сети.
1. Введение
2. Тема производственной практики
3. Цель работы
4. Задачи работы
5. Программные средства используемые в процессе производственной практики
6. Общая информация об искусственных нейронных сетях
7. Некоторые известные применения нейронных сетей
8.1. Распознавание образов и классификация
8.2. Прогнозирование
8. Решение задач
8.1. Задача №1 связать изображения фигур с их названиями
8.2. Задача №2. Распознавание рукописных цифр (0-9).
8.3. Задача №3. Распознавание рукописных английских букв (А-J)
9. Заключение
10. Список используемой литературы
Также я добавляю кнопки «Работать» для того чтобы запустить сеть, и кнопку «Шаг» для просмотра всех экземпляров цифр.
Код кнопки «Работать»:
control. setEpochs ( 30 )
control. resetNetwork ( )
control. runNetwork ( )
control. setEpochs ( 40 )
Код кнопки «Шаг»:
control. stepExemplar ( )
Вторая часть нейронной сети состоит из многослойного персептрона. Он идеально подходит для задач классификации. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 10 чисел - вектор ошибки.
С помощью специального набора формул (алгоритма обратного распространения ошибки) сеть позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же цифру (а также различные изображения одной и той же цифры) мы можем предъявлять нейронной сети много раз. В процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Когда величина ошибки достигает нуля или приемлемого малого уровня, тренировку останавливают, а полученную нейронную сеть считают натренированной и готовой к применению на новых данных. (Рис. 22)
На выходы нейронной сети добавляю гистограммы для просмотра уровня выходного сигнала. И график для отображения величины среднеквадратической ошибки. Так как используется бесконтрольное обучение, то обучение заканчивается после 30 итерации (повтора).
8.3. Задача №3. Распознавание рукописных английских букв (А-J)
Дано: растровое черно-белое изображение 10 букв английского алфавита размером 12x18 пикселов каждая.(Рис. 23)
Надо: определить какая эта буква (10 букв ).
Формулировка для нейронной сети:
Дано: входной вектор из 216 двоичных символов (432=12x18).
Надо: построить нейронную сеть с 216 входами и 10 выходами, которые помечены названиями соответствующих букв. Если на входе нейронной сети, например изображение буквы "D", то максимальное значение выходного сигнала достигается на выходе с названием буквы "D". Аналогично нейронная сеть работает для всех 10 букв.
Используемые компоненты: SangersFull, ImageViewer, File Inspector, AbitrarySynapse.
1. Компонент SangersFull (Рис. 24) используется для проведения процедуры самообучения сети. Этот метод используется для обучения сложных сетей.
2. Компонент ImageViewer (Рис.25) предоставляет возможность отображения графических данных.
3. Компонент File Inspector (Рис.26) используется для подключения к сети файла с данными.
4. Компонент AbitrarySynapse (Рис.27) обеспечивает произвольное соединение между входами и выходами аксонов.
Построение сети:
Аналогично предыдущему примеру у нас имеется некоторая база данных, содержащая набор рукописных изображений английских букв. Предъявляя изображение буквы "D" на вход нейронной сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ - в данном случае нам хотелось бы, чтобы на выходе нейронной сети с меткой "D" уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой нужной буквы, а 0 - на всех остальных выходах. (Рис. 28)
Начальными данными являются растровые черно-белые изображения букв размером 12x18 пикселей. Для нейронной сети простейшее формулирование задачи есть таким: на входе вектор из 216 двоичных символов (216=12x18). При этом для определения критериев анализа входного изображения можно использовать разные подходы - определять наклон букв; разбивать изображение на блоки и оценивать процентное количество белых и черных пикселей; найти количество сечения параллельных прямых черными областями. Можно все эти средства комбинировать и использовать вместе, таким образом, увеличивая достоверность верного ответа. Чем удачнее будет выбор - что брать за признаки образа - тем точнее и объективнее обучится персептрон, и тем эффективнее будет распознавать незнакомые образы.
Таким образом, не правильные оценки персептроном некоторых тестовых образов с нашей точки зрения - правильны с его точки зрения, так как он оценивает только признаки, которые мы подаем ему на вход. И для лучшей распознаваемости нужно найти более удачные признаки, либо не рассчитывать на то, что персептрон сможет распознавать шрифты, сильно отличающиеся от обучающих шрифтов. (Рис. 29)
.
Образ разбивается на прямоугольники (в нашем случае 6 полос по горизонтали x 6 полос по вертикали = 36 областей). В каждом считается количество черных и белых пикселей. Если больше черных "1", белых "-1". При этом первоначально считается "коэффициент черноты". То есть если во всем образе белых пикселей больше черных в 2 раза, то при сравнении в квадрате - количество черных умножается на 2.
Таким образом, мы получаем 6х6=36 входных признаков. Этот метод интересен тем, что для каждого образа формируется свой, более-менее отличающийся набор. И две даже не много отличающихся буквы, таким образом, кодируются разными наборами.
Образ расчерчивается прямыми по горизонтали и по вертикали (в нашем случае 6 - горизонтальных и 6 вертикальных). На каждой из прямых мы считаем количество пересечений линии черными областями. Этот метод кодирует одинаково почти всегда даже буквы, - которые отличаются даже существенно (здесь важно не взять слишком частое разбиение, иначе это свойство может потеряться). Мы получаем еще 6+6=12 входных признаков. Таким образом, комбинация двух этих признаков дает приемлемый результат.
Образцы исскуственно зашумляются и по зашумленным образцам сеть тренируется распознавать буквы, которых нет в исходной выборке. Шаг за шагом возрастает вероятность распознавания новых букв. Т.е. мощность входного сигнала восстанавливается. Таким образом, сеть производит своеобразную реконструкцию зашумленных букв. (Рис.30).
Также я добавляю кнопки «Работать» для того чтобы запустить сеть, и кнопку «Шаг» для просмотра всех экземпляров цифр.
Код кнопки «Работать»:
control. setEpochs ( 60 )
control. resetNetwork ( )
control. stepExemplar ( )
control. resetNetwork ( )
unsupervisedAxon. setFireNext ( FALSE )
control. runNetwork ( )
control. setEpochs ( 100 )
Код кнопки «Шаг»:
control. stepExemplar ( )
Вторая часть нейронной сети состоит из многослойного персептрона. Он идеально подходит для задач классификации. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 10 чисел - вектор ошибки.
С помощью специального набора формул (алгоритма обратного распространения ошибки) сеть позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же букву (а также различные изображения одной и той же) мы можем предъявлять нейронной сети много раз. В процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Когда величина ошибки достигает нуля или приемлемого малого уровня, тренировку останавливают, а полученную нейронную сеть считают натренированной и готовой к применению на новых данных. (Рис. 31)
На выходы нейронной сети добавляю гистограммы для просмотра уровня выходного сигнала. И график для отображения величины среднеквадратической ошибки. Так как используется бесконтрольное обучение, то обучение автоматически заканчивается после 30 итерации (повтора).
9. Заключение
В данной работе, получение признаков входных векторов было реализовано именно из графических файлов. Однако реализация самой нейронной сети ни коим образом, ни связана с растрами. Также при формировании признаков, нигде не учитывается - цифра это или буква. То есть, не создавая заново новой сети, можно обучить её, распознавать буквы, и вообще любые фигуры. Что касается нейронной сети в принципе, при обучении или распознавании на вход можно подавать любые признаки (например звук). Для этого нужно только переписать классы формирования признаков.
Данные реализации поставленных задач, способны распознавать образы "достаточно" похожие на те, на которых обучали их. Для более серьезной и глубокой проработки этой задачи, необходимо и более глубокое и детальное изучение того огромного опыта, накопленного человеком в области искусственного интеллекта.
10. Список используемой литературы
1) NeuroProject – Обучение. Учебник. Ссылка: http://www.neuroproject.ru/
2) Хайкин, Саймон. Нейронные сети: полный курс, 2e издание. : Пер. с анrл. М. Издательский дом "Вильямс", 2006. 1104 с.
3) Ф. Уоссермен "Нейрокомпьютерная техника: Теория и практика"
4) Мак-Каллок У. С., Питтс В., Логическое исчисление идей, относящихся к нервной активности — М.: Изд-во иностр. лит., 1956
5) http://ru.wikipedia.org/wiki/V
6) http://ru.wikipedia.org/wiki/W
7) http://www.neurosolutions.com/
8) http://ru.wikipedia.org/wiki/S
9) http://ru.wikipedia.org/wiki/ Нейронная_сеть
стр. 4 из 24
[1] Искусственные нейронные сети (ИНС) — математические модели, а также их программные или аппаратные реализации, построенные по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма.
[2] Персептрон - это некоторый инструмент, который способен "запоминать" ("обучиться") - какой образ относится к какому классу. После такого "обучения", в идеале, он должен уметь правильно "узнавать" и другие образы, не входившие в обучающее множество, но достаточно похожие на них.
[3] Главная, внешняя, ведущая машина
[4] Парадигма- пример, модель, образец.
[5] OLE (англ. Object Linking and Embedding, произносится как oh-lay [олэй]) — технология связывания и внедрения объектов в другие документы и объекты, разработанные корпорацией Майкрософт.
[6] DLL (англ. Dynamic-link library — динамически подключаемая библиотека) — понятие операционных систем Microsoft Windows и IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы.
[7]Искусственный нейрон - узел искусственной нейронной сети, являющийся упрощённой моделью естественного нейрона.
[8] Аксон – по аналогии с нервной клеткой, передает импульс от одного нейрона к другим нейронам.
[9] Ассоциативная память (АП) - является особым видом машинной памяти, используемой в приложениях для очень быстрого поиска. Известна также как память, адресуемая по содержимому.
[10] Шум (распределение Гаусса) - физическая величина подверженная влиянию огромного числа случайных помех.