Исследование алгоритмов распознания символов. Моделирование нейронной сети

Описание существующих видов нейронных сетей. Выявление их достоинств и недостатков. Основные возможности программного продукта Matlab. Моделирование и обучение нейронной сети на основе созданных дескрипторов для каждого символа английского алфавита.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Контролируемы нейронные сети - это сети, которые подразумевают обучение с учителем. К данному типу в Neural Network Toolbox относится 4 вида сетей:

· Радиально- базисные сети. Сети, которые обеспечивают быстрый способ постройки нелинейных сетей прямого распространения.

· Динамические сети. Они используют память и рекуррентные обратные связи для распознавания пространственных и временных закономерностей. Широко применимы для моделирования нелинейных динамических систем и в приложениях систем управления.

· LVQ- сети. Они используют метод классификации моделей, которые не являются линейно разделимыми. Данные сети позволяют определить границы класса.

· Сети прямого распространения. Имеют односторонние соединения от входных и до выходных слоёв. Используются для распознания образов и аппроксимации нелинейных функций.

Неконтролируемые нейронные сети - это сети, обучение которых происходит без учителя. Данный тип сетей обучается постоянно для приспособления к новым входным значениям.

В Neural Network Toolbox есть два типа неконтролируемых сетей: самоорганизующиеся карты и конкурентные слои.

Самоорганизующиеся карты служат для классификации входных векторов по сходству. Они применяются для таких задач как классификация и распознавание образов.

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

Так же в Neural Network Toolbox предусмотрен графический интерфейс пользователя, который вызывается с помощью команды nntool. на экране появится окно Network/ Data manager как показано на рис. 2.8.

Рис. 2.8 - Окно пользовательского интерфейса nntool

На данном рисунке:

· Input data - задаются входы нейронной сети;

· Target data - задаётся последовательность целей;

· Networks - список созданных нейронных сетей;

· Outputs data - отображаются последовательности выходов нейронной сети;

· Error data - показываются ошибки;

· Input delay state - начальные условия линии задержки входа;

· Layer delay state - начальные условия линии задержки слоя.

Так же на данном окне присутствуют функциональные кнопки (слева направо):

· Import - кнопка для загрузки уже существующих данных. При нажатии появляется окно с выбором, откуда нужно загружать файлы с диска или же с рабочей области Matlab как на рис. 2.9;

Рис. 2.9 - Окно импорта

· New - кнопка, с помощью которой можно создать нейронную сеть. На рис 2.10 показано окно создания нейронной сети. В появившемся окне можно выбрать тип нейронной сети, количество нейронов в слое и количество слоев, функцию обучения, а также посмотреть вид получившейся нейронной сети;

Рис 2.10 - Окно создания нейронной сети

· Open - служит для просмотра данных, которые находятся в переменных или же для настройки нейронной сети;

· Export - служит для экспорта данных в рабочую область Matlab или же для сохранения данных на диск, как показано на рис 2.11;

Рис 2.11 - Окно экспорта данных

· Delete - служит для удаления выбранных переменных;

· Help - служит для вызова окна справки, в котором описываются правила работы с диспетчером nntool.

Для того, чтобы создать нейронную сеть в Matlab, необходимо:

1. Создать последовательности входов и целей, либо загрузить их из рабочей области или файла;

2. Создать новую нейронную сеть и выбрать ее тип;

3. Открыть окно Network, выбрать вкладку train, задать входные и целевые данные (из предложенного списка) и нажать кнопку train.

На рис. 2.12 изображено окно с процессом обучения нейронной сети. Здесь можно пронаблюдать то, как обучалась нейронная сеть. Посмотреть количество эпох, потраченное время.

Так же можно пронаблюдать графики представления, состояние обучения и регрессию.

Рис 2.12 - Процесс обучения нейронной сети

Выводы

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

2) Matlab имеет хорошую интеграцию с большинством приложений, таких как exel, а так же с языками программирования, например с С++.

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

3. Моделирование нейронной сети для распознавания символов

3.1 Выбор вида нейронной сети

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

Перед началом моделирования сети нам нужно сделать дескрипторы каждого символа. В данной работе будет использоваться regionprops. Данная функция позволяет вычислять дескрипторы области. Для выполнения работы будет использоваться 4 дескриптора:

· Eccentricity - скаляр, равный эксцентриситету эллипса, который имеет те же вторые моменты, что и исходная область. Эксцентриситет равен частному расстоянию между фокусами и длины большой оси. Величина расположена в интервале от 0 до 1;

· MajorAxisLength - длина, в пикселах, большой оси эпсилоида, который имеет те же вторые моменты, что и исходная область;

