|
Сравнительный анализ нейросетевых реализаций алгоритмов распознавания образовошибки 0.00001 персептрон путал классами цифру 1 . Сеть обратного распространения при том же уровне допустимой ошибки 0.00001 путала класс буквы S. При уровне допустимой ошибки 0.000001 и персептрон, и сеть обратного распространения ошибок в классификации не допускали. 3 Релаксация стимула. Как говорилось состояние сети Хопфилда описывается множеством текущих значений сигналов от всех нейронов, причем на каждом шаге алгоритма меняется состояние лишь одного нейрона, номер которого выбирается случайным образом. Он суммирует с весами Wij сигналы, поступающие от выходов нейронов сети по обратным связям и изменяет свое состояние в соответствии со значением пороговой функции. Пример последовательности состояний, которые проходит система нейронов при распознавании образов в модели Хопфилда, приведен на рис. 4. Приложение 1, где показаны промежуточные состояния. Левая картинка представляет собой исходный стимул, а крайняя правая - образ, записанный в памяти системы. При такой релаксации энергия системы уменьшается, достигая с течением времени одного из локальных минимумов. 5 Возникновение ложного образа. Выработка прототипа. Устойчивыми состояниями сети Хопфилда могут быть также образы, не записанные ее память - ложные образы. На Рис. 5. Приложение 1. показан пример устойчивого ложного образа ((), возникающий при распознавании стимулов сетью, в матрице связей которой записаны образы a, b, c. При увеличении числа образов, записываемых в память системы, отвечающие им минимумы энергии могут сливаться. На рис. 6. Приложение 1. показана группа образов (получающихся при небольших искажениях), записанные в память сети - a, b, c. При предъявлении сети этих образов для распознавания, сеть приходит к состоянию, соответствующего выработанному прототипу - d. Модель демонстрирует процедуру разобучения, предназначенную для устранения из памяти ложных образов. Разобучение состоит в предъявлении сети образа, к которому релаксировал стимул. При этом из матрицы связи вычитается тот член, который при обучении бы прибавлялся. В применении к случаю прототипа с тремя записанными в памяти образами (см. Рис. 6. Приложение 1.), разобучение приводит к исчезновению прототипа и к появлению вместо одной потенциальной ямы, соответствующей прототипу, трех потенциальных ям, соответствующих каждому образу, записанному в памяти сети. 6 Бистабильность восприятия. Эксперименты с моделью сети Хопфилда показали (см. Рис. 7. Приложение 1.), что средние стимулы последовательности могут восприниматься либо как искаженный левый, либо как искаженный правый образы, т. е. имеет место бистабильность восприятия. Смена устойчивого состояния происходит после предъявления четвертой картинки. Заключение. В работе созданы программные модели трех нейронных сетей: персептрон, сеть обратного распросранения и сеть Хопфилда. Модели позволяют проиллюстрироваь основные достоинства и недостатки, а также ряд специфических свойств реализованных моделей. Во всех моделях для приложения внешнего стимула использовалась, специально разработанная программно, измерительная сетчатка. Результаты серии экспериментов, проведенных на моделях, показали, что: . Способность персептрона и сети обратного распространения моделировать определенную функцию зависит от допустимой общей ошибки сети. . Топологическая структура сети Хопфилда обуславливает ее свойства, которые можно интерпритировать как релаксация стимула, выработка прототипа, бистабильность восприятия. В дальнейшем планируется разработка программных моделей более сложных нейронных сетей и их комбинаций с целью получения наиболее эффективных алгоритмов для задачи распознавания образов. Литераура. 1.Горбань А.Н.,Россиев Д.А..Нейронные сети на персональном компьюере. 2. Минский М.Л.,Пайперт С..Персепроны.М.: Мир.1971 3. Розенблатт Ф.Принципы нейродинамики.М.: Мир.1965 4. Уоссермен Ф.Нейрокомпьютерная техника.М.: Мир.1992.237С 5. Cohen M.A.,Grossberg S.G.Absoiute stability of global pattern formation and parallel memory storage by compatitive neural networks.1983 6. Hebb D.O.Organization of behavior.New York:Science Edition 7. Hopfield J.J.Neural networks and physical systems with emergent collective computational abilities. Proseedings of the National Academy of Science 79.1982 8. Parker D.B. Learning-logic. Invention Report. 1982 9. Rumelhart D.E. Hinton G.E.,Williams R.J. Learning internal representations by error propagation. In Parallel distributed processing, vol.1986 10. Werbos P.G. Beyond regression: New tools for prediction and analysis in the behavioral sciences. 1974 11. Wider R.O. Single-stage logic, Paper presented at the AIEE Fall General Meeting. 1960 12. Windrow B. The speed of adaptetion in adaptive control system. 1961 13. Windrow B. A statistical theory of adaptetion. Adaptive control systems. 1963 14. Windrow B., Angell J.B. Reliable, trainable networks for computing and control. 1962 15. Windrow B., Hoff N.E. Adaptive switching circuits. 1960 Приложение 1. [pic] [pic] [pic] [pic] Рис. 1. [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] Рис. 2. [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] Рис. 3. [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] [pic] Рис. 3. [pic] [pic] [pic] [pic] [pic] Рис. 4. [pic] [pic] [pic] [pic] Рис. 5. [pic] [pic] [pic] [pic] Рис. 6. [pic] [pic] [pic] [pic] [pic] [pic] Рис. 7. Приложение 2. Программа, моделирующая однослойную сеть. unit UPerc; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Percept_Field, StdCtrls, Buttons, ExtCtrls; const InputLayerUnits=35; OutputLayerUnits=2; eta=0.05; epsilon=0.000001; numberpatterns=36; type TFrmPerceptron = class(TForm) Percept_FieldPerc: TPercept_Field; GroupBoxTrain: TGroupBox; GroupBoxInit: TGroupBox; ComboBoxABC: TComboBox; ComboBoxDigits: TComboBox; BtnNext: TButton; BitBtnClose: TBitBtn; EditNumPat: TEdit; LabelNumPat: TLabel; GroupBoxRec: TGroupBox; LabelInput: TLabel; BtnOutput: TButton; LabelOdd: TLabel; RadioGroupTarget: TRadioGroup; RadioButtonOdd: TRadioButton; RadioButtonEven: TRadioButton; LabelOr: TLabel; LabelEven: TLabel; procedure ComboBoxABCChange(Sender: TObject); procedure ComboBoxDigitsChange(Sender: TObject); procedure Percept_FieldPercMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtnCloseClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BtnNextClick(Sender: TObject); procedure BtnOutputClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmPerceptron: TFrmPerceptron; var w:array[1..OutputLayerUnits,1..InputLayerUnits] of real; indexBtnNextClick:byte; activation:array[1..OutputLayerUnits] of real; OutputLayerOutput:array[1..OutputLayerUnits] of shortint; target:array[1..numberpatterns,1..OutputLayerUnits] of shortint; v:array[1..numberpatterns,1..InputLayerUnits] of shortint; implementation {$R *.DFM} procedure TFrmPerceptron.Percept_FieldPercMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var m,k:BYTE; correctRect:shortint; L,T,H,V:INTEGER; begin L:=0; T:=0; H:=Percept_FieldPerc.UnitHorizontal; V:=Percept_FieldPerc.UnitVertical; for m :=1 to Percept_FieldPerc.UnitRectVert do begin for k :=1 to Percept_FieldPerc.UnitRectHorz do begin if (XL) and (YT) then begin correctRect:=k+Percept_FieldPerc.UnitRectHorz*(m-1); if (Button=mbLeft) and (Percept_FieldPerc.Brushes[correctRect]=Percept_FieldPerc.BackGroundBr ush) then begin Percept_FieldPerc.Brushes[correctRect]:=Percept_FieldPerc.RectBrush; end else if (Button=mbRight) and (Percept_FieldPerc.Brushes[correctRect]=Percept_FieldPerc.RectBrush)th en begin Percept_FieldPerc.Brushes[correctRect]:=Percept_FieldPerc.BackGroundBr ush; end; end; inc(L,Percept_FieldPerc.UnitHorizontal); inc(H,Percept_FieldPerc.UnitHorizontal); end; inc(T,Percept_FieldPerc.UnitVertical); inc(V,Percept_FieldPerc.UnitVertical); L:=0; H:=Percept_FieldPerc.UnitHorizontal; end; end; procedure TFrmPerceptron.BitBtnCloseClick(Sender: TObject); begin Close; end; procedure TFrmPerceptron.FormCreate(Sender: TObject); var i,j:byte; rand:real; begin //numberpatterns:=2;//10; EditNumPat.Text:=inttostr(numberpatterns); BtnNext.Font.Color:=clRed; indexBtnNextClick:=0; LabelInput.Visible:=False; // ********************************************* Randomize;// случайные веса (-0.5,0.5) for i := 1 to OutputLayerUnits do begin for j := 1 to InputLayerUnits do begin rand:=Random-0.5; w[i,j]:=rand; end; end; end; procedure TFrmPerceptron.BtnNextClick(Sender: TObject); var i,j,m:byte; sum:real; neterror,err:real; error:array[1..OutputLayerUnits] of real; stop:boolean; krandom:integer; begin indexBtnNextClick:=indexBtnNextClick+1; for m:=1 to InputLayerUnits do begin if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.RectBrush) then begin v[indexBtnNextClick,m]:=1; end else if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.BackGroundBrush) then begin v[indexBtnNextClick,m]:=-1; end; end; // ******************ODD or EVEN********************* if RadioButtonOdd.Checked then begin target[indexBtnNextClick,1]:=1; target[indexBtnNextClick,2]:=-1; end else if RadioButtonEven.Checked then begin target[indexBtnNextClick,1]:=-1; target[indexBtnNextClick,2]:=1; end; // *************************************************** if (indexBtnNextClick+1)=numberpatterns then begin BtnNext.Caption:='last'; end else begin if (indexBtnNextClick)=numberpatterns then begin BtnNext.Font.Color:=clWindowText; BtnNext.Caption:='finished'; LabelInput.Font.Color:=clRed; LabelInput.Visible:=True; end else begin BtnNext.Caption:='next'; end; end; //*********************MAIN******************************* if (indexBtnNextClick)=numberpatterns then begin repeat stop:=false; for m := 1 to numberpatterns do begin for i := 1 to OutputLayerUnits do begin sum:=0; for j := 1 to InputLayerUnits do begin sum:=sum+w[i,j]*v[m,j]; end; activation[i]:=sum; if sum>=0 then begin OutputLayerOutput[i]:=1; end else begin OutputLayerOutput[i]:=-1; end; end; neterror:=0; for i := 1 to OutputLayerUnits do begin err:=target[m,i]-activation[i]; error[i]:=err; neterror:=neterror+0.5*sqr(err); end; if neterror=0 then begin OutputLayerOutput[i]:=1; end else begin OutputLayerOutput[i]:=-1; end; end; neterror:=0; for i := 1 to OutputLayerUnits do begin err:=target[m,i]-activation[i]; error[i]:=err; neterror:=neterror+0.5*sqr(err); end; for i := 1 to OutputLayerUnits do begin for j := 1 to InputLayerUnits do begin w[i,j]:=w[i,j]+eta*error[i]*v[m,j]; end; end; end; end;//if until stop;//end; end; // if end; procedure TFrmPerceptron.BtnOutputClick(Sender: TObject); var z:array[1..InputLayerUnits] of shortint; m,i,j:byte; Output:array[1..InputLayerUnits] of real; sum:real; begin for m:=1 to InputLayerUnits do begin if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.RectBrush) then begin z[m]:=1; end else if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.BackGroundBrush) then begin z[m]:=-1; end; end; for i := 1 to OutputLayerUnits do begin sum:=0; for j := 1 to InputLayerUnits do begin sum:=sum+w[i,j]*z[j]; end; Output[i]:=sum; end; if (Output[1]>Output[2]) then begin LabelOdd.Font.Color:=clRed; LabelEven.Font.Color:=clWindowText; end else begin if (Output[2]>Output[1]) then begin LabelEven.Font.Color:=clRed; LabelOdd.Font.Color:=clWindowText; end; end; end; end. Программа, моделирующая сеть обратного распространения unit UBack; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Percept_Field, Buttons, ExtCtrls; const FirstLayerUnits=35; SecondLayerUnits=20; ThirdLayerUnits=2; numberpatterns=36; NumLayers=3; epsilon=0.000001; eta=0.05; alpha=0.5; type TFrmBack = class(TForm) BitBtnClose: TBitBtn; Percept_FieldBack: TPercept_Field; GroupBoxTrain: TGroupBox; ComboBoxABC: TComboBox; ComboBoxDigits: TComboBox; GroupBoxInit: TGroupBox; EditNumPat: TEdit; LabelNumPat: TLabel; BtnNext: TButton; GroupBoxRec: TGroupBox; LabelInput: TLabel; RadioGroupTarget: TRadioGroup; RadioButtonLetter: TRadioButton; RadioButtonFigure: TRadioButton; ButtonOut: TButton; LabelFigure: TLabel; LabelOr: TLabel; LabelLetter: TLabel; procedure BitBtnCloseClick(Sender: TObject); procedure ComboBoxABCChange(Sender: TObject); procedure ComboBoxDigitsChange(Sender: TObject); procedure Percept_FieldBackMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure BtnNextClick(Sender: TObject); procedure ButtonOutClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmBack: TFrmBack; var wFirstSecond:array[1..SecondLayerUnits,1..FirstLayerUnits] of real; wSecondThird:array[1..ThirdLayerUnits,1..SecondLayerUnits] of real; indexBtnNextClick:byte; target:array[1..numberpatterns,1..ThirdLayerUnits] of real; v:array[1..numberpatterns,1..FirstLayerUnits] of real; implementation {$R *.DFM} procedure TFrmBack.BitBtnCloseClick(Sender: TObject); begin Close; end; procedure TFrmBack.Percept_FieldBackMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var m,k:BYTE; correctRect:shortint; L,T,H,V:INTEGER; begin L:=0; T:=0; H:=Percept_FieldBack.UnitHorizontal; V:=Percept_FieldBack.UnitVertical; for m :=1 to Percept_FieldBack.UnitRectVert do begin for k :=1 to Percept_FieldBack.UnitRectHorz do begin if (XL) and (YT) then begin correctRect:=k+Percept_FieldBack.UnitRectHorz*(m-1); if (Button=mbLeft) and (Percept_FieldBack.Brushes[correctRect]=Percept_FieldBack.BackGroundBr ush) then begin Percept_FieldBack.Brushes[correctRect]:=Percept_FieldBack.RectBrush; end else if (Button=mbRight) and (Percept_FieldBack.Brushes[correctRect]=Percept_FieldBack.RectBrush)th en begin Percept_FieldBack.Brushes[correctRect]:=Percept_FieldBack.BackGroundBr ush; end; end; inc(L,Percept_FieldBack.UnitHorizontal); inc(H,Percept_FieldBack.UnitHorizontal); end; inc(T,Percept_FieldBack.UnitVertical); inc(V,Percept_FieldBack.UnitVertical); L:=0; H:=Percept_FieldBack.UnitHorizontal; end; end; procedure TFrmBack.FormCreate(Sender: TObject); var i,j:byte; rand:real; begin EditNumPat.Text:=inttostr(numberpatterns); BtnNext.Font.Color:=clRed; indexBtnNextClick:=0; LabelInput.Visible:=False; // ********************************************* Randomize;// случайные веса (-0.5,0.5) for i := 1 to SecondLayerUnits do begin for j := 1 to FirstLayerUnits do begin rand:=Random-0.5; wFirstSecond[i,j]:=rand; end; end; for i := 1 to ThirdLayerUnits do begin for j := 1 to SecondLayerUnits do begin rand:=Random-0.5; wSecondThird[i,j]:=rand; end; end; end; procedure TFrmBack.BtnNextClick(Sender: TObject); var i,j,m:byte; sumFirstSecond, sumSecondThird:real; stop:boolean; OutputSecond:array[1..SecondLayerUnits] of real; OutputThird:array[1..ThirdLayerUnits] of real; output,err,neterror:real; OutLayerError:array[1..ThirdLayerUnits] of real; SecondLayerError:array[1..SecondLayerUnits] of real; FirstLayerError:array[1..FirstLayerUnits] of real; dWeightSecondThird:array[1..ThirdLayerUnits,1..SecondLayerUnits] of real; dWeightFirstSecond:array[1..SecondLayerUnits,1..FirstLayerUnits] of real; dWeight:real; krandom:integer; begin indexBtnNextClick:=indexBtnNextClick+1; for m:=1 to FirstLayerUnits do begin if (Percept_FieldBack.Brushes[m]=Percept_FieldBack.RectBrush) then begin v[indexBtnNextClick,m]:=1; end else if (Percept_FieldBack.Brushes[m]=Percept_FieldBack.BackGroundBrush) then begin v[indexBtnNextClick,m]:=-1; end; end; // ******************ODD or EVEN********************* if RadioButtonFigure.Checked then begin target[indexBtnNextClick,1]:=0.9;//1; target[indexBtnNextClick,2]:=0.1;//-1; end else if RadioButtonLetter.Checked then begin target[indexBtnNextClick,1]:=0.1;//-1; target[indexBtnNextClick,2]:=0.9;//1; end; // *************************************************** if (indexBtnNextClick+1)=numberpatterns then begin BtnNext.Caption:='last'; end else begin if (indexBtnNextClick)=numberpatterns then begin BtnNext.Font.Color:=clWindowText; BtnNext.Caption:='finished'; LabelInput.Font.Color:=clRed; LabelInput.Visible:=True; end else begin BtnNext.Caption:='next'; end; end; //***********************MAIN************************** if (indexBtnNextClick)=numberpatterns then begin repeat stop:=false; for m := 1 to numberpatterns do begin for i := 1 to SecondLayerUnits do begin sumFirstSecond:=0; for j := 1 to FirstLayerUnits do begin sumFirstSecond:=sumFirstSecond+wFirstSecond[i,j]*v[m,j]; end; OutputSecond[i]:=1/(1+exp(-sumFirstSecond)); end; for i := 1 to ThirdLayerUnits do begin sumSecondThird:=0; for j := 1 to SecondLayerUnits do begin sumSecondThird:=sumSecondThird+wSecondThird[i,j]*OutputSecond[j]; end; OutputThird[i]:=1/(1+exp(-sumSecondThird)); end; neterror:=0; for i := 1 to ThirdLayerUnits do begin output:=OutputThird[i]; err:=target[m,i]-output; OutLayerError[i]:=output*(1-output)*err; neterror:=neterror+0.5*sqr(err); end; if neterrorOutputThird[2]) then begin LabelFigure.Font.Color:=clRed; LabelLetter.Font.Color:=clWindowText; end else begin if (OutputThird[2]>OutputThird[1]) then begin LabelLetter.Font.Color:=clRed; LabelFigure.Font.Color:=clWindowText; end; end; end; end. Программа, моделирующая сеть Хопфилда unit UHop; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Percept_Field; const numberneurons=35; type TFrmHop = class(TForm) BitBtnClose: TBitBtn; GrpBoxTraining: TGroupBox; GrpBoxInitial: TGroupBox; EditThres: TEdit; EditNumPat: TEdit; LabelThres: TLabel; LabelNumPat: TLabel; BtnNext: TButton; GrpBoxRec: TGroupBox; LabelInput: TLabel; BtnOutput: TButton; BitBtnCancel: TBitBtn; ButtonDelay: TButton; ComboBoxABC: TComboBox; ComboBoxDigits: TComboBox; Percept_FieldHop: TPercept_Field; ButtonRetrain: TButton; procedure Percept_FieldHopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtnCloseClick(Sender: TObject); procedure EditNumPatChange(Sender: TObject); procedure EditThresChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BtnNextClick(Sender: TObject); procedure BtnOutputClick(Sender: TObject); procedure BitBtnCancelClick(Sender: TObject); procedure ButtonDelayClick(Sender: TObject); procedure ComboBoxABCChange(Sender: TObject); procedure ComboBoxDigitsChange(Sender: TObject); procedure ButtonRetrainClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmHop: TFrmHop; var numberpatterns,threshold:shortint; w:array[1..numberneurons,1..numberneurons] of shortint; iindex,jindex,indexBtnNextClick:byte; stop:boolean; implementation {$R *.DFM} procedure TFrmHop.Percept_FieldHopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var m,k:BYTE; correctRect:shortint; L,T,H,V:INTEGER; begin L:=0; T:=0; H:=Percept_FieldHop.UnitHorizontal; V:=Percept_FieldHop.UnitVertical; for m :=1 to Percept_FieldHop.UnitRectVert do begin for k :=1 to Percept_FieldHop.UnitRectHorz do begin if (XL) and (YT) then begin correctRect:=k+Percept_FieldHop.UnitRectHorz*(m-1); if (Button=mbLeft) and (Percept_FieldHop.Brushes[correctRect]=Percept_FieldHop.BackGroundBrus h) then begin Percept_FieldHop.Brushes[correctRect]:=Percept_FieldHop.RectBrush; end else if (Button=mbRight) and (Percept_FieldHop.Brushes[correctRect]=Percept_FieldHop.RectBrush)then begin Percept_FieldHop.Brushes[correctRect]:=Percept_FieldHop.BackGroundBrus h; end; end; inc(L,Percept_FieldHop.UnitHorizontal); inc(H,Percept_FieldHop.UnitHorizontal); end; inc(T,Percept_FieldHop.UnitVertical); inc(V,Percept_FieldHop.UnitVertical); L:=0; H:=Percept_FieldHop.UnitHorizontal; end; end; procedure TFrmHop.BitBtnCloseClick(Sender: TObject); begin Close; end; procedure TFrmHop.EditThresChange(Sender: TObject); begin threshold:=strtoint(EditThres.Text); end; procedure TFrmHop.EditNumPatChange(Sender: TObject); begin numberpatterns:=strtoint(EditNumPat.Text); end; procedure TFrmHop.FormCreate(Sender: TObject); var i,j:byte; begin threshold:=0; EditThres.Text:=inttostr(threshold); numberpatterns:=3; EditNumPat.Text:=inttostr(numberpatterns); BtnNext.Font.Color:=clRed; for i:=1 to numberneurons do begin for j:=1 to numberneurons do begin w[i,j]:=0; end; end; indexBtnNextClick:=0; LabelInput.Visible:=False; end; procedure TFrmHop.BtnNextClick(Sender: TObject); var i,j,m:byte; v:array[1..numberneurons] of shortint; begin indexBtnNextClick:=indexBtnNextClick+1; for m:=1 to numberneurons do begin if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.RectBrush) then begin v[m]:=1; end else if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.BackGroundBrush) then begin v[m]:=0; end; end; for i:=1 to numberneurons-1 do begin for j:=i+1 to numberneurons do begin w[i,j]:=w[i,j]+(2*v[i]-1)*(2*v[j]-1); w[j,i]:=w[i,j]; end; end; if (indexBtnNextClick+1)=numberpatterns then begin BtnNext.Caption:='last'; end else begin if (indexBtnNextClick)=numberpatterns then begin BtnNext.Font.Color:=clWindowText; BtnNext.Caption:='finished'; LabelInput.Font.Color:=clRed; LabelInput.Visible:=True; end else begin BtnNext.Caption:='next'; end; end; end; procedure TFrmHop.BtnOutputClick(Sender: TObject); var i,j,m,indicator:byte; y,z:array[1..numberneurons] of shortint; wij,wijthres:shortint; k:longint; begin for m:=1 to numberneurons do begin if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.RectBrush) then begin z[m]:=1; end else if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.BackGroundBrush) then begin z[m]:=0; end; end; for m := 1 to numberneurons do begin y[m]:=z[m]; end; indicator:=0; while indicator=0 do begin for i:=1 to numberneurons do begin wij:=0; for j:=1 to numberneurons do begin if i<>j then wij:=wij+w[i,j]*z[j]; end; wijthres:=wij-threshold; if wijthres>=0 then z[i]:=1 else z[i]:=0; end; i:=1; while inumberneurons; end; end;{while} end;{while} for m := 1 to numberneurons do begin if z[m]=1 then begin Percept_FieldHop.Brushes[m]:=Percept_FieldHop.RectBrush; end else if z[m]=0 then begin Percept_FieldHop.Brushes[m]:=Percept_FieldHop.BackGroundBrush; end; stop:=false; repeat Application.ProcessMessages; until stop; end; end; procedure TFrmHop.BitBtnCancelClick(Sender: TObject); var i,j:byte; begin BtnNext.Font.Color:=clRed; for i:=1 to numberneurons do begin for j:=1 to numberneurons do begin w[i,j]:=0; end; end; indexBtnNextClick:=0; LabelInput.Visible:=False; BtnNext.Caption:='first'; for i := 1 to numberneurons do begin Percept_FieldHop.Brushes[i]:=Percept_FieldHop.BackGroundBrush; end; end; procedure TFrmHop.ButtonDelayClick(Sender: TObject); begin stop:=true; end; procedure TFrmHop.ButtonRetrainClick(Sender: TObject); var i,j,m:byte; v:array[1..numberneurons] of shortint; begin for m:=1 to numberneurons do begin if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.RectBrush) then begin v[m]:=1; end else if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.BackGroundBrush) then begin v[m]:=0; end; end; for i:=1 to numberneurons-1 do begin for j:=i+1 to numberneurons do begin w[i,j]:=w[i,j]-(2*v[i]-1)*(2*v[j]-1); w[j,i]:=w[i,j]; end; end; end; end. Страницы: 1, 2 |
|
|||||||||||||||||||||||||||||
|
Рефераты бесплатно, реферат бесплатно, сочинения, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |