Программа 3-НЕЙРОН
ОГЛАВЛЕНИЕ
1. Общее
2. Матрица нейронов
3. Структура программы 3-НЕЙРОН
4. Входной сигнал
5. Суперцикл
6. Основной цикл
7. Формирование матрицы s4[1..gg,1..n]
8. Результат
9. Трактовка результата
10. Вывод
11. Скачать программу 3-НЕЙРОН
Приложение
программа 3-НЕЙРОН WORD
1. Общее
Программа 3-НЕЙРОН развитие программы 1-НЕЙРОН.
Исследуется двухмерная нейронная сеть.
Каждый нейрон связан с несколькими нейронами.
Цель программы определить состояние нейронной сети
при поступлении разных сигналов на вход нейронной сети.
2. Матрица нейронов
Матрица нейронов (нейронная сеть) p[1..n,1..n].
Элемент p[i,j] - равен весу нейрона i,j.
Вес: больше, меньше или равен нулю.
3. Структура программы 3-НЕЙРОН
3.1. Ввод и массивы.
Ввод.
Пример
Const
n=30;//размер матрицы нейронов
gg= 30;//gg<=n число серий входных сигналов
t1 = 1 ;/// число итераций основного цикла
a1 = 5;// исходнгый вес связи аксон - дендрит
m=150;//отсутствие связи между нейронами
t7=1;// отсутствие связи между нейронами
nn=20;// Связь "аксон - дендрит": + или -
t6 =21 ;///связь "аксон - дендрит ": + или -
tt = 3;//входной сигнал
pp = 2 ;// номер итерации суперцикла для вычисленият
//суммы веса нейронов больше, меньше и равногт нулю в конце
// основного цикла, соответствено m1, m2, m3
ga = gg;//ga<=gg вывод массива p
gb =t1 ;// 1<= gb<=t1 вывод массива p
//gc=n;//gc <=n формирование матрицы s4
t4=3 ; //порог активности нейрона t4<=tt
v= 5 ;// пять вариантов задания входного сигнала
h1=3; // вывод слоя матрицы s
h2= 4; // вывод слоя матрицы s
z = 200;//оценка активности нейронов
z1 = 200;// оценка активности нейронов
za=1;//формирование массива S4 1- по горизонтали,2 - по вертикали
Массивы
s:array [1..n, 1 ..n,1..n,1..n] of integer;// связи аксон - дендриты
p : array [1..n,1..n] of integer;// состояние нейронов
p1 : array [1..n,1..n] of integer;// состояние нейронов
f : array [1..n,1..n] of integer;
// состояние входного сигнала
s4 : array [1..n ,1..n]of integer;// заданные строки матрицы p
// по циклам суперцикла
w : array [1..gg,1..7] of INTEGER; // результаты целочисленные
r : array [1..gg,1..15] of variant; // результаты не целочисленные
3.2. Генерируется таблица связей между нейронами s[1..n, 1..n, 1..n,1.. n]
То есть каждый нейрон может активировать все другие нейроны.
Конкретные нейроны для активации и величина активации – случайный процесс.
3.3. Суперцикл.
3.3.1. На каждой итерации 1.. gg суперцикла генерируется входной сигнал из однотипной серии входных сигналов.
Всего 5 серий входных сигналов.
V = номер серии (1-5)
3.3.2. На каждой итерации суперцикла проходит t1 итераций основного цикла
3.3.3. По результатам циклов суперцикла и основного формируется - массив s4[1..gg,1..n]
3.4. Результат обработки массива s4[1..gg,1..n] – массив w[1..gg,1..7]
4. Входной сигнал
4.1. Задается один из пяти серий входного сигнала
4.2. v=1
Входной сигнал с периодом от 1 до gg
4.3. v=2
Входной сигнал арифметическая прогрессия с фиксированным началом в столбце 1 массива p.
4.3. v=3
Входной сигнал арифметическая прогрессия с фиксированным началом в столбце n массива p.
4.3. v=4
Входной сигнал по диагонали массива p.
4.3. v=5
Входной сигнал арифметическая прогрессия со сменным началом в массиве p.
5. Суперцикл
5.1. На каждой итерации основного цикла генерируется входной сигнал.
Входной сигнал представляет матрицу f[1..gg,1..n].
5.2. На каждой итерации i суперцикла строка i матрицы f[1..n,1..n] приравниваются к первой строке матрицы p[1..n,1..n].
5.3. На каждой итерации суперцикла проходит t1 итераций основного цикла
6. Основной цикл
6.1. На каждой итерации последовательно преобразуются или остаются без изменений элементы матрицы p[1..n,1..n]
6.2. Проводится преобразование матрицы p[1..n,1..n] – основной цикл.
for i:=1 to t1 do
begin
c:=c+1;
begin /////
for ia:=1 to n do
for ib :=1 to n do
for ic:=1 to n do
for id:=1 to n do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if p[ia,ib]<>0 then
p[ia,ib] := p[ia,ib] + s[ia,ib,ic,id];
if p[ia,ib]>z then c1:= c1+1;
if p[ia,ib]<z1 then c2:= c2+1;
if ii = gg then c3:= c3+1;
end;
end;
7. Формирование матрицы s4[1..gg,1..n]
Строка i соответствует номеру итерации суперцикла.
Элементы строки равны строке tc или столбцу tc матрицы p[1..n,1..n],
на итерации t1 основного цикла.
8. Результат
По матрице s4 находится матрица w[1..gg,1..7] путём суммирования
элементов строк матрицы s4.
9. Трактовка результата
За конечный результат принят столбец w[1..gg,6]
При v=1, v=4 и v=5 закономерностей не обнаружено.
При v=2 и v=3 при всех расчётах
w[i+1,6] > = w[i,6]
10. Вывод
Выводятся массивы:
p1, s4, f , s w, и r
ww- среднее число связей между нейронами.
11. Скачать программу 3-НЕЙРОН
ZIP
https://disk.yandex.ru/d/2IBvLWqs7AyduQ
TAR
https://disk.yandex.ru/d/NVl25xJIc8TOEA
Приложение
Программа 3-НЕЙРОН WORD
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Menus, ActnMan, ActnColorMaps;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button3: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Edit4: TEdit;
StringGrid5: TStringGrid;
StringGrid6: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
n=30;//размер матрицы нейронов
gg= 30;//gg<=n число серий входных сигналов
t1 = 1 ;/// число итераций основного цикла
a1 = 5;// исходнгый вес связи аксон - дендрит
m=150;//отсутствие связи между нейронами
t7=1;// отсутствие связи между нейронами
nn=20;// Связь "аксон - дендрит": + или -
t6 =21 ;///связь "аксон - дендрит ": + или -
tt = 3;//входной сигнал
pp = 2 ;// номер итерации суперцикла для вычисленият
//суммы веса нейронов больше, меньше и равногт нулю в конце
// основного цикла, соответствено m1, m2, m3
ga = gg;//ga<=gg вывод массива p
gb =t1 ;// 1<= gb<=t1 вывод массива p
//gc=n;//gc <=n формирование матрицы s4
t4=3 ; //порог активности нейрона t4<=tt
v= 5 ;// пять вариантов задания входного сигнала
h1=3; // вывод слоя матрицы s
h2= 4; // вывод слоя матрицы s
z = 200;//оценка активности нейронов
z1 = 200;// оценка активности нейронов
za=1;//формирование массива S4 1- по горизонтали,2 - по вертикали
var
Tick: Cardinal;
s:array [1..n, 1 ..n,1..n,1..n] of integer;// связи аксон - дендриты
p : array [1..n,1..n] of integer;// состояние нейронов
p1 : array [1..n,1..n] of integer;// состояние нейронов
f : array [1..n,1..n] of integer;
// состояние входного сигнала
s4 : array [1..n ,1..n]of integer;// заданные строки матрицы p
// по циклам суперцикла
w : array [1..gg,1..7] of INTEGER; // результаты целочисленные
r : array [1..gg,1..15] of variant; // результаты не целочисленные
a, u, x,x1, c,c1,c2,c3,c4, b1, d1, t, d, g, q,i,j,i1,i2,ji,hh : integer; //
j1,j2,j3,j4,j5,j6,j7,j8,i3,i4,i5,i6,i7,i8,i0, jz : integer; //
e, e1, z2, z3, iv,jv,ii,jj: integer;//
m1 ,m2,m3,m7,m9,m10, m11,m12,mm,ma: integer;//
df, h, x7,x8,x9,a7,a8,a9, ui,uj: integer;
ia, ib,ic, id ,it,iw, iu, ju, ja, jb, jc, jd ,jt, jw, ij ,ix: integer;//
ss, dd, sss, uu ,u1,u2,u3,u4 :integer;//
r1, r2, r3, r4, r5, r6 ,r7, r8, r9 ,bb: integer;//
y,k,ff, g1,cc,ccc, c5: integer;//
m4,m5, m6,m8 ,ww, l1, l2 ,l3,l4: variant;//
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid1.Cells[q,0]:=IntToStr(q);
for q:=1 to gg // нумерация по вертикали в табл №1 ,
do StringGrid1.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №2,
do StringGrid2.Cells[q,0]:=IntToStr(q);
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to 20 //нумерация по горизонтали в табл №3,
do StringGrid3.Cells[q,0]:=IntToStr(q);
for q:=1 to gg // нумерация по вертикали в табл №3 ,
do StringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №4,
do StringGrid4.Cells[q,0]:=IntToStr(q);
for q:=1 to n // нумерация по вертикали в табл №4 ,
do StringGrid4.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №5,
do StringGrid5.Cells[q,0]:=IntToStr(q);
for q:=1 to gg // нумерация по вертикали в табл №5 ,
do StringGrid5.Cells[0,q]:=IntToStr(q);
for q:=1 to gg //нумерация по горизонтали в табл №6,
do StringGrid6.Cells[q,0]:=IntToStr(q);
for q:=1 to 5 // нумерация по вертикали в табл №6 ,
do StringGrid6.Cells[0,q]:=IntToStr(q);
StringGrid2.Cells[0,0]:='P';
StringGrid5.Cells[0,0]:='S4';
StringGrid3.Cells[0,0]:='W';
StringGrid1.Cells[0,0]:='F';
StringGrid4.Cells[0,0]:='S';
StringGrid6.Cells[0,0]:='S3';
// Формирование матрицы s
for i:=1 to n do
for j:= 1 to n do
for ii:= 1 to n do
for jj :=1 to n do
if (i<>ii) or (j<>jj) then
begin
h:=0; mm:=0;
Form1.Caption:=IntToStr(GetTickCount-Tick);
s[i,j,ii,jj] := random (a1)+1;
h:= random (m)+1;
if h>t7 then s[i,j,ii, jj] := 0;
mm:= random (nn)+1 ;
if mm >t6 then s[i,j,ii,jj] := (-s[i,j,ii,jj]);
end; //b
for iu :=1 to n do
for ju := 1 to n do
for ui :=1 to n do
for uj := 1 to n do
begin
if s[iu,ju,ui,uj] >0 then u1 := u1 +1;
if s[iu,ju,ui,uj] =0 then u2 := u2 +1;
if s[iu,ju,ui,uj] <0 then u3 := u3 +1;
end;
u4:= u1+ u2+ u3;
for ii:=1 to gg do //суперцикл
begin
begin
for iv:=1 to n do
for jv :=1 to n do
p[iv,jv] :=0;
//серия периодических входных сигналов
if v=1 then
for j:=1 to n do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
df := j mod ii;
if df =0 then f[ii,j] :=tt;
end;
// серия сплошных входныхъ сигналов - с начала
if v=2 then
for jz:=1 to ii do
f[ii,jz] := tt;
// серия сплошных входныхъ сигналов - с конца
if v=3 then
for jz:=1 to ii do
f[ii,n-jz+1] := tt;
if v= 4 then
begin
cc:= cc+1;
if (cc+jz)<=n then
f[ii,cc] := tt;
end;
if v= 5 then
begin
cc:= cc+1;
if 2*cc<=n then
for jz:=1 to cc do
f[ii,cc+jz-1] := tt ;
end;
// передача входных сигналов на нейроны
for j:=1 to n do begin
p[1,j] := f[ii,j] ;
end;
//основной цикл
for i:=1 to t1 do
begin
c:=c+1;
begin /////
for ia:=1 to n do
for ib :=1 to n do
if p[ia,ib] >= t4 then
begin
for ic:=1 to n do
for id:=1 to n do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
p[ic,id] := p[ic,id] + s[ia,ib,ic,id];
if p[ia,ib]>z then c1:= c1+1;
if p[ia,ib]<z1 then c2:= c2+1;
if ii = gg then c3:= c3+1;
end;
if (ii = ga) and (i=gb) then
for it:=1 to n do
for jt:= 1 to n do
p1[it,jt]:= p[it,jt];
end;
end;
/////////////
//вывод соcтояния нейронов при заданных итерациях
// суперцикла и основного цикла
//формиирование итогового массива
if i=t1 then
begin
if za=1 then
for ix:=1 to n do
s4[ii,ix] := p[n,ix];
if za =2 then
for ix:=1 to n do
s4[ii,ix] := p[ix,n];
end;
if (ii = pp) and (i=t1) then
for i8 :=1 to n do
for j8 :=1 to n do
begin
if p[i8,j8] =0 then
m1:= m1 +1;
if p[i8,j8] >0 then
m2:= m2 +1;
if p[i8,j8] <0 then
m3 := m3 +1;
end; end; //
end;//
end; //
for i:=1 to gg do begin
for j:=1 to n do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if s4[i,j] =0 then w[i,1] := w[i,1]+1 ;
if s4[i,j] >0 then w[i,2] := w[i,2]+1;
if s4[i,j] <0 then w[i,3] := w[i,3]+1;
if s4[i,j] >0 then w[i,4] := w[i,4]+s4[i,j];
if s4[i,j]<0 then w[i,5] := w[i,5]+s4[i,j];
w[i,6] := w[i,6]+s4[i,j] ;
end;
end;
for i:=1 to gg do
begin
r[i,7] := w[i,1]/n;
r[i,8] := w[i,2]/n;
r[i,9] := w[i,3]/n;
if (w[i,4]-w[i,5])>0 then
r[i,10] := w[i,4]/(w[i,4]-w[i,5]);
if (w[i,4]-w[i,5])>0 then
r[i,11] := -w[i,5]/(w[i,4]-w[i,5]);
end;
m4 := m1/(n*n);
m5 := m2/(n*n);
m6 := m3/(n*n);
ww:=u1/(n*n);
Form1.Caption:=IntToStr(GetTickCount-Tick); //
for i:=1 to n do
for j:=1 to n do
StringGrid2.Cells[j,i]:=
IntToStr( p1[i,j]);
for i:=1 to gg do
for j:=1 to 7 do
StringGrid3.Cells[j,i]:=
IntToStr( w[i,j]);
for i:=1 to gg do
for j:=7 to 12 do
StringGrid3.Cells[j,i]:=
FormatFloat('0.000',r[i,j]) ;
Form1.Caption:=IntToStr(GetTickCount-Tick);
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to gg do
for j:=1 to n do
StringGrid1.Cells[j,i]:=
IntToStr( f[i,j]);
for i:=1 to n do
for j:=1 to n do
StringGrid4.Cells[j,i]:=
IntToStr( s[i,j,h1,h2]);
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to gg do
for j:= 1 to n do
StringGrid5.Cells[j,i]:=
IntToStr( s4[i,j]);
Edit1.Text := 'v='+'---' +IntToStr(v) +' ' +
'n='+'---'+IntToStr(n)+' ' +
'gg='+'---' +IntToStr(gg) +' ' +
't1='+'---'+IntToStr(t1)+' ' +
'a1='+'---'+IntToStr(a1)+' ' +
'z='+'---'+IntToStr(z)+' ' +
'z1='+'---'+IntToStr(z1)+' ' +
'm='+'---'+IntToStr(m)+' ' +
't6='+'---'+IntToStr(t6)+' ' +
'nn='+'---' +IntToStr(nn) +' ' +
't7'+'---'+IntToStr(t7)+' ' +
'tt='+'---' +IntToStr(tt) +' ' +
'pp='+'---' +IntToStr(pp) ;
Edit2.Text :=
'm1='+'---'+IntToStr(m1)+' ' +
'm2='+'---'+IntToStr(m2)+' ' +
'm3='+'---'+IntToStr(m3)+' ' +
'm7='+'---'+IntToStr(m3)+' ' +
'm8='+'---'+FormatFloat('0.000',m8)+' ' +
'u1='+'---'+ IntToStr(u1)+' ' +
'u2='+'---'+IntToStr(u2) +' ' +
'u3='+'---'+IntToStr(u3) +' ' +
'u4='+'---'+IntToStr(u4) +' ' +
'ww='+'---'+ FormatFloat('0.000',ww) ;;
Edit3.Text :=
'y='+'---' +IntToStr(y) +' ' +
'k='+'---' +IntToStr(k) +' ' +
'c='+'---'+IntToStr(c) +' ' +
'c1='+'---'+IntToStr(c1) +' ' +
'c2 ='+'---'+IntToStr(c2) +' ' +
'c3='+'---'+IntToStr(c3) +' ' +
'c4='+'---'+IntToStr(c4) +' ' +
'c5 ='+'---'+IntToStr(c5);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
end;
///////// ///////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
Отредактировано ABC (2024-04-16 16:29:38)