· MinorAxisLength - длина, в пикселах, малой оси эпсилоида, который имеет те же вторые моменты, что и исходная область;

· Solidity - Скаляр, пропорциональный числу пикселов выпуклой оболочки, которые лежат и в области.

Regionprops является функцией пакета Image Processing Toolbox. Функция применяется для изменения свойств объектов в некоторой окрестности изображения и позволяет представить результат в виде массива. Если же применить к изображению, где уже отмечены компоненты, то создастся структура для каждой компоненты.

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

Обучение будет происходить методом обратного распространения ошибки. Обратное распространение ошибки -- это способ расчета первых производных. Метод более точен при вычислении частных производных, а также гораздо производительнее. Весь же вектор градиента вычисляется за время, в 2- 3 раза более длительное, чем само вычисление сложной функции, которую реализует нейронная сеть.

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

Вот эта скорость и точность вычисления градиента и есть основная ценность алгоритма обратного распространения для вычислительной математики.

3.2 Моделирование нейронной сети

Для каждого символа создаем m- файл, с помощью которого создаются нужные дескрипторы.

f = imread ('A2.jpg');

e=rgb2gray(f);

c=255-e;

d=im2bw(c);

g=imfill(d,'holes');

bw=bwareaopen(g,5);

l=bwlabel(bw);

D1=regionprops(l,'Eccentricity','MajorAxisLength','MinorAxisLength','Solidity');

K=[D1.Eccentricity,D1.MajorAxisLength,D1.MinorAxisLength,D1.Solidity];

Получается набор из 26 переменных, показанных на рисунке 3.1

Рис. 3.1 - Переменные с дескрипторами символом

Далее объединяем данные вектор-столбцы в один массив p размером 4x26 и создаем целевой вектор t, в котором содержатся цифры от 1 до 26.

Теперь, когда данные подготовлены, можно приступать к созданию нейронной сети. Для этого в окне команд прописываем nntool для вызова графического интерфейса создания нейронной сети. Входными данными будет является вектор p, а таргет значениями - t, как показано на рис. 3.2

Теперь нужно определиться с количеством нейронов в скрытом слое нейронной сети.

Рис. 3.2 - Задание входных и таргет значений

Большее число нейронов в скрытом слое не дадут прироста к результативности. Для наглядности построим график, показывающий количество нейронов в скрытом слое и процент ошибочного распознавания.

Можно предположить, что чем больше нейронов в скрытом слое, тем больший шанс, что нейронная сеть распознает почти 100% символов. Но на определенном моменте (25 нейронов в скрытом слое) можно увидеть, что количество ошибок распознавания будет возрастать.

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

Рис. 3.3 - Структура моделируемой нейронной сети

Рис. 3.4 - График отношения количества нейронов к ошибке распознавания

Теперь переходим к обучению нейронной сети. Переходим во вкладку Train там выбираем переменные, которые подаем на вход и таргет переменные, как на рис 3.5

Рис 3.5 - Выбор данных для обучения

Нажимаем кнопку обучения нейронной сети и у нас появляется окно обучения (рис.3.6).

Рис.3.6 - Процесс обучения нейронной сети

Можно посмотреть процесс обучение нейронной сети на графике (рис.3.7)

Рис. 3.7 - Графическое представление обучения нейронной сети

3.3 Проверка моделируемой нейронной сети

Нейронная сеть обучена и теперь каждой букве присвоено свой вектор- столбец, это сопоставление показано в таблице 3.1.

Таблица 3.1 Присвоенные значения

A

B

C

D

E

F

G

H

[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

I

J

K

L

M

N

O

P

[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]

Q

R

S

T

U

V

W

X

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]

Y

Z

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0]

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]

При симуляции через команду sim нейронная сеть распознает 100% эталонных символов.

Демонстрация того, что символ распознался, на примере буквы R.

Для начала в командной строке пишем: y=sim (net, R); Нам выводится номер, присвоенный букве в результате обучения нейронной сети показанный на рис.3.8 и выводится изображение данной буквы в отдельном окне.

Рис. 3.8 - Результат выполнения команды

Теперь нам нужно все символы повернуть на несколько градусов и проверить, распознает их нейронная сеть или нет. Для демонстрации возьмем символы “A”, “H” и “G” и повернем их на +5, -10, +3 градусов. Для поворота будем использовать функцию imrotate(g, 5, 'bicubic'). Результаты занесем в таблицу 3.2

Таблица 3.2 Повернутые символы

Угол поворота/Буквы

A

H

G

0

