Искусственная нейронная сеть

2



Министерство образования и науки Украины

















ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

на тему "Искусственная нейронная сеть"

по курсу "Объектно-ориентированное программирование"

































2005


Содержание



Введение

1 Постановка задачи

2 Описание проектного решения

2.1 Объектно-ориентированный анализ

2.1.1 Описание предметной области

2.1.2 Информационная модель системы

2.1.3 Модель состояний

2.1.4 Модель процессов

2.2 Объектно-ориентированное проектирование

2.3 Реализация критериев качества

3 Программная реализация 

4 Руководство пользователя

Заключение

Перечень ссылок

Приложение


Введение



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

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

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

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


1 ПОСТАНОВКА ЗАДАЧИ



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







f(A)

x1 w1

A	y

x2 w2

xn wn

Рисунок 1.1 – Формальная модель нейрона



Нейрон имеет n входов . Каждый вход представляет собой числовое значение из некоторого диапазона. Для каждого входа диапазон может отличаться. В нейроне значение входа умножается на коэффициент – вес входа-w. ,. Результаты перемножения складываются: . От результата вычисляется некоторая функция: y=f(A). Существует несколько разновидностей функций: линейная, нелинейная, скачкообразная.

Слой нейронов состоит из нескольких однотипных нейронов. Однотипные нейроны вычисляют одинаковые функции. 

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

В данной курсовой работе, используя объектно-ориентированный подход, была разработана искусственная полносвязанная многослойная нейронная сеть. Функцией активации нейронов этой сети является сигмоид, сдвинутый по оси ординат на -0.5. В качестве примера ее использования, реализуется распознавание рисунков печатных букв с помощью этой сети. Для того, чтобы сеть могла распознавать эти буквы, ее необходимо обучить. В данной курсовой работе реализуется алгоритм обучения нейронной сети «С учителем» - метод обратного распространения ошибки. Он заключается в следующем: для каждой обучающей пары вычисляется ошибка на выходе, затем, учитывая эту ошибку, корректируют веса нейронов выходного слоя. Далее вычисляют ошибку для нейроннов слоя, следующего перед выходным, и корректирую веса его нейроннов. И так далее вплоть до входного слоя.

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

Программа, разработанная при выполнении данного курсового проекта, запускается в операционной системе Windows 95/98/2000. Для ее выполнения необходима динамическая библиотека mfc42.dll, которая поставляется вместе с программой.


2 ОПИСАНИЕ ПРОЕКТНОГО РЕШЕНИЯ



2.1 Объектно-ориентированный анализ



Задача состоит в создании системы распознавания рисунков печатных букв. Данная система реализует это действие, используя для распознавания искусственную нейронную. Нейронная сеть представляет собой один или несколько последовательно связанных между собой слоев нейроннов. Выход каждого предыдущего слоя является входом следующего. Вход первого слоя – это вход сети, а выход последнего – это выход сети. Нейрон представляет собой сумматор, выход которого поступает на вход функционального преобразователя. Выход с функционального преобразователя – выход нейрона. Входы сумматора – входы нейрона. Каждый вход умножается на свой вес. Функция в функциональном преобразователе называется активационной. В данной системе в качестве активационной функции используется сигмоид, сдвинутый по оси ординат на -1/2. 

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

На вход нейронной сети поступает вектор, который выдает элемент, в котором вводится рисунок буквы. Этот вектор состоит из четырехсот элементов. Пустой клетке соответствует элемент -0.5, а закрашенной клетке – элемент 0.5. Сеть просчитывается, и анализируется выходной вектор нейронной сети. Номеру максимального элемента соответствует номер распознанной буквы. Это позволяет правильно распознать букву, даже когда она поступает на вход с помехами. 

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



2.1.1 Описание предметной области

Основа проектирования – определение ключевых абстракций, характеризующих словарь предметной области и механизмов управления ими.

Сформируем список ключевых абстракций:

Буквы должны как-то вводиться.

Элемент для ввода.

Выходной вектор.

Буквы должны распознаваться искусственной нейронной сетью.

Нейронная сеть.

Входной слой нейронов.

Скрытые слои нейронов.

Выходной слой нейронов.

Число скрытых слоев нейронов.

Нейронная сеть состоит из слоев нейронов.

Слой нейроннов.

Число нейроннов в слое.

Нейронны.

Слой нейронов состоит из нейронов.

Нейрон.

Входы нейрона.

