Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
Contents
In: FullLay(aSum,N,M,Char), {Входной слой}
Net: Circle(aSum,Char,M,K) {Полносвязная сеть}
InSignals N {Число входных сигналов – N}
OutSignals M {Один выходной сигнал на нейрон}
{Число параметров определяется как сумма чисел параметров всех подсетей}
Parameters NumberOf(Parameters, In)+NumberOf(Parameters, Net)
ParamDef DefaultType -1 1
Connections
InSignals[1..N]<=> In.InSignals[1..N] {Входные сигналы – входному слою}
{Выходные сигналы нейронов - с выходного слоя сети}
OutSignals[1..M]<=> Net.OutSignals[1.. M]
{Параметры сети последовательно всем подсетям}
Parameters[1..NumberOf(Parameters, In)] <=> In.Parameters[1..NumberOf(Parameters, In)]
Parameters[NumberOf(Parameters,In)+1..NumberOf(Parameters,In)+NumberOf(Parameters, Net)] <=> Net.Parameters[1..NumberOf(Parameters, Net)]
{Передача сигналов от слоя к слою}
In.OutSignals[1..M] <=> Net.InSignals[1..M] {От входного к циклу}
Net.OutSignals[1..M] <=> Net.InSignals[1..M] {От первого скрытого слоя}
End
{Нейрон сети Хопфилда из N нейронов}
Cascad Hopf(N : Long)
Contents Sum(N),Sign_Easy {Сумматор и пороговый элемент}
InSignals N {Число входных сигналов – N}
OutSignals 1 {Число выходных сигналов – 1}
Parameters NumberOf(Parameters,Sum(N)) {Число параметров – N}
Connections
InSignals[1..N] <=> Sum.InSignals[1..N] {Входы нейрона – входы сумматора}
{Выходной сигнал нейрона – выходной сигнал порогового элемета}
OutSignals <=> Sign_Easy.OutSignals
{Параметры нейрона – парамеры сумматора}
Parameters[1..NumberOf(Parameters, Sum(N))] <=> Sum.Parameters[1..NumberOf(Parameters, Sum(N))]
{Выход сумматора на вход порогового элемента}
Sum.OutSignals <=> Sign_Easy.InSignals
End
{Слой нейронов Хопфилда}
Layer HLay(N : Long)
Contents Hop: Hopf(N)[N] {В состав слоя входит N нейронов}
InSignals N * N {N нейронов по N входных сигналов}
OutSignals N {Один выходной сигнал на нейрон}
Parameters N * NumberOf(Parameters, Hop)
Connections
{NumberOf(InSignals, Hop) сигналов первому нейрону, и т.д.}
InSignals[1..Sqr(N)] <=> Hop[1..N].InSignals[1..N]
{Выходные сигналы нейронов - выходные сигналы сети}
OutSignals[1..N]<=> Hop[1..N].OutSignals
{Параметы слоя – параметры нейронов}
Parameters[1..N *NumberOf(Parameters, Hop)] <=> Hop[1..N].Parameters[1..NumberOf(Parameters, Hop)]
End
{Сеть Хопфилда из N нейронов}
Until Hopfield(N : Long) InSignals=OutSignals
Contents BLay(N,N),HLay(N) {Слой точек ветвления и слой нейронов}
InSignals N {Число входных сигналов – N}
OutSignals N {Число выходных сигналов – N}
Parameters N * NumberOf(Parameters,HLay(N)) {Число параметров – N*N}
Connections
{Входные сигналы – точкам ветвления}
InSignals[1..N]<=> BLay.InSignals[1..N]
{Выходные сигналы нейронов – выходные сигналы сети}
OutSignals[1..N]<=> HLay.OutSignals[1..N]
Parameters[1..N*NumberOf(Parameters, HLay(N))] <=> HLay.Parameters[1..N*NumberOf(Parameters, HLay(N))]
{Выход точек ветвления на вход нейронов}
BLay.OutSignals[1..Sqr(N)] <=> HLay.InSignals[1..Sqr(N)]
{Замыкаем конец на начало}
HLay.OutSignals[1..N] <=> BLay.InSignals[1..N]
End
End NetLib
NetWork HopUsed SubNets; {Сеть Хопфилда на пять нейронов}
MainNet Hopfield(5)
Parameters 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
ParamMask -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1;
End NetWork
Сокращение описания сетиПредложенный в предыдущих разделах язык описания многословен. В большинстве случаев за счет хорошей структуризации сети можно опустить все разделы описания блока кроме раздела состава. В данном разделе описывается генерация по умолчанию разделов описания сигналов и параметров, и описания связей. Использование механизмов умолчания позволяет сильно сократить текст описания сети.
Раздел описания сигналов и параметровДля всех видов блоков число параметров определяется как сумма чисел параметров всех подсетей, перечисленных в разделе описания состава. Это может приводить к лишним записям, но не повлияет на работу сети. Примером лишней записи может служить генерируемая запись:
Parameters M * NumberOf(Parameters,Branch(N))
в описании слоя точек ветвления, поскольку точки ветвления не имеют параметров.
Число входных сигналов блока определяется по следующим правилам:
• для слоя число входных сигналов равно сумме числа входных сигналов всех подсетей, перечисленных в разделе описания состава;
• для каскадов всех видов число входных сигналов блока равно числу входных сигналов подсети, стоящей первой в списке подсетей в разделе описания состава.
Число выходных сигналов блока определяется по следующим правилам:
• для слоя число выходных сигналов равно сумме числа выходных сигналов всех подсетей, перечисленных в разделе описания состава;
• для каскадов всех видов число выходных сигналов блока равно числу выходных сигналов подсети, стоящей последней в списке подсетей в разделе описания состава;
Описания всех сетей, приведенные в предыдущем разделе полностью соответствуют правилам генерации. В качестве более общего примера приведем раздел описания сигналов и параметров двух условных блоков.
Layer A
Contents Net1, Net2[K], Net3
InSignals NumberOf(InSignals,Net1)+K*NumberOf(InSignals,Net2) + NumberOf(InSignals,Net3)
OutSignals NumberOf(OutSignals,Net1)+K*NumberOf(OutSignals,Net2) + NumberOf(OutSignals,Net3)
Parameters NumberOf(Parameters,Net1) + K*NumberOf(Parameters,Net2)+NumberOf(Parameters,Net3)
Cascad B
Contents Net1, Net2[K], Net3
InSignals NumberOf(InSignals,Net1)
OutSignals NumberOf(OutSignals,Net3)
Parameters NumberOf(Parameters,Net1) + K*NumberOf(Parameters,Net2)+NumberOf(Parameters,Net3)
Раздел описания связейРаздел описания связей может быть разбит на пять подразделов.
1. Установление связи входных сигналов блока с входными сигналами подсетей.
2. Установление связи выходных сигналов блока с выходными сигналами подсетей.
3. Установление связи параметров блока с параметрами подсетей.
4. Установление связи между выходными сигналами одних подсетей и входными сигналами других подсетей.
5. Замыкание выхода блока на вход блока.
Для слоя раздел описания связей строится по следующим правилам.
1. Все подсети получают входные сигналы в порядке перечисления подсетей в разделе описания состава — первая часть массива входных сигналов слоя отдается первой подсети, следующая — второй и т. д. Если какая-либо подсеть в разделе описания состава указана с некоторым не равным единице числом экземпляров, то считается, что экземпляры этой подсети перечислены в списке в порядке возрастания номера.
2. Выходные сигналы подсетей образуют массив выходных сигналов слоя также в порядке перечисления подсетей в разделе описания состава — первая часть массива выходных сигналов слоя состоит из выходных сигналов первой подсети, следующая — второй и т. д. Если какая-либо подсеть в разделе описания состава указана с некоторым не равным единице числом экземпляров, то считается, что экземпляры этой подсети перечислены в списке в порядке возрастания номера.
3. Подразделы установления связи между выходными сигналами одних подсетей и входными сигналами других подсетей и замыкания выхода блока на вход для слоя отсутствуют.