algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Sieć neuronowa - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 3
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 27 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

siec neuronowa/siec_neuronowa.pas:
//www.algorytm.org
//siec neuronowa (c)2002 by Tomasz Lubiński

unit siec_neuronowa;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Math;

type
  TForm1 = class(TForm)
    Edit2: TEdit;   Edit3: TEdit;
    Edit4: TEdit;   Edit5: TEdit;
    Edit6: TEdit;   Edit7: TEdit;
    Edit8: TEdit;   Edit9: TEdit;
    Edit10: TEdit;  Edit11: TEdit;
    Edit12: TEdit;  Edit13: TEdit;
    Edit14: TEdit;  Edit15: TEdit;
    Label1: TLabel;   Label2: TLabel;
    Label3: TLabel;   Label4: TLabel;
    Label5: TLabel;   Edit1: TEdit;
    Label6: TLabel;   Label7: TLabel;
    Label8: TLabel;   Label9: TLabel;
    Label10: TLabel;  Label11: TLabel;
    Label12: TLabel;  Label13: TLabel;
    Label14: TLabel;  Label15: TLabel;
    Label16: TLabel;  Label17: TLabel;
    Label18: TLabel;  Label19: TLabel;
    Label20: TLabel;  Label21: TLabel;
    Label22: TLabel;  Label23: TLabel;
    Label24: TLabel;  Label25: TLabel;
    Label26: TLabel;  Label27: TLabel;
    Label28: TLabel;  Label29: TLabel;
    Label30: TLabel;  Label31: TLabel;
    Label32: TLabel;
    GroupBox1: TGroupBox;     GroupBox2: TGroupBox;
    RadioButton1: TRadioButton;   RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;   RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    Button1: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  z : Array [1..2] of Real;
  x,y : Array [1..3] of Real;
  w1 : Array [1..3] of Array [1..2] of Real;
  w2 : Array [1..2] of Array [1..3] of Real;

implementation

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);
begin
sleep(100);
Canvas.MoveTo(110,50); Canvas.LineTo(285,100);
Canvas.MoveTo(110,60); Canvas.LineTo(285,248);
Canvas.MoveTo(110,170); Canvas.LineTo(285,110);
Canvas.MoveTo(110,180); Canvas.LineTo(285,258);
Canvas.MoveTo(110,300); Canvas.LineTo(285,120);
Canvas.MoveTo(110,310); Canvas.LineTo(285,268);
Canvas.MoveTo(300,100); Canvas.LineTo(500,50);
Canvas.MoveTo(310,120); Canvas.LineTo(500,178);
Canvas.MoveTo(300,120); Canvas.LineTo(500,306);
Canvas.MoveTo(300,244); Canvas.LineTo(500,60);
Canvas.MoveTo(310,244); Canvas.LineTo(500,188);
Canvas.MoveTo(300,264); Canvas.LineTo(500,316);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
    tmp: Array [1..3] of Real;
begin
x[1]:=StrToFloat(Edit1.Text);
x[2]:=StrToFloat(Edit2.Text);
x[3]:=StrToFloat(Edit3.Text);
w1[1,1]:=StrToFloat(Edit4.Text);
w1[1,2]:=StrToFloat(Edit5.Text);
w1[2,1]:=StrToFloat(Edit6.Text);
w1[2,2]:=StrToFloat(Edit7.Text);
w1[3,1]:=StrToFloat(Edit8.Text);
w1[3,2]:=StrToFloat(Edit9.Text);
tmp[1]:=0;
for i:=1 to 3 do tmp[1]:=tmp[1]+x[i]*w1[i,1];
tmp[2]:=0;
for i:=1 to 3 do tmp[2]:=tmp[2]+x[i]*w1[i,2];
if RadioButton1.checked then begin z[1]:=0.8*tmp[1]+1; z[2]:=0.8*tmp[2]+1; end;
if RadioButton2.checked then
        begin
        if tmp[1]>0 then z[1]:=1 else
                if tmp[1]<0 then z[1]:=-1 else
                        z[1]:=0;
        if tmp[2]>0 then z[2]:=1 else
                if tmp[2]<0 then z[2]:=-1 else
                        z[2]:=0;
        end;
if RadioButton3.checked then begin z[1]:=1/(1+exp(-tmp[1])); z[2]:=1/(1+exp(-tmp[2])); end;
if RadioButton4.checked then begin z[1]:=Tanh(tmp[1]); z[2]:=Tanh(tmp[2]); end;
if RadioButton5.checked then begin z[1]:=exp(-tmp[1]*tmp[1]); z[2]:=exp(-tmp[2]*tmp[2]); end;
Label1.Caption:='z1 = ' + FloatToStr(z[1]);
Label2.Caption:='z2 = ' + FloatToStr(z[2]);
w2[1,1]:=StrToFloat(Edit15.Text);
w2[2,1]:=StrToFloat(Edit14.Text);
w2[1,2]:=StrToFloat(Edit13.Text);
w2[2,2]:=StrToFloat(Edit12.Text);
w2[1,3]:=StrToFloat(Edit11.Text);
w2[2,3]:=StrToFloat(Edit10.Text);
tmp[1]:=0;
for i:=1 to 2 do tmp[1]:=tmp[1]+z[i]*w2[i,1];
tmp[2]:=0;
for i:=1 to 2 do tmp[2]:=tmp[2]+z[i]*w2[i,2];
tmp[3]:=0;
for i:=1 to 2 do tmp[3]:=tmp[3]+z[i]*w2[i,3];

if RadioButton1.checked then begin y[1]:=0.8*tmp[1]+1; y[2]:=0.8*tmp[2]+1; y[3]:=0.8*tmp[3]+1; end;
if RadioButton2.checked then
        begin
        if tmp[1]>0 then y[1]:=1 else
                if tmp[1]<0 then y[1]:=-1 else
                        y[1]:=0;
        if tmp[2]>0 then y[2]:=1 else
                if tmp[2]<0 then y[2]:=-1 else
                        y[2]:=0;
        if tmp[3]>0 then y[3]:=1 else
                if tmp[3]<0 then y[3]:=-1 else
                        y[3]:=0;
        end;
if RadioButton3.checked then begin y[1]:=1/(1+exp(-tmp[1])); y[2]:=1/(1+exp(-tmp[2])); y[3]:=1/(1+exp(-tmp[3])); end;
if RadioButton4.checked then begin y[1]:=Tanh(tmp[1]); y[2]:=Tanh(tmp[2]); y[3]:=Tanh(tmp[3]); end;
if RadioButton5.checked then begin y[1]:=exp(-tmp[1]*tmp[1]); y[2]:=exp(-tmp[2]*tmp[2]); y[3]:=exp(-tmp[3]*tmp[3]); end;
Label3.Caption:='y1 = ' + FloatToStr(y[1]);
Label4.Caption:='y2 = ' + FloatToStr(y[2]);
Label5.Caption:='y3 = ' + FloatToStr(y[3]);
end;

end.
Dodaj komentarz