Автор работы: Пользователь скрыл имя, 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. Список используемой литературы
Обучить нейронную сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку, изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем". (Рис.3)
Оказывается, что после многократного предъявления примеров веса нейронной сети стабилизируются, причем нейронная сеть дает правильные ответы на все (или почти все) примеры из базы данных. В таком случае говорят, что "нейронная сеть выучила все примеры", "нейронная сеть обучена", или "нейронная сеть натренирована".
Важно отметить, что вся информация, которую нейронная сеть имеет о задаче, содержится в наборе примеров. Поэтому качество обучения нейронной сети напрямую зависит от количества примеров в обучающей выборке, а также от того, насколько полно эти примеры описывают данную задачу. Так, например, бессмысленно использовать нейронную сеть для предсказания финансового кризиса, если в обучающей выборке кризисов не представлено. Считается, что для полноценной тренировки нейронной сети требуется хотя бы несколько десятков (а лучше сотен) примеров[1].
После того, как нейронная сеть обучена, мы можем применять ее для решения полезных задач. Важнейшая особенность человеческого мозга состоит в том, что, однажды обучившись определенному процессу, он может верно, действовать и в тех ситуациях, в которых он не бывал в процессе обучения. Например, мы можем читать почти любой почерк, даже если видим его первый раз в жизни. Так же и нейронная сеть, грамотным образом обученная, может с большой вероятностью правильно реагировать на новые, не предъявленные ей ранее данные. Например, мы можем нарисовать букву "А" другим почерком, а затем предложить нашей нейронной сети классифицировать новое изображение. Веса обученной нейронной сети хранят достаточно много информации о сходстве и различиях букв, поэтому можно рассчитывать на правильный ответ и для нового варианта изображения.
Задачи классификации (Рис. 4) (такие как распознавание букв и цифр) очень плохо алгоритмизуются. И если в случае распознавания букв верный ответ очевидный для нас заранее, то в более сложных практических задачах наученная нейронная сеть выступает как эксперт, который владеет большим опытом и способен дать ответ на трудный вопрос.
7. Некоторые известные применения нейронных сетей
8.1. Распознавание образов и классификация
В качестве образов могут выступать различные по своей природе объекты: символы текста, изображения, образцы звуков и т. д. При обучении сети предлагаются различные образцы образов с указанием того, к какому классу они относятся. Образец, как правило, представляется как вектор значений признаков. При этом совокупность всех признаков должна однозначно определять класс, к которому относится образец. В случае, если признаков недостаточно, сеть может соотнести один и тот же образец с несколькими классами, что неверно. По окончании обучения сети ей можно предъявлять неизвестные ранее образы и получать ответ о принадлежности к определённому классу.
Топология такой сети характеризуется тем, что количество нейронов в выходном слое, как правило, равно количеству определяемых классов. При этом устанавливается соответствие между выходом нейронной сети и классом, который он представляет. Когда сети предъявляется некий образ, на одном из её выходов должен появиться признак того, что образ принадлежит этому классу. В то же время на других выходах должен быть признак того, что образ данному классу не принадлежит. Если на двух или более выходах есть признак принадлежности к классу, считается что сеть «не уверена» в своём ответе.[9]
8.2. Прогнозирование
Способности нейронной сети к прогнозированию напрямую следуют из ее способности к обобщению и выделению скрытых зависимостей между входными и выходными данными. После обучения сеть способна предсказать будущее значение некой последовательности на основе нескольких предыдущих значений и/или каких-то существующих в настоящий момент факторов. Следует отметить, что прогнозирование возможно только тогда, когда предыдущие изменения действительно в какой-то степени предопределяют будущие. Например, прогнозирование котировок акций на основе котировок за прошлую неделю может оказаться успешным (а может и не оказаться), тогда как прогнозирование результатов завтрашней лотереи на основе данных за последние 50 лет почти наверняка не даст никаких результатов.[9]
8. Решение задач
8.1. Задача связать изображения фигур с их названиями
Дано:
1) растровое черно-белое изображение трех геометрических фигур размером 48x48 пикселов каждая. (Рис. 5)
2) растровое черно-белое изображение названий геометрических фигур размером 30x7 пикселов каждая. (Рис.6)
Надо: связать изображения фигур с их названиями.
Формулировка для нейронной сети:
Дано:
1) входной вектор из 2304 двоичных символов (2304=48x48).
2) выходной вектор из 210 двоичных символов (210=30x7).
Надо: построить нейронную сеть с 2304 входами и 210 выходами. Если на входе нейронной сети изображение фигуры "ромб", то максимальное значение выходного сигнала достигается на выходе с названием "ромб". Аналогично нейронная сеть работает для всех 3 фигур.
Поясню, зачем требуется выбирать выход нейронной сети с максимальным уровнем сигнала. Дело в том, что уровень выходного сигнала, как правило, может принимать любые значения из какого-то отрезка. Однако, в данной задаче нас интересует не аналоговый ответ, а всего лишь номер категории (номер фигуры). Поэтому используется следующий подход - каждой категории сопоставляется свой выход, а ответом нейронной сети считается та категория, на чьем выходе уровень сигнала максимален. В определенном смысле уровень сигнала на выходе с названием "ромб" - это достоверность того, что на вход нейронной сети была подана изображение фигуры "ромб". Задачи, в которых нужно отнести входные данные к одной из известных категорий, называются задачами классификации. Изложенный подход - стандартный способ классификации с помощью нейронных сетей.
Используемые компоненты: ArbitrarySynapse, ImageViewer, FileInspector.
1. Компонент AbitrarySynapse (Рис. 7) обеспечивает произвольное соединение между входами и выходами аксонов[8].
2. Компонент ImageViewer (Рис. 8) предоставляет возможность отображения графических данных.
3. Компонент File Inspector (Рис. 9) используется для подключения к сети файла с данными.
Построение сети:
Задача состоит в том, чтобы связать (провести ассоциации) изображения из трех фигур (48x48) с соответствующими названиями (30x7). Изображения предоставляются пакетом. Этот пример демонстрирует эффективность и простату работы в NeuroSolutions. Ассоциативная память[9] (Рис. 10) одна из древнейших форм искусственных нейронных сетей. Их преимущество заключается в том, что они могут быть легко описаны математически, они легко и быстро обучаться, но они не защищены от шума[10]. [3, с.64] Это основная часть сети, состоящая из двух синапсов.
Для обучения я буду использовать растровые изображения в качестве входных данных. Имеется файл с именем IMG.BMP. Этот файл содержит три изображения геометрических фигур каждый размером (48x48), поэтому на входе аксон должен быть настроен на 48 строк и на 48 столбцов. В итоге входной вектор будет состоять из 2304 двоичных символов. Желаемый результат содержится в растровом файле (IMG2.BMP), он содержит три изображения названий фигур размером (30x7). Таким образом, на выход аксона будет подан вектор, состоящий из 210 двоичных символов. В инспекторе ArbitrarySynapse (Рис.11) есть два столбца пронумерованных переключателей. Они соответствуют входным и выходным векторам (выполняемым элементам аксонов). В вашем случае, слева аксон настроен на 2304 выполняемых элементов, справа 210. У пользователя есть возможность вручную подключать элементы. Процедура очень проста. В ручном режиме (по умолчанию), пользователь просто нажимает на переключатель с помощью мыши, и соответствующие элементы будут выделены цветом. Нажав на кнопку Connect, соединение будет установлено. Кроме того, пользователь может выбрать случайные связи. В поле автоустановки соединений, можно указать число подключений и они будут автоматически сделаны. Это очень удобно для больших сетей.
В качестве входных данных используется формат ASCII. Для того, чтобы его получить встроенная в NeuroSolutions программа переводчик (Рис. 12) считывает данные из формата (.BMP) и переводит в формат ASCII-Column. Это формат двоичных кодов. У этого компонента есть ограничение, он может переводить только Bitmap изображения (8 бит, без альфа-каналов) в ASCII-Column.
Полученная система (Рис. 13) может связать множество больших изображений с множеством более мелких. При запуске системы можно увидеть изображения на входе и названия соответствующих фигур на выходе.
8.2. Задача №2. Распознавание рукописных цифр (0-9).
Дано: растровое черно-белое изображение 10 цифр размером 24x18 пикселов каждая.(Рис. 14)
Надо: определить какая эта цифра (10 цифр ).
Формулировка для нейронной сети:
Дано: входной вектор из 432 двоичных символов (432=24x18).
Надо: построить нейронную сеть с 432 входами и 10 выходами, которые помечены цифрами. Если на входе нейронной сети например изображение цифры "7", то максимальное значение выходного сигнала достигается на выходе с названием цифры "7". Аналогично нейронная сеть работает для всех 10 цифр.
Используемые компоненты: SangersFull, ImageViewer, File Inspector, AbitrarySynapse.
1. Компонент SangersFull (Рис. 15) используется для проведения процедуры самообучения сети. Этот метод используется для обучения сложных сетей.
2. Компонент ImageViewer (Рис.16) предоставляет возможность отображения графических данных.
3. Компонент File Inspector (Рис.17) используется для подключения к сети файла с данными.
4. Компонент AbitrarySynapse (Рис.18) обеспечивает произвольное соединение между входами и выходами аксонов.
Построение сети:
У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений цифр). Предъявляя изображение цифры "7" на вход нейронной сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ - в данном случае нам хотелось бы, чтобы на выходе нейронной сети с меткой "7" уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой нужной цифры, а 0 - на всех остальных выходах. (Рис. 19)
Основные компоненты, используемые при работе нейронной сети представлены на (Рис. 20). Это два аксона соединенных между собой синапсом Sangers, такая модель используется для бесконтрольного обучения нейронной сети. Для того, чтобы обучение не длилось вечно используется компонент LinearScheduler. Он уменьшает размер шага в процессе обучения. На вход нейронной сети буден подан вектор, состоящий из 432 двоичных символов. Программа переводчик переводит оцифрованные значения цифр из формата (*.asc) в графическое представление (*bmp). Сохраняя при этом все значения исходного файла.
Искусственно созданные цифры (образцы реальных рукописных цифр) в количестве 100 экземпляров (каждая цифра, написанная 10 разными почерками) 24x18px загружаются в сеть. Образцы исскуственно зашумляются и по зашумленным образцам сеть тренируется распознавать цифры, которых нет в исходной выборке. Шаг за шагом можно наблюдать, как возрастает вероятность распознавания новых цифр. Т.е. мощность входного сигнала восстанавливается. Таким образом, сеть производит своеобразную реконструкцию зашумленных цифр (Рис.21).