Смекни!
smekni.com

Искусственная нейронная сеть (стр. 2 из 3)


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

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

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

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

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

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

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


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

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

Объект Нейронная сеть создан для распознавания рисунков букв. Он представляет собой набор слоев нейронов: входной слой, скрытые слои и выходной слой. Его графическое представление на рисунке 2.1.2.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.


использует 1

атрибут m

1

n

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

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

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


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

вектора


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

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

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

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

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

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

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

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

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