Число входов.

Веса входов.

Выход.

Таким образом список абстракций включает четыре класса. Из них три: нейронная сеть, слой нейронов и нейрон предназначены для построения нейронной сети, т. е. нейронная сеть состоит из слоев нейронов, а слой нейронов состоит из нейронов. Четвертая абстракция – элемент для ввода, предназначена для ввода рисунков букв.



2.1.2 Информационная модель системы

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

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



1. Элемент ввода (Э)

- выходной вектор

- х-координата

- у-координата

- видимость

- контекст устройства









Рисунок 2.1.2.1 – Графическое представление объекта Элемент ввода



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

Данный объект имеет следующие атрибуты:

-  Выходной вектор – вектор, содержащий численное значение для каждой клетки элемента ввода. Если клетка закрашена, то элемент вектора равен 1, в противном случае элемент вектора равен 0.

- Х-координата – х-координата левого верхнего угла элемента в окне программы.

- У-координата – у-координата левого верхнего угла элемента в окне программы.

- Видимость – определяет, выводится ли на экран элемент.

- Контекст устройства – указывает на контекст устройства, в котором выводится объект.

Объект Нейрон является реальным объектом. Является элементарным объектом нейронной сети.

Графическое представление этого объекта представлено на рисунке 2.1.2.2.





2. Нейрон (Н)



- выход

- входы

- веса входов

- число входов









Рисунок 2.1.2.2 – Графическое представление объекта Нейрон



Объект нейрон имеет следующие описательные атрибуты:

- Выход – значение выхода нейрона (аксон).

- Входы – вектор входных сигналов нейрона.

- Веса входов – вектор весов входов нейрона

- Число входов – число, определяющее количество входов нейрона.

Объект Слой нейронов включает в свой состав массив нейронов и является составной частью нейронной сети. Его графическое представление на рисунке 2.1.2.3.



3. Слой нейронов (СН)



- имя слоя

- число нейронов







Рисунок 2.1.2.3 – Графическое представление объекта Слой нейронов

Его атрибут - число нейронов определяет количество нейронов в слое. 

Объект Нейронная сеть создан для распознавания рисунков букв. Он представляет собой набор слоев нейронов: входной слой, скрытые слои и выходной слой. Его графическое представление на рисунке 2.1.2.4.



4. Нейронная сеть (НС)



- имя сети

- число скрытых слоев







Рисунок 2.1.2.4 – Графическое представление объекта Нейронная сеть



Атрибут этого объекта - число скрытых слоев определяет количество скрытых слоев в нейронной сети.

Опишем связи между объектами в системе.

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

Каждая нейронная сеть включает в себя несколько слоев нейронов и каждый слой нейронов входит только в одну нейронную сеть. В объект Слой нейронов был добавлен дополнительный атрибут Имя сети.

Объект элемент ввода не связан с остальными объектами. Нейронная сеть просто использует его выходной вектор в качестве своих входных сигналов.

Руководствуясь приведенными выше объектами и связями, мы можем нарисовать диаграмму информационной структуры системы.



2.1.3 Модель состояний

Изобразим диаграммы жизненных циклов объектов.

Диаграмма жизненного цикла Элемента ввода изображена на рисунке 2.1.3.1.






Пустое поле

Рисунок буквы

ввод буквы









сброс



Рисунок 2.1.3.1 – Диаграмма жизненного цикла Элемента ввода



Диаграмма жизненного цикла Нейрона изображена на рисунке 2.1.3.2.





Нулевое состояние

Имеются значения входов

имеется значение аксона







подача входного

вектора















Рисунок 2.1.3.2 – Диаграмма жизненного цикла нейрона


2.1.4 Модель процессов



На рисунке 2.1.4.1 представлена диаграмма потоков данных в данной системе.





изменение выходного 

вектора

изменение входов сети

Обучающее множество

Изменение весов сети

изменение выхода сети          

       ввод рисунка буквы





                                                            обучение

                           подача вектора                    сети

                            на вход сети

    

вывод рисунка на экран



                                              просчет сети





Рисунок 2.1.4.1 – Диаграмма потоков данных системы



2.2 Объектно-ориентированное проектирование



На рисунке 2.2.1 представлены различные типы моделей, которые необходимы для объектно-ориентированного проектирования. Совокупность этих моделей описывает все необходимые решения. Модели являются полными, т. е. обеспечивают разработку проекта на каком-либо объектно-ориентированном языке.

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

