Sintaksa MultiLayerPerceptron Naredbe

MultiLayerPerceptron ImeMreže (
 SampleDimension(DIM),
 OPTIONAL Expansion( func1, func2, ..., funcEDIM ),
 Perceptrons(
  Perceptron(IME1,TIP1),
  Perceptron(IME2,TIP2),
  ...
  Perceptron(IMEN,TIPN)
 ),
 Connections(
  (IMEX1, IMEY1, WEIGHTX1Y1 ), ..., (IMEXK, IMEYK, WEIGHTXKYK ),
  (IMEX1, WEIGHTX1 ), ..., (IMEXN, WEIGHTXN )
 ),
 Outputs(IMEX1,...,IMEXJ),
 Samples(
  (X1,1,X1,2,...,X1,D,Y1,1,Y1,2,...,Y1,J),
  (X2,1,X2,2,...,X2,D,Y2,1,Y2,2,...,Y2,J),
   ...
  (XN,1,XN,2,...,XN,D,YN,1,YN,2,...,YN,J)
 ),
 LearnMethod(METHOD_NAME),
 Options(
  OPTIONAL LearnNow=LNOW,
  OPTIONAL LearningRate=LRT,
  OPTIONAL InertionRate=IRT,
  OPTIONAL ProduceRaport=PRAP,
  OPTIONAL RaportStyle=RSTL,
  OPTIONAL Task=TSK,
  OPTIONAL AllowedError=AERR,
  OPTIONAL IterationLimit=ILIM,
  OPTIONAL EpohLimit=ELIM,
  OPTIONAL PrecisionDecimals=PDEC,
  OPTIONAL ZeroLimit=ZLIM,
  OPTIONAL GenerateCCode=GCC,
  OPTIONAL OutputRaportToStdout=ORSTD,
  OPTIONAL OutputRaportToNewFrame=ORNF,
 )
);

Boolean: LNOW, PRAP, GCC, ORSTD, ORNF
Integer: PDEC, DIM, EDIM, N, K, J, D, ILIM, ELIM
Real: LRT, IRT, AERR, ZLIM, WEIGHTx
Text: ImeMreže, IMEx, TIPx, METHOD_NAME

Za sada je jedini podržani tip perceptrona "Sigm".

Veze među perceptronima opisuju se u Connection bloku uređenim dvojkama ili trojkama. Uređena dvojka (IME,WEIGHT) označava da je kod perceptrona "IME" slobodni težinski faktor WEIGHT. Uređena trojka (IME1, IME2, WEIGHT) označava da je izlaz perceptrona "IME1" spojen na ulaz perceptrona "IME2" preko težinskog faktora WEIGHT.

Za sada su podržane metode učenja "Backpropagation", "BackpropagationStohastic", "BackpropagationPure".
Backpropagation uzme prvi uzorak i trenira mrežu dok ga ne nauči. Zatim uzme drugi uzorak, ... Konačno ovo sve ponavlja po epohama.
BackpropagationStohastic uzme prvi uzorak, jednom ga predoči mreži i korigira faktore. Zatim uzme drugi uzorak, ... Konačno ovo sve ponavlja po epohama.
BackpropagationPure uzme sve uzorke, izračuna pravi gradijent i tek tada korigira faktore. Ovo sve ponavlja po epohama.

Najbolje rezultate daje BackpropagationStohastic. Backpropagation ponekad forsiranjem sa svakim uzorkom ima za posljedicu da mreža nakon što nauči jedan uzorak istovremeno zaboravi prethodni. BackpropagationPure zbog uporabe pravog gradijenta vrlo lagano zaglavi u lokalnim minimumima.

RaportStyle opcija može biti "Code" ili "HTML".

Task može biti jedan od: CheckFirstSample, CheckAllSamples, LearnFirstSample, LearnAllSamples, GenerateCCode.

Primjer:

MultiLayerPerceptron Mreza1 (
 SampleDimension(2),         // Dimenzija ulaznog vektora == broj ulaza
 Perceptrons(                // Definicije svih perceptrona
  Perceptron("p1","Sigm"),   // Perceptron imena "p1", sigmoidalni
  Perceptron("p2","Sigm"),   // Perceptron imena "p2", sigmoidalni
  Perceptron("p3","Sigm"),   // Perceptron imena "p3", sigmoidalni
  Perceptron("p4","Sigm"),   // Perceptron imena "p4", sigmoidalni
  Perceptron("p5","Sigm"),   // Perceptron imena "p5", sigmoidalni
  Perceptron("p6","Sigm"),   // Perceptron imena "p6", sigmoidalni
  Perceptron("p7","Sigm"),   // Perceptron imena "p7", sigmoidalni
  Perceptron("p8","Sigm")    // Perceptron imena "p8", sigmoidalni
 ),
 Connections(    // Definicije tko je spojen na koga
  // prvi ulaz spojen sa ... i tezinski faktor je ...
  (Input(1), "p1", 0.50 ), (Input(1), "p2", 0.40 ), (Input(1), "p3", 0.10 ),
  // drugi ulaz spojen sa ... i tezinski faktor je ...
  (Input(2), "p1", 0.20 ), (Input(2), "p2", 0.60 ), (Input(2), "p3", 0.20 ),

  // perceptron ... spojen sa perceptronom ... i tezinski faktor je ...
  ("p1", "p4", 0.10 ), ("p1", "p5", 0.55 ), ("p1", "p6", 0.35 ),
  ("p2", "p4", 0.20 ), ("p2", "p5", 0.45 ), ("p2", "p6", 0.35 ),
  ("p3", "p4", 0.25 ), ("p3", "p5", 0.15 ), ("p3", "p6", 0.60 ),

  ("p4", "p7", 0.30 ), ("p4", "p8", 0.35 ),
  ("p5", "p7", 0.35 ), ("p5", "p8", 0.25 ),
  ("p6", "p7", 0.45 ), ("p6", "p8", 0.30 ),

  // Ovo ne kaze da je perceptron spojen na samog sebe, vec
  // se ovime postavlja vrijednost praga (w0) za zadani perceptron
  ("p1", 0.0 ), ("p2", 0.0 ), ("p3", 0.0 ),
  ("p4", 0.0 ), ("p5", 0.0 ), ("p6", 0.0 ),
  ("p7", 0.0 )
 ),
 Outputs("p7","p8"),     // Perceptroni p7 i p8 su izlazni
 Samples(                // Uzorci
  (0.05,0.02, 1.0, 0.0), // Uzorak: prva dva su ulazi, druga dva su izlazi
  (0.09,0.11, 1.0, 0.0)  // Uzorak: prva dva su ulazi, druga dva su izlazi
 ),
 LearnMethod("Backpropagation"),   // Ucimo sa backpropagationom
 Options(                  // I malo opcija
  LearnNow=true,           // Odmah pokreni postupak ucenja
  LearningRate=0.3,        // Stopa ucenja je 0.3
  InertionRate=0.0,        // Stopa tromosi je 0.0
  ProduceRaport=true,      // Zelim izvjestaj
  RaportStyle=Code,        // Obican tekst a ne HTML stranicu
  Task=LearnFirstSample,   // Zadatak: nauci prvi uzorak!
  AllowedError=0.01,       // Dopustiva pogreska je 0.01
  IterationLimit=1         // Ucenje smijes obaviti kroz maksimalno 1 iteraciju
 )
);