Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
Pascal:
Procedure Forw(InSignals, OutSignals, Parameters: PRealArray);
Procedure Back(InSignals, OutSignals, Parameters, Back.InSignals, Back.OutSignals, Back.Parameters: PRealArray);
C
void Forw(PRealArray InSignals, PRealArray OutSignals, PRealArray Parameters)
void Back(PRealArray InSignals, PRealArray OutSignals, PRealArray Parameters, PRealArray Back.InSignals, PRealArray Back.OutSignals, PRealArray Back.Parameters)
В методе Forw в левой части оператора присваивания могут фигурировать имена любых переменных и элементов предопределенного массива выходных сигналов (OutSignals). В выражении, стоящем в правой части оператора присваивания могут участвовать любые переменные, аргументы элемента и элементы предопределенных массивов входных сигналов (InSignals) и параметров (Parameters).
В методе Back в левой части оператора присваивания могут фигурировать имена любых переменных, элементов предопределенных массивов входных сигналов обратного функционирования (Back.InSignals) и параметров (Back.Parameters). В выражении, стоящем в правой части оператора присваивания, могут участвовать любые переменные, аргументы элемента и элементы предопределенных массивов входных (InSignals) и выходных (OutSignals) сигналов и параметров (Parameters). Отметим важную особенность вычисления поправок к параметрам. Поскольку один и тот же параметр может использоваться несколькими элементами, при вычислении поправки к параметру вычисленное значение нужно не присваивать соответствующему элементу массива Back.Parameters, а добавлять. При этом в теле метода элементы массива Back.Parameters не могут фигурировать в правой части оператора присваивания. Эта особенность вычисления поправок к параметрам обрабатывается компонентом сеть.
Описание элемента завершается ключевым словом End за которым следует имя элемента.
Пример описания элементовNetBibl Elements; {Библиотека элементов}
Element Synaps {Обычный синапс}
InSignals 1 {Один входной сигнал}
OutSignals 1 {Один выходной сигнал}
Parameters 1 {Один параметр – вес связи}
Forw {Начало описания прямого функционирования}
Begin {Выходной сигнал – произведение входного сигнала на параметр}
OutSignals[1] = InSignals[1] * Parameters[1]
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Begin {Поправка к входному сигналу – произведение поправки к выходному сигналу на параметр}
Back.InSignals[1]= Back.OutSignals[1] * Parameters[1];
{Поправка к параметру – сумма ранее вычисленной поправки к параметру на произведение поправки к обратному сигналу на входной сигнал}
Back.Parameters[1]= Back.Parameters[1] + Back.OutSignals[1] * InSignals[1]
End {Конец описания обратного функционирования}
End Synaps {Конец описания синапса}
Element Branch(N : Long) {Точка ветвления на N выходных сигналов}
InSignals 1 {Один входной сигнал}
OutSignals N {N выходных сигналов}
Forw {Начало описания прямого функционирования}
Var Long I; {I – длинное целое – индекс}
Begin
For I=1 To N Do {На каждый из N выходных сигналов передаем}
OutSignals[I] = InSignals[1] {входной сигнал}
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Var {Описание локальных переменных}
Long I; {I – длинное целое – индекс}
Real R; {R – действительное – для накопления суммы}
Begin
R = 0;
For I=1 To N Do {Поправка ко входному сигналу равна сумме}
R = R + Back.OutSignals[I]; {поправок выходных сигналов}
Back.InSignals[1] = R
End {Конец описания обратного функционирования}
End Branch {Конец описания точки ветвления}
Element Sum(N Long) {Простой сумматор на N входов}
InSignals N {N входных сигналов}
OutSignals 1 {Один выходной сигнал}
Forw {Начало описания прямого функционирования}
Var {Описание локальных переменных}
Long I; {I – длинное целое – индекс}
Real R; {R – действительное – для накопления суммы}
Begin
R = 0;
For I=1 To N Do {Выходной сигнал равен сумме входных}
R = R + InSignals[I];
OutSignals[1] = R
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Var Long I; {I – длинное целое – индекс}
Begin
For I=1 To N Do {Поправка к каждому входному сигналу равна}
Back.InSignals[I] = Back.OutSignals[1] {поправке выходного сигнала}
End {Конец описания обратного функционирования}
End Sum {Конец описания простого сумматора}
Element Mul {Умножитель}
InSignals 2 {Два входных сигнала}
OutSignals 1 {Один выходной сигнал}
Forw {Начало описания прямого функционирования}
Begin
OutSignals[1] =InSignals[1] * InSignals[2] {Выходной сигнал равен произведению входных сигналов}
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Begin
{Поправка к каждому входному сигналу равна произведению поправки выходного сигнала на другой входной сигнал}
Back.InSignals[1] = Back.OutSignals[1] * InSignals[2];
Back.InSignals[2] = Back.OutSignals[1] * InSignals[1]
End {Конец описания обратного функционирования}
End Mul {Конец описания умножителя}
Element S_Train {Обучаемый гиперболический сигмоидный элемент}
InSignals 1 {Один входной сигнал}
OutSignals 1 {Один выходной сигнал}
Parameters 1 {Один параметр – характеристика}
Forw {Начало описания прямого функционирования}
Begin
{Выходной сигнал равен отношению входного сигнала к сумме параметра и абсолютной величины входного сигнала}
OutSignals[1] =InSignals[1] / (Parameters[1] +Abs(InSignals[1])
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Var Real R; {R – действительное}
Begin
{R – вспомогательная величина для вычисления поправок, равная отношению поправки выходного сигнала к квадрату суммы параметра и абсолютной величины входного сигнала}
R= Back.OutSignals[1] / Sqr(Parameters[1] +Abs(InSignals[1]);
{Поправка к входному сигналу равна произведению вспомогательной величины на параметр}
Back.InSignals[1] = R *Parameters[1];
{Поправка к параметру равна сумме ранее вычисленной величины поправки и произведения вспомогательной величины на входной сигнал}
Back.Parameters[1] = Back.Parameters[1] + R * InSignals[1]
End {Конец описания обратного функционирования}
End S_Train {Конец описания обучаемого гиперболического сигмоидного элемента}
Element S_NotTrain(Char : Real) {Не обучаемый гиперболический сигмоидный элемент Char – характеристика}
InSignals 1 {Один входной сигнал}
OutSignals 1 {Один выходной сигнал}
Forw {Начало описания прямого функционирования}
Begin
{Выходной сигнал равен отношению входного сигнала к сумме характеристики и абсолютной величины входного сигнала}
OutSignals[1] =InSignals[1] / (Char +Abs(InSignals[1])
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Begin
{Поправка к входному сигналу равна отношению произведения поправки выходного сигнала на характеристику к квадрату суммы характеристики и абсолютной величины входного сигнала}