Для описания моделей используются 6 видов диаграмм. Логическая структура описывается диаграммой классов и диаграммой объектов. Физическая – диаграммой модулей и диаграммой процессов. Статический аспект модели определяет диаграмму переходов состояний, динамический аспект – временная диаграмма.

В ОО-анализе системы были выделены 4 абстракции системы, и связи между ними. Эти абстракции представляют из себя Элемент ввода, Нейрон, Слой нейронов и Нейронную сеть. Здесь мы на основании этих абстракций построим классы и объекты и их структуры.

Диаграмма классов определяет существующие классы и их связь в логическом проекте системы. Диаграмма классов данной системы представлена на рисунке 2.2.2.





CNNetworkP

CLImage









CLayer

CNeuronP



                     использует                1

                      атрибут                     m







                                                  1

                                               n

Рисунок 2.2.2 – Диаграмма классов системы



На этой диаграмме класс CLImage представляет собой абстракцию Элемент ввода. Класс CNNetworkP (нейронная сеть) использует его атрибут Выходной вектор. Каждый экземпляр класса CNNetworkP использует m экземпляров класса CLayer (слой нейронов). Каждый экземпляр класса CLayer использует n экземпляров класса CNeuronP (нейрон).

Диаграмма объектов показывает существующие объекты и их взаимосвязи. Она используется для того, чтобы показать динамическую семантику проекта. Каждый объект диаграммы объектов представляет собой экземпляр некоторого класса; операции на диаграмме объектов соответствуют операциям класса. На рисунке 2.2.3 представлена часть диаграммы структуры объектов системы.





F

Распознаватель

     запрос выходного

           вектора



Ввод



Рисунок 2.2.3 – Часть диаграммы структуры объектов системы



Здесь F – это поле Выходной вектор объекта Ввод (экземпляр класса CLImage). Объект Распознаватель (экземпляр класса CNNetworkP) посылает сообщение объекту Ввод на запрос выходного вектора.

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



Исходное состояние

Обученная сеть

сеть с входным вектором

сеть с выходным вектором

Рисунок 2.2.4 – Диаграмма переходов для нейронной сети



Система разбита на модули следующим образом: объявление классов для нейрона, слоя нейронов и нейронной сети помещены в отдельный заголовочный файл. Их реализация находится в файле типа *.срр. Для всех остальных классов: объявление каждого класса помещено в отдельный заголовочный файл, а реализация в отдельный файл типа *.срр. Если в каком либо классе создается экземпляр другого класса, то соответствующий заголовочный файл помещается включается в соответствующий файл *.срр.



2.3 Реализация критериев качества



Данная программная система реализует распознавание рисунков печатных букв используя искусственную многослойную нейронную сеть. Программа построена с помощью объектно-ориентированного подхода. Это полностью удовлетворяет поставленному заданию, где требовалось реалиовать модель однослойного персептона. В целях более качественного построения проекта, была реализована многослойная нейронная сеть, способная обучаться по методу обратного распространения ошибки. Для демонстрации ее работы была выбрана одна из областей применения искусственных нейронных сетей – распознавание образов (в данной системе – распознавание печатных букв). Нейронная сеть может быть обучена различным шрифтам, а затем загружать свои веса, в зависимости от того, букву какого шрифта требуется распознать. Поэтому система полностью соответствует заданию и выбранным ограничениям.

Программная модель нейронной сети была разработана на основе объектно-ориентированного подхода. Для реализации нейронной сети были созданы следущие классы: CNNetworkP, ClayerP и CNeuronP, описывающие абстракции Нейронная сеть, Слой нейронов и Нейрон соответственно. Кроме того, для обеспечения расширяемости системы были созданы абстрактные классы CNeuron и CNNetwork, от которых и были унаследованы классы нейрона и нейронной сети соответственно. Эти абстрактные классы представляют собой чистые интерфейсы нейрона и нейронной сети. Экземпляр класса нейронной сети использует определенное число экземпляров класса слоя нейронов. Один из этих экземпляров представляет собой входной слой сети, другой – выходной слой сети, а остальные – скрытые слои сети. Каждый экземпляр класса слоя нейронов использует набор экземпляров класса нейрон. Использование объектного подхода в данной системе существенно упростил ее разработку и модификацию. Снизил время, затраченное на ее разработку, и уменьшил размер исходного кода по сравнению с тем, который был бы, если бы был применен структурный подход. Кроме того, такой подход позволил скрыть некоторые поля классов от нежелательного доступа, который мог бы привести к краху системы или другим нежелательным последствия. Если бы эта система была написана с использованием структурного подхода, то она была бы трудна для понимания и модификации, работала бы медленней. Взаимодействие ее модулей трудней было бы реализовать.