[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

+5

[1.35 0 0 0 0 0 0 0.51 0 0 0 0 0 0 0 0 0 0.57 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 1.36 0 0 0 0 0.31 0 0 0 0 0.21 0 0 0 0 0 0 0 0]

[0 0.32 0 0 0 0 1.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

-10

[1.82 0 0 0 0 0 0 0 0 0 0 0 0 0.45 0 0 0 0 0 0.33 0 0 0 0 0 0]

[0 0 0 0 0 0 0 1.68 0 0 0 0 0 0 0 0 0.77 0 0 0 0 0 0.39 0 0 0]

[0 0 0 0 0 0 1.11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.69 0]

+3

[1.44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.36 0 0 0.58 0 0 0 0 0 0]

[0.33 0 0 0 0 0 0 1.70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 1.67 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0]

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

Так же для наглядности, на рис.3.9 продемонстрируем симуляцию нейронной сети для буквы N, которая была повернута на +5 градусов.

Рис. 3.9 - Результат распознавания букву N

Теперь попробуем подать на вход символ, которого нет в наборе эталонов. Например, подадим цифру 1. На выходе получается число, которое не относится ни к одному символу и выводится шум. (Рис. 3.10)

Рис. 3.10 - Результат попытки распознать цифру 1

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

Выводы

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

2) После обучения была проверена работоспособность сети. Все эталонные образы были распознаны.

3) Тестирование обученной нейронной сети показал, что несмотря на наклон символов, она все равно правильно распознает символы. Это свидетельствует о том, что с помощью дескрипторов области можно обучить нейронную сеть, которая, возможно, найдет применение на практике.

нейронный сеть matlab дескриптор

Заключение

В представленной дипломной работе была смоделирована нейронная сеть, обученная на основе дескрипторов образов. Она использовалась для распознавания символов английского алфавита, которые подвергались повороту.

Была выбрана трехслойная нейронная сеть с прямым распространением сигнала и методом обратного распространения ошибки. Данная сеть была выбрана, так как она не ограничена количеством образов, как нейронная сеть Хопфилда, а также проста в реализации. При правильном обучении и правильно выбранных дескрипторах области нейронная сеть показывает хороший показатель распознаваемости символов.

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

Размещено на Allbest.ru


Подобные документы

  • Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.

    лабораторная работа [1,1 M], добавлен 05.10.2010

  • Прогнозирование на фондовом рынке с помощью нейронных сетей. Описание типа нейронной сети. Определение входных данных и их обработка. Архитектура нейронной сети. Точность результата. Моделирование торговли. Нейронная сеть прямого распространения сигнала.

    дипломная работа [2,7 M], добавлен 18.02.2017

  • Математическая модель нейронной сети. Однослойный и многослойный персептрон, рекуррентные сети. Обучение нейронных сетей с учителем и без него. Алгоритм обратного распространения ошибки. Подготовка данных, схема системы сети с динамическим объектом.

    дипломная работа [2,6 M], добавлен 23.09.2013

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

    статья [245,7 K], добавлен 29.09.2008

  • Математическая модель искусственной нейронной сети. Структура многослойного персептрона. Обучение без учителя, методом соревнования. Правило коррекции по ошибке. Метод Хэбба. Генетический алгоритм. Применение нейронных сетей для синтеза регуляторов.

    дипломная работа [1,5 M], добавлен 17.09.2013

  • Разработка нейронной сети, ее применение в алгоритме выбора оружия ботом в трехмерном шутере от первого лица, тестирование алгоритма и выявление достоинств и недостатков данного подхода. Обучение с подкреплением. Описание проекта в Unreal Engine 4.

    контрольная работа [611,0 K], добавлен 30.11.2016

  • Этапы решения задачи классификации цифр арабского алфавита на основе нейронных сетей: выбор класса, структуры и пакета нейронной сети, ее обучение, требования к информационной и программной совместимости, составу и параметрам технических средств.

    реферат [111,6 K], добавлен 19.10.2010

  • Сущность, структура, алгоритм функционирования самообучающихся карт. Начальная инициализация и обучение карты. Сущность и задачи кластеризации. Создание нейронной сети со слоем Кохонена при помощи встроенной в среды Matlab. Отличия сети Кохонена от SOM.

    лабораторная работа [36,1 K], добавлен 05.10.2010

  • Разработка алгоритма и программы для распознавания пола по фотографии с использованием искусственной нейронной сети. Создание алгоритмов: математического, работы с приложением, установки весов, реализации функции активации и обучения нейронной сети.

    курсовая работа [1,0 M], добавлен 05.01.2013

  • Математические модели, построенные по принципу организации и функционирования биологических нейронных сетей, их программные или аппаратные реализации. Разработка нейронной сети типа "многослойный персептрон" для прогнозирования выбора токарного станка.

    курсовая работа [549,7 K], добавлен 03.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.