Backpropagation algorithm for draw graphics

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)

Author: Ľuboš Saloky
Program: Backprop.pas
File exe: Backprop.exe
need: Maingr.pasEgavga.bgi

Backpropagation algorithm for draw graphics.
{ BACKPROP.PAS                                                      }
{ Backpropagation algoritmus na vykreslovanie grafiky.              }
{                                                                   }
{ Author: Ľuboš Saloky                                              }
{ Datum: 01.01.1996                           http://www.trsek.com  }
 
program Backpropagation_algoritmus;
uses Crt,MainGr;
var Vaha:array[2..3,0..2,0..2] of real; { vrstva, zdroj. por., ciel. por. }
    Hodnota:array[1..3,0..2] of real;   { vrstva, por. cislo vo vrstve }
    Chyba:array[1..3,0..2] of real;     { sp„tne propagovanie chyby }
    i,j,k:integer;
    Vystup,x:real;
 
procedure Ucenie;
begin
{ ----- aplikacia vzoru ----- }
  for i:=0 to 2 do begin
    x:=Hodnota[1,0]*Vaha[2,i,0]+ { i,0 / 0,i }
       Hodnota[1,1]*Vaha[2,i,1]+
       Hodnota[1,2]*Vaha[2,i,2];
    Hodnota[2,i]:=1/(1+Exp(-x));
  end;
  x:=Hodnota[2,0]*Vaha[3,i,0]+
     Hodnota[2,1]*Vaha[3,i,1]+
     Hodnota[2,2]*Vaha[3,i,2];
  Hodnota[3,0]:=1/(1+Exp(-x));
{ ----- chyba ----- }
  Chyba[3,0]:=(Vystup-Hodnota[3,0]) * Exp(-x) / (1+Exp(-x)) / (1+Exp(-x));
  for i:=0 to 2 do
    Vaha[3,i,0]:=Vaha[3,i,0] + Chyba[3,0] * Hodnota[3,0];
  for i:=0 to 2 do begin
    x:=Hodnota[2,0]*Vaha[3,i,0]+
       Hodnota[2,1]*Vaha[3,i,1]+
       Hodnota[2,2]*Vaha[3,i,2];
    Chyba[2,i]:=Chyba[3,0] * Vaha[3,i,0] * Exp(-x) / (1+Exp(-x)) / (1+Exp(-x));
  end;
  for i:=0 to 2 do
    for j:=0 to 2 do
      Vaha[2,i,j]:=Vaha[2,i,j] + Chyba[2,j] * Hodnota[2,j]; {!!!!!}
  WriteLn(#13#10#13#10'----- Vahy od vstupu do skrytej vrstvy: -----');
  for i:=0 to 2 do begin
    for j:=0 to 2 do Write(Vaha[2,i,j]:0:5,'  ');
    WriteLn;
  end;
  WriteLn('----- Vahy zo skrytej vrstvy do vystupu: -----');
  for i:=0 to 2 do Write(Vaha[3,i,0]:0:5,'  ');
  WriteLn(#13#10'----- Vystup -----'#13#10,Hodnota[3,0]:0:5);
end;
 
BEGIN
  for i:=2 to 3 do
    for j:=0 to 2 do
      for k:=0 to 2 do
        Vaha[i,j,k]:=Random(100)/30;
 
  for k:=0 to 599 do begin { 100 iteracii pre kazdu vzorku }
    CakajNaVOI;
    ClrScr;
    case k div 100 of
      0:begin
        Hodnota[1,0]:=1; Hodnota[1,1]:=-1;Hodnota[1,2]:=1; Vystup:=1; Ucenie;
      end;
      1:begin
        Hodnota[1,0]:=-1;Hodnota[1,1]:=-1;Hodnota[1,2]:=1; Vystup:=-1;Ucenie;
      end;
      2:begin
        Hodnota[1,0]:=1; Hodnota[1,1]:=1; Hodnota[1,2]:=-1;Vystup:=1; Ucenie;
      end;
      3:begin
        Hodnota[1,0]:=-1;Hodnota[1,1]:=1; Hodnota[1,2]:=-1;Vystup:=-1;Ucenie;
      end;
      4:begin
        Hodnota[1,0]:=1; Hodnota[1,1]:=-1;Hodnota[1,2]:=-1;Vystup:=1; Ucenie;
      end;
      5:begin
        Hodnota[1,0]:=-1;Hodnota[1,1]:=-1;Hodnota[1,2]:=-1;Vystup:=1; Ucenie;
      end;
    end;
  end;
END.