Программа написана на объектно-ориентированном языке программирования С++. Он позволяет писать программный код используя различные стили программирования. Все переменные и константы в данной программе имеют интуитивно понятные имена, которые описывают что это за переменная или константа. Имена классов были определены с использованием венгерской нотации (имя каждой переменной начинается с буквы, определяющей ее тип), что упрощает написание программы. В программе используются отступы от левого края, когда одна или несколько конструкций входят в другую конструкцию. Это упрощает понимание структуры программы. Каждый член классов снабжен комментарием, описывающим, что представляет собой этот член. В среде программирования Visual С++ версии 6.0 и выше эти комментарии появляются в качестве tooltip’а при вызове данного члена.

Программа работает в диалоговом режиме с пользователем. Ее главное окно – это диалоговое окно, содержащее набор кнопок, поле ввода рисунка буквы и поля редактирования, куда выводится распознанная буква. Кнопки имеют интуитивно понятные названия, говорящие об их назначении и снабжены поясняющими значками. Описание действия по нажатию каждой кнопки можно прочитать в файле справки, который вызывается по нажатии кнопки «Справка». Поле ввода рисунка буквы представляет собой поле размером 20х20 клеток. Ввод в это поле, аналогичен вводу в графическом редакторе при увеличенном масштабе. Щелчок мыши по белой клетке изменяет ее цвет на черный; щелчок по черной изменяет ее цвет на белый. Такое сходство позволяет быстро освоиться с вводом рисунков букв. Таким образом дизайн программы полностью удовлетворяет ее функциональному назначению.

Из вышеизложенного видно, что все критерии качества в программе учтены.


3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ



Для написания программы был выбран язык программирования С++. Он является полностью объектно-ориентированным, мощным языком программирования, поддерживающим практически все виды абстракций объектно-ориентированного программирования. Была использована среда программирования Visual C++ 6.0. Эта среда является визуальной средой программирования, позволяющей перетаскивать стандартные компоненты непосредственно в окно будущей программы. Она позволяет автоматизировано создавать различные проекты с использованием «мастеров».

Структурно программа представляет собой набор классов, часть из которых была создана разработчиком, а часть – самой средой программирования. Классы созданные средой программирования унаследованы от классов библиотеки MFC. Экземпляры одних классов создаются другими классами, и там происходит работа с ними. Среда программирования сама генерирует код главной функции и программисту он не доступен. Программист может работать только либо со своими классами, либо с классами, описывающими интерфейс программы и ее свойства. Также в исходниках программы присутствуют ресурсы, которые представляют из себя внешния объекты, подключаемые к программе во время связывания. Этими ресурсами являются диалоговые окна, картинки, иконки и специальные таблицы, определяющие системные и интерфейсные свойства программы.

Ниже представлено описание классов, созданных разработчиком.

Класс CNeuronP. Этот класс определяет нейрон, который является базовым элементом нейронной сети. Его объявление:

class CNeuronP: public CNeuron

 {

 protected:

float axon;          //выход

std::vector<float> inputs;  //входы

std::vector<float> synapses; //веса входов

int rang;           //число входов

public:

CNeuronP(int rng=2,float por=2.0);

virtual void AddInput(void);    //добавляет синапс

virtual float GetAxon(void);    //возвращает выход нейрона

virtual void func(void);        //просчет нейрона

int SetInput(float inp,int number); //устанавливает входы

int SetSynaps(float sip, int num); //устанавливает веса

float GetInput(int number);     //возвращает вход

float GetSynaps(int number);    //возвращает вес входа

int GetRang(void);         //возвращает число синапсов

float GetPro(void); //возвращает производную от активационной функции

 };

Как видно из этого объявления все поля-члены данного класса являются закрытыми, а все функции-члены – открытыми. Этот принцип реализован и в остальных классах, созданных разработчиком. Это сделано для обеспечения гибкости работы с экземплярами классов, без доступа к их внутренней структуре. Действия, выполняемые функциями-членами и назначение полей-членов описаны в комментариях к ним.

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

