|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
SIMULAREA SOFTWARE A RETELELOR NEURONALE MLP ( II ) | ||||||
|
||||||
LUCRARE DE LABORATOR NR. 5 x2k16kp SIMULAREA SOFTWARE A RETELELOR NEURONALE MLP ( II ) 1. SCOPUL LUCRARII In aceasta lucrare se studiaza o retea neuronala multi-layer perceptron ( MLP ), antrenata pentru recunoasterea de forme, care are intrari analogice. Reteaua este antrenata cu sabloanele salvate intr-un fisier text, dupa care ea este testata cu date de intrare noi, diferite de cele pe care le-a invatat. De asemenea, se studiaza caracteristicile generale ale simulatoarelor de retele neuronale. 2. BREVIAR TEORETIC In general, o retea neuronala poate fi implementata in trei moduri distincte: -simulata soft, pe un calculator secvential -simulata soft pe un calculator paralel (un sistem cu mai multe procesoare) -implementata hard In privinta utilizarii simulatoarelor, pentru rezolvarea unei aplicatii concrete, trebuie avute in vedere urmatoarele aspecte: -Alegerea tipului de retea neuronala Majoritatea retelelor neuronale utilizate practic sunt de tipul perceptron multistrat ( MLP ) si utilizeaza algoritmul de backpropagation pentru invatare. Algoritmul de backpropagation foloseste eroarea intre iesirile actuale (rezultate prin calcul, propagand inainte valorile de pe intrari, specificate de sabloane) si iesirile asteptate (cele impuse de sablonul curent), pentru a ajusta fiecare pondere. Ajustarea ponderilor se face secvential, plecand de la ultimul strat (cel de iesire), spre primul strat (cel de intrare). -Alegerea intrarilor (numarul si tipul lor) In general alegerea intrarilor este o problema dificila. Iesirile retelei sunt mai clar impuse de problema concreta analizata, pe cand intrarile nu. O regula empirica de alegere a intrarilor este urmatoarea: "cu cat mai multe date, cu atat mai bine!" Aceasta regula se aplica atat la numarul intrarilor unei retele, ca si la numarul sabloanelor de antrenare. Intrarile suplimentare nu afecteaza acuratetea rezultatelor furnizate de retea in problema concreta rezolvata, chiar daca anumite intrari se dovedesc a fi neimportante in determinarea iesirii corecte. Totusi, toate simulatoarele au o limita superioara de neuroni pe care-i suporta, si deci si de intrari. Trebuie ca atunci cand se strang date si se definesc intrarile retelei, sa nu se furnizeze retelei 2 vectori similari de intrari, care sa dea la iesire rezultate conflictuale. Spre exemplu, o retea ce recunoaste diverse fructe, ar putea sa identifice "mar" sau "pruna" (deci conflictual), bazat pe intrarile "rotund" si "rosu". Pentru a rezolva conflictul, trebuie introduse intrari aditionale ( marime, gust, etc.). La fel de importanta ca si strangerea unui numar suficient de date de intrare este si modalitatea de prezentare a acestora, retelei. Marea majoritate a simulatoarelor existente accepta intrari ce variaza intre 0 si 1, sau intre -1 si +1. De aceea, datele reale trebuie sa fie preprocesate pentru a fi aduse in aceasta gama. Cele mai multe simulatoare realizeaza chiar ele aceasta preprocesare. Modul cum se aleg intrarile semnificative pentru retea si modul de setare al parametrilor in simulator, au drept rezultat obtinerea unei retele neuronale performante sau nu. Se pot utiliza 2 tipuri de baza pentru intrari in retele neuronale: -intrari booleene (de tipul TRUE/FALSE) Astfel, pentru o imagine alb-negru ce trebuie recunoscuta de retea, intrarile ( “0” - pixel alb, “1” - pixel negru ) sunt de tip boolean. Aceste intrari se mai cheama si intrari binare. -intrari analogice sunt cele care iau valori continue intre o valoare minima si una maxima. De exemplu, intre 0 si 1. Pentru datele de pe intrari de tip analogic, se recomanda ca gama lor de variatie sa nu fie prea mare (diferenta intre valoarea maxima asteptata si valoarea minima asteptata). In acest scop, daca o intrare analogica are o plaja mare de valori, poate fi eventual inlocuita cu o alta intrare ce foloseste diferenta intre valoarea analogica curenta si cea anterioara. In acest fel, aplicand diferenta, gama scade. Cele mai multe retele ce rezolva probleme reale au atat intrari binare cat si intrari analogice. Tipul de intrare folosit (binara sau analogica) poate afecta performantele retelei. Numarul de intrari corespunde numarului de neuroni din stratul de intrare. -Alegerea iesirilor In general, numarul iesirilor este direct impus de aplicatie. Sunt necesari un numar de neuroni de iesire egal cu numarul de clase distincte pe care trebuie sa le recunoasca reteaua. De exemplu, o retea neuronala care trebuie sa recunoasca cifrele zecimale, va avea la iesire 10 neuroni. O retea ce trebuie sa recunoasca literele mari ale alfabetului, la iesire va avea 27 de neuroni. Unele din regulile ce se aplica intrarilor, se aplica si pentru iesiri. De exemplu, o retea neuronala ce face o predictie asupra rezultatului unui joc sportiv, ofera rezultate mai bune daca la iesiri nu se asteapta valoarea absoluta a scorului, ci un rezultat de tipul invingator / egal / invins. -Alegerea numarului de strate ascunse si a numarului de neuroni din ele O alta decizie care trebuie facuta in proiectarea unei retele neuronale pentru o aplicatie concreta, este alegerea numarului de straturi ascunse si alegerea numarului de neuroni din fiecare strat ascuns. In probleme de clasificare (si nu de aproximare sau de modelare), cand la iesire reteaua recunoaste o clasa dintr-un set finit de clase posibile ( spre exemplu, recunoaste cifra 1 din 10 cifre posibile ), este suficient un singur strat ascuns. Se pot folosi eventual si mai multe straturi ascunse (desi este rar acest caz), pentru ca reteaua sa poata fi antrenata mai rapid. Nu exista o formula dupa care sa se calculeze numarul de neuroni necesari intr-un strat ascuns. Acest numar se determina experimental. De aici, si necesitatea folosirii simulatoarelor, care permit modificarea numarului de neuroni folositi. In general cel mult 2 straturi ascunse sunt suficiente pentru marea majoritate a aplicatiilor. -Antrenarea retelei Pentru a simplifica procesul de antrenare, un simulator ar trebui sa permita si antrenarea in trepte a retelei. Initial, eroarea de invatare a sabloanelor se seteaza cu o valoare mare. De exemplu, pentru o retea ce trebuie sa invete sabloanele cu o toleranta finala de 1%, pentru a micsora timpul de antrenare, putem fixa initial eroarea la 10%. In acest fel , se castiga incredere ca reteaua converge. Apoi putem micsora aceasta eroare ( in trepte ), si sa reluam antrenarea cu ponderile gasite de la treapta precedenta. Repetam, pana cand se atinge eroarea impusa de 1%. Prin aceasta metoda de antrenare in trepte, adesea retelele neuronale converg mai rapid si generalizeaza mai bine. In cazul in care dupa o alegere atenta a arhitecturii retelei, ea totusi nu converge sau generalizeaza prost, trebuie in general reanalizate sabloanele de antrenare folosite, modificandu-le. Se poate insa reantrena reteaua cu aceleasi sabloane, dar prezentate in alta ordine. Sau se poate antrena reteaua in modul "batch": ajustarea ponderilor nu se mai face dupa fiecare sablon, ci, dupa prezentarea intregului set de sabloane. De asemenea, atunci cand sunt probleme de convergenta sau de generalizare, se poate incerca folosirea mai multor retele neuronale interconectate, in loc de una singura. 3. DESFASURAREA LUCRARII Se va edita si apoi executa programul descris in continuare, care simuleaza
o retea neuronala cu intrari analogice. Listingul programului import java.util.*; import java.io.*; class RNLiniiA static final int NR_NEURONI_IN=10; static final int NR_NEURONI_OUT=5; static final int NR_NEURONI_HIDDEN=10; static final int NR_TOTAL_SABLOANE=3*NR_NEURONI_OUT; static final double EROARE_IMPUSA=0.01; static final int NR_MAXIM_EPOCI=20000; static double sabloaneInaiai= new doubleaNR_TOTAL_SABLOANEiaNR_NEURONI_INi; static double sabloaneOutaiai= new doubleaNR_TOTAL_SABLOANEiaNR_NEURONI_OUTi; static double w1aiai= new doubleaNR_NEURONI_HIDDENiaNR_NEURONI_INi; static double w2aiai= new doubleaNR_NEURONI_OUTiaNR_NEURONI_HIDDENi; public static void main(String argsai) private static void initPonderi() private static void incarcaSabloane() //Nu exista Double.parseDouble() in JDK 1.1.6 double x=Double.valueOf(st.nextToken()).doubleValue(); //Double.valueOf(string) scoate un obiect Double. //Extragem tipul primitiv double din Double, // cu: Double.doubleValue(); //Cea mai mare valoare din fisierul de sabloane: 10.0 //Cea mai mica valoare din fisierul de sabloane: 0.0 x=(x-0.0)/(10.0-0.0);//scalare in plaja 0.0, 1.0 sabloaneInaexiaii=x;S //Citim linia cu iesirile sablonului ex: linieCrt=fpBuf.readLine(); if(linieCrt==null)A System.out.println("Structura fisierului de sabloane nu este corecta!"); System.exit(1);S //Citim valorile din sablon, pt. fiecare neuron de iesire: st=new StringTokenizer(linieCrt); for(int i=0;i<NR_NEURONI_OUT;i++) sabloaneOutaexiaii= Double.valueOf(st.nextToken()).doubleValue(); S//for ex fpBuf.close(); Scatch(IOException e)A System.out.println(e); System.exit(1);S S private static boolean antrenare() private static void calculIesiriNeuroni(double yHiddenai, double yOutai,int ex) for(i=0;i<NR_NEURONI_OUT;i++)A xTotal_i=0; for(j=0;j<NR_NEURONI_HIDDEN;j++) xTotal_i=xTotal_i+yHiddenaji*w2aiiaji; yOutaii=1/(1+Math.exp(-xTotal_i)); private static void modificaPonderi(double yOutai, double yHiddenai,int ex) for(i=0;i<NR_NEURONI_HIDDEN;i++)A sumaPonderataDeltaFii=0; for(j=0;j<NR_NEURONI_OUT;j++) sumaPonderataDeltaFii+=w2ajiaii*deltaOutaji; deltaHiddenaii=sumaPonderataDeltaFii* private static void afisareExtremePonderi() private static void testare() System.out.println("Dati cele 10 valori pozitive ale curbei:"); System.out.println("Dreapta, panta poz. : "+yOuta1i); System.out.println("Dreapta, panta neg. : "+yOuta2i); System.out.println("Dreapta, concav. poz. : "+yOuta3i); System.out.println("Dreapta, concav. neg. : "+yOuta4i); S//testare private static void salvare() private static void incarcaPonderi() 2 2 2 2 2 2 2 2 2 2 Tema |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|