Программная поддержка ИНС
Соответствующе классы находятся в пространстве имен NeuroClasses, схематично показанном на диаграмме классов (Рис.2.1).
Рис.2.1. Диаграмма классов пространства имен NeuroClasses
Первичным классов в этом пространстве является класс Neuron, реализующий один нейрон ИНС. Этот класс реализует стандартный интерфейс ICloneable, обеспечивая создание независимых копий нейрона. Это важно, поскольку ссылочная природа переменных в C# может создать в нашем случае нежелательные побочные эффекты модификации объектов нейросети со стороны внешних клиентов.
Для достижения лучших показателей производительности используется прием «ленивой» инициализации значения выходного импульса нейрона - соответствующее свойство Axon только получает доступ к закрытой переменной output, изменение которой осуществляется методом срабатывания нейрона Run.
Наличие трех разных конструкторов позволяет довольно удобно создавать нейроны в различных клиентских ситуациях.
Класс Layer является реализацией слоя в многослойной ИНС. Этот класс универсально реализует входной, скрытые и выходной слой ИНС. Основной метод Run, получая вектор водных импульсов, переадресует вычисление вектора выхода массиву нейронов. Класс Layer реализует интерфейс ICloneable по тем же причинам, что и класс Neuron.
Класс NeuroNet содержит в своем составе массив слоев и основной метод Run, который организует последовательность вызовов методов Run для слоев, постепенно преобразуя входной вектор сети в выходной.
Хотя в данной работе не стояла задача обучения ИНС специфическими нейросетевыми алгоритмами (например, обратное распространение ошибки), те менее базовые функции обучения все же необходимы. Они реализованы Следующими классами.
Класс TrainPair представляет один элемент обучающего множество и хранит пару векторов: вектор входа и вектор желаемого выхода.
Класс TrainSet представляет все обучающее множество, которое хранится как список объектов TrainPair. В классе определен метод добавления Add и индексатор.
Класс Trainer содержит нейрону сеть и обучающее множество и метод NetError, который позволяет вычислить «ошибку» сети - упоминаемый ранее функционал ошибки сети на данном обучающем множестве.