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
L = L And (InSignals[I] = OutSignals[I]);
Equal = L
Раздел описания состава следует сразу после заголовка блока за разделом описания сигналов и параметров и начинается с ключевого слова 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)
{В состав каскада входит произвольный сумматор на N входов и сигмоидный нейрон с необучаемой характеристикой}
Contents aSum(N), S_NotTrain(Char)
{Число входных сигналов определяет сумматор}
InSignals NumberOf(InSignals, aSum(N))
OutSignals 1 {Один выходной сигнал}
{Число параметров определяет сумматор}
Parameters NumberOf(Parameters, aSum(N))
Connections
{Входные сигналы нейрона – входные сигналы сумматора}
InSignals[1.. NumberOf(InSignals, aSum(N))] <=>
aSum.InSignals[1.. NumberOf(InSignals, aSum(N))]
{Выход сумматора – вход преобразователя}
aSum.OutSignals <=> S_NotTrain.InSignals
OutSignals <=> S_NotTrain.OutSignals
{Параметры нейрона – параметры сумматора}
Parameters[1.. NumberOf(Parameters, aSum(N))] <=>
aSum.Parameters[1.. NumberOf(Parameters, aSum(N))]
End {Конец описания сигмоидного нейрона с произвольным сумматором}
{Слой сигмоидных нейронов с произвольными сумматорами на N входов}
Layer Lay1(aSum : Block; N,M : Long; Char : Real)
Contents Sigm: NSigm(aSum,N,Char)[M] {В состав слоя входит M нейронов}
{Число входных сигналов определяется как взятое M раз число входных сигналов нейронов. Вместо имени нейрона используем псевдоним}
InSignals M * NumberOf(InSignals, Sigm)
OutSignals M {Один выходной сигнал на нейрон}
Parameters M * NumberOf(Parameters, Sigm)
{Число параметров определяется как взятое M раз число параметров нейронов}
{Первые NumberOf(InSignals, NSigm(aSum,N,Char)) сигналов первому нейрону, и т.д.}
InSignals[1..M * NumberOf(InSignals, Sigm)] <=>
Sigm[1..M].InSignals[1.. NumberOf(InSignals, Sigm)]
{Выходные сигналы нейронов - выходные сигналы сети}
OutSignals[1..M] <=> Sigm[1..M].OutSignals
{Параметры слоя – параметры нейронов}
Parameters[1..M * NumberOf(Parameters, Sigm)] <=>
Sigm[1..M].Parameters[1.. NumberOf(Parameters, Sigm)]
End {Конец описания слоя сигмоидных нейронов с произвольным сумматором}
{Слой точек ветвления}
Layer BLay( N,M : Long)
Contents Branch(N)[M] {В состав слоя входит M точек ветвления}
InSignals M {По одному входному сигналу на точку ветвления}
OutSignals M * N {N выходных сигналов у каждой точки ветвления}
{По одному входу на точку ветвления}
InSignals[1..M] <=> Branch[1..M].InSignals
{Выходные сигналы в порядке первый с каждой точки ветвления, затем второй и т.д. }
OutSignals[1..N * M] <=> Branch[+:1..M].OutSignals[1..N]
End {Конец описания слоя Точек ветвления}
{Полный слой сигмоидных нейронов с произвольными сумматорами на N входов}
Cascad FullLay(aSum : Block; N,M : Long; Char : Real)
{Слой точек ветвления и слой нейронов}
Contents Br: BLay1(M,N), Ne: Lay1(aSum,N,M,Char)
InSignals N {Число входных сигналов – число точек ветвления}
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76