Класс CLayerP. Он представляет собой набор нейронов, входящих в один слой нейронной сети. Его объявление:

class CLayerP

{

protected:

std::vector<CNeuronP> neurons; //нейроны слоя

int number;           //число нейронов в слое

public:

CLayerP(int num=2);

virtual void AddNeuron(CNeuronP neur); //добавляет нейрон в слой

virtual int SetNeuron(CNeuronP neur, int num);

int GetNumber(void); //возвращает число нейронов в слое

CNeuronP& GetNeuron(int num); //возвращает нейрон по его номеру

 };

Некоторые функции-члены класса сделаны виртуальными для обеспечения полиморфизма в случае расширения системы.

Класс CNNetworkP. Этот класс описывает многослойную нейронную сеть, применяемую в программе для распознавания букв. Его объявление:

class CNNetworkP:public CNNetwork

{

protected:

CLayerP FirstLayer;      //первый слой

CLayerP LastLayer;      //последний слой

std::vector<CLayerP> layers; //скрытые слои

int m_number;         //число скрытых слоев

public:

CNNetworkP(int num1=2/*число нейронов во входном слое*/,

int num2=2/*число нейронов в выходном слое*/,

int num3=2,/*число нейронов в скрытом слое*/

int number=1/*число скрытых слоев*/);

virtual void Solve(void); //просчет сети

void SetInputs(std::vector<float> inp); //устанавливает входы

void SetNumFSynaps(int num); //устанавливает число синапсов в каждом нейроне первого слоя

int NumHLayers(void);    //число скрытых слоев

virtual float GetOut(int number);  //возвращает выход

virtual void Learn(int number,  CString filename, int num);//обучает сеть конкретной паре

void before(void);      //начальная инициализация весов

void SaveToFile(CString filename);//запись обученных весов в файл

void LoadFromFile(CString filename);//загрузка обученных весов из файла

void SaveOuts(CString filename); //сохранить выходы в файл 

 };

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

Функция-член Solve осуществляет просчет сети. При этом сначала просчитываются все нейроны входного слоя, затем их выходы используются в качестве входов нейронов первого скрытого слоя, для их просчета и так далее вплоть до выходного слоя сети. Выход выходного слоя используется в качестве выхода сети.

Функция-член before осуществляет начальную инициализацию весов, проводимую перед обучением сети. Она с помощью генератора произвольных чисел присваивает всем весам сети значения в пределах от -0.5 до 0.5.

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

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


4 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ



Программа вместе со своими исходниками поставляется на дискете. Для установки программы необходимо переписать ее исполняемый файл nNetwork.exe в отдельную папку. Туда же необходимо переписать файлы nNetwork.cnt и nNetwork.hlp, которые обеспечивают программе работу со справкой. Также на дискете находится RAR-архив mfc42.rar. Файл находящийся в нем необходимо распаковать в папку windows\system32, для обеспечения работы с программой.

Для запуска программы необходимо щелкнуть по ее иконке. Откроется главное диалоговое окно программы, содержащее набор кнопок для управления программой, поле ввода букв размером 20х20 клеток и поле редактирования, куда будет выводиться распознанная буква. Вместе с программой поставляется файл a.txt, содержащий двоичное представление рисунков букв. Этот файл сделан в качестве примера шрифта для распознавания программой. Веса нейронной сети, обученной на распознавание букв из этого файла, находятся в файле final.txt. Для загрузки этих весов необходимо щелкнуть по кнопке «загрузка» в главном окне программы и в появившемся диалоговом окне ввести путь к этому файлу и щелкнуть по кнопке ОК. Работа с программой подробно описана в справочной системе, которая вызывается щелчком по кнопке «Помощь». Там же приведено краткое описание нейронной сети, используемой в этой программе.


ЗАКЛЮЧЕНИЕ



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

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


ПЕРЕЧЕНЬ ССЫЛОК



Г. Буч «Объектно-ориентированный анализ и проектирование с примерами приложений на С++» // Буч Г. - СПб: «Невский Диалект», 1998 г. – 632с.

Б. Страуструп «Язык программирования С++, 3-е издание» // Страуструп Б. – М.: «Невский Диалект» - «Издательство БИНОМ», 1999 г. – 991 с.

Г. Кейт «Использование Visual C++ 6. Специальное издание.» // Кейт Г. – К.: Издательский дом «Вильямс», 1999 г. – 864 с.

Доронина Ю. В. «Конспект лекций по ООП»