Рефераты. Сравнительный анализ нейросетевых реализаций алгоритмов распознавания образов p> 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 ij 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, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.