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
)
);