Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
Long I, J, K; {I,J,K – переменные типа длинное целое }
Real R; {R – действительное}
Vector W; {Массив для накопления промежуточных величин}
Begin
For I = 1 To N Do W[I] = 0;
K = 1; {K – номер обрабатываемого параметра}
For I = 1 To N Do
For J = I To N Do Begin
{Поправка к параметру равна сумме ранее вычисленной поправки и произведения поправки к входному сигналу на произведение сигналов, прошедших через этот параметр при прямом функционировании}
Back.Parameters[K] = Back.Parameters[K] + Back.OutSignals[1] * InSignals[I] *InSignals[J];
R = Back.OutSignals[1] * Parameters[K];
W[I] = W[I] + R * InSignals[J];
W[J] = W[J] + R * InSignals[I];
K = K + 1
End;
For I = 1 To N Do
{Поправка к входному сигналу равна произведению поправки к выходному сигналу на сумму всех параметров, через которые этот сигнал проходил при прямом функционировании, умноженных на другие входные сигналы, так же прошедшие через эти параметры при прямом функционировании}
Back.InSignals[1] = W[I]
End {Конец описания прямого функционирования}
End Square_Sum {Конец описания квадратичного сумматора}
Element Square_Sum_Plus(N: Long) {Неоднородный квадратичный сумматор на N входов}
InSignals N {N входных сигналов}
OutSignals 1 {Один выходной сигнал}
Parameters (Sqr(N) + 3 * N) Div 2 + 1 {N(N+3)/2+1 весов связей}
Forw {Начало описания прямого функционирования}
Var {Описание локальных переменных}
Long I, J, K; {I,J,K – переменные типа длинное целое }
Real R; {R – действительное – для накопления суммы}
Begin
K = 2 * N+1; {K – номер обрабатываемого параметра}
R = Parameters[Sqr(N) + 3 * N) Div 2 + 1];
For I = 1 To N Do Begin
R = R + InSignals[I] * Parameters[I] + Sqr(InSignals[I]) * Parameters[N + I];
For J = I + 1 To N Do Begin
R = R + InSignals[I] * InSignals[J] * Parameters[K];
K = K + 1
End
End
{Выходной сигнал равен сумме всех попарных произведений входных сигналов, умноженных на соответствующие параметры, плюс сумме всех входных сигналов умноженных на соответствующие параметры, плюс последний параметр}
OutSignals[1] = R
End {Конец описания прямого функционирования}
Back {Начало описания обратного функционирования}
Var {Описание локальных переменных}
Long I, J, K; {I,J,K – переменные типа длинное целое}
Real R; {R – действительное – для накопления суммы}
Vector W; {Массив для накопления промежуточных величин}
Begin
For I = 1 To N Do W[I] = 0;
K = 2 * N + 1; {K – номер обрабатываемого параметра}
For I = 1 To N Do Begin
Back.Parameters[I] = Back.Parameters[I] + Back.OutSignals[1] * InSignals[I];
Back.Parameters[N + I] = Back.Parameters[N + I] + Back.OutSignals[1] * Sqr(InSignals[I]);
W[I] = W[I] + Back.OutSignals[1] * (Parameters[I] + 2 * Parameters[N + I] * InSignals[I])
For J = I + 1 To N Do Begin
Back.Parameters[K] = Back.Parameters[K] + Back.OutSignals[1] * InSignals[I] *InSignals[J];
R = Back.OutSignals[1] * Parameters[K];
W[I] = W[I] + R * InSignals[J];
W[J] = W[J] + R * InSignals[I];
K = K + 1
End
End;
For I = 1 To N Do Back.InSignals[1] = W[I]
End {Конец описания обратного функционирования}
End Square_Sum_Plus {Конец описания адаптивного квадратичного сумматора}
End NetBibl
Описание блоковОписание блока состоит из пяти основных разделов: заголовка описания блока, описания сигналов и параметров, описания состава, описания связей и конца описания блока. Существует два типа блоков — каскад и слой (Layer). Различие между этими двумя типами блоков состоит в том, что подсети, входящие в состав слоя, функционируют параллельно и независимо друг от друга, тогда как составляющие каскад подсети функционируют последовательно, причем каждая следующая подсеть использует результаты работы предыдущих подсетей. В свою очередь существует три вида каскадов — простой каскад (Cascad), цикл с фиксированным числом шагов (Loop) цикл по условию (Until). Различие между тремя видами каскадов очевидно — простой каскад функционирует один раз, цикл Loop функционирует указанное в описании число раз, а цикл Until функционирует до тех пор, пока не выполнится указанное в описании условие. В условии, указываемом в заголовке цикла Until, возможно использование сравнений массивов или интервалов массивов сигналов. Например, запись
InSignals=OutSignals
эквивалентна следующей записи
InSignals[1..N]=OutSignals[1..N]
которая эквивалентна вычислению следующей логической функции:
Function Equal(InSignals, OutSignals: RealArray): Logic;
Var
Long I;
Logic L
Begin
L = True
For i = 1 To n Do L = L And (InSignals[I] = OutSignals[I]);
Equal = L
End
Раздел описания состава следует сразу после заголовка блока за разделом описания сигналов и параметров и начинается с ключевого слова Contents, за которым следуют имена подсетей (блоков или элементов) со списками фактических аргументов, разделенные запятыми. Все имена подсетей должны предваряться псевдонимами. В дальнейшем указание псевдонима полностью эквивалентно указанию имени подсети со списком фактических аргументов или без, в зависимости от контекста. Признаком конца раздела описания состава подсети служит имя подсети за списком фактических аргументов которого не следует запятая.
Раздел описания сигналов и параметров следует за разделом описания состава и состоит из указания числа входных и выходных сигналов и числа параметров блока. В константных выражениях, указывающих число входных и выходных сигналов и параметров можно использовать дополнительно функцию NumberOf с двумя параметрами. Первым параметром является одно из ключевых слов InSignals, OutSignals, Parameters, а вторым — имя подсети со списком фактических аргументов. Функция NumberOf возвращает число входных или выходных сигналов или параметров (в зависимости от первого аргумента) в подсети, указанной во втором аргументе. Использование этой функции необходимо в случае использования блоком аргументов-подсетей. Концом раздела описания сигналов и параметров служит одно из ключевых слов ParamDef, Static или Connections.
Раздел определения типов параметров является необязательным разделом в описании блока и начинается с ключевого слова ParamDef. В каждой строке этого раздела можно задать минимальную и максимальную границы изменения одного типа параметров. Если в описании сети встречаются параметры неопределенного типа, то этот тип считается совпадающим с типом DefaultType. Описание типа не обязано предшествовать описанию параметров этого типа. Так, например, определение типа параметров может находиться в описании главной сети. Концом этого раздела служит одно из ключевых слов Connections.
Раздел описания связей следует за разделом описания сигналов и параметров и начинается с ключевого слова Connections. В разделе «Описание распределения сигналов» детально описано распределение связей.
Раздел конца описания блока состоит из ключевого слова End, за которым следует имя блока.
Пример описания блоковПри описании блоков используются элементы, описанные в библиотеке Elements, приведенной в разделе «Пример описания элементов».
NetBibl SubNets Used Elements;
{Библиотека подсетей, использующая библиотеку Elements}
{Сигмоидный нейрон с произвольным сумматором на N входов}
Cascad NSigm(aSum : Block; N : Long; Char : Real)