1.

- RETELE NEURONALE ARTIFICIALE (RNA) RNA sunt sisteme de procesare a informatiei, compuse din unitati simple de procesare, interconectate intre ele si care actioneaza in paralel. Aceste elemente sunt inspirate din sistemele nervoase biologice. La fel ca in natura, functia retelei e determinata de legaturile dintre elemente. Ponderile legaturilor dintre unitati sunt cele care memoreaza informatia invatata de retea . Reteaua se instruieste prin ajustarea acestor ponderi , conform unui algoritm . Caracteristicile RNA : - reprezentarea distribuita a informatiei : informatia din retea este stocata in mod distribuit ( in structura de ponderi ), ceea ce face ca efectul unei anumite intrari asupra iesirii sa depinda de toate ponderile din retea . - capacitatea de generalizare in cazul unor situatii necontinute in datele de instruire . Aceasta caracteristica depinde de numarul de ponderi, adica de dimensiunea retelei . Se constata ca cresterea dimensiunii retelei duce la o buna memorare a datelor de instruire , dar scad performantele asupra datelor de testare , ceea ce inseamna ca RNA a pierdut capacitatea de generalizare . Stabilirea numarului optim de neuroni din stratul ascuns , care este o etapa cheie in proiectarea unei RNA , se poate face alegand valoarea de la care incepe sa descreasca performanta RNA pe setul de testare. - toleranta la zgomot : RNA pot fi instruite , chiar daca datele sunt afectate de zgomot , diminuandu-se - evident - performanta ei . - rezistenta la distrugerea partiala : datorita reprezentarii distribuite a informatiei , RNA poate opera si in cazul distrugerii unei mici parti a ei . - rapiditate in calcul : RNA consuma mult timp pentru instruire , dar odata antrenate vor calcula rapid iesirea retelei pentru o anumita intrare . Putem antrena o RNA sa realizeze o anumita functie, prin ajustarea valorilor conexiunilor (ponderilor) dintre elemente. De regula RNA sunt ajustate (antrenate), astfel încât un anumit semnal la intrare sa implice o anume iesire (tinta). O asemenea situatie este prezentata in fig. 1.1. Reteaua este ajustata pe baza compararii raspunsului cu tinta, pâna ce iesirea retelei se potriveste tintei. Pentru a antrena o retea, in aceasta instruire supervizata, se utilizeaza mai multe perechi intrare/tinta.

Fig. 1.1 1.1- NEURONUL CU VECTOR DE INTRARE Un neuron cu un vector de intrare avand R elemente este prezentat in fig. 1.2. Intrarile individuale p1, p2, . . . , pR sunt înmultite cu ponderile w1,1 , w1,2 , . . . , w1,R si valorile ponderate se insumeaza. Suma se poate nota Wp, adica produsul scalar al matricei W (cu o linie) si vectorul p. Neuronul are deplasarea b, care se aduna cu intrarile ponderate, rezultand argumentul n al functiei de transfer f : w1,1 p1 + w2,1 p2 + . . . + w1,R pR +b = n . (1.1) Aceasta expresie poate fi scrisa în codul MATLAB: n = W*p + b ; a = f ( n ) . (1.2) O notatie abreviata pentru neuronul din fig. 1.2 se prezinta in fig. 1.3, in care:

Fig. 1.2 - R este numarul elementelor din vectorul de intrare; - vectorul de intrare p este reprezentat de bara groasa verticala din stânga, dimensiunile lui p sunt indicate sub simbolul p (R × 1); - o constanta 1 intra în neuron si multiplica deplasarea b;

Fig. 1.3 - intrarea n în functia de transfer f este data de (1.2); - a este iesirea neuronului. Fig. 1.2 defineste un strat (nivel) al unei retele. Un strat cuprinde combinarea ponderilor, operatiile de inmultire si insumare (realizate aici ca produsul scalar Wp), deplasarea b si functia de transfer f. Blocul intrarilor (vectorul p) nu este inclus în asa numitul strat. 1.2- FUNCTII DE TRANSFER Neuronul biologic se activeaza (da un semnal la iesire) numai daca semnalul de intrare depaseste un anumit prag. In RNA acest efect este simulat aplicand sumei ponderate a intrarilor (n) o functie de transfer (activare) f, pt. a obtine semnalul a la iesire. Patru dintre cele mai utilizate functii de transfer se prezinta mai jos. a)- Functia treapta (fig. 1.4)

Fig. 1.4 Pentru a realiza functia treapta, Matlab are functia hardlim. b)- Functia de transfer liniara (purelin) este in fig. 1.5.

1 ] .ARHITECTURA RNA Doi sau mai multi neuroni se pot combina într-un strat. 1.6. iar raspunsul este în domeniul de la 0 la 1.1. Fig. 1. 1. R intrari si S neuroni. 1.b): F ( x ) = ex − 1 : R → [ -1 .Fig. este conectat la intrarea fiecarui neuron. 1. iar o RNA poate contine unul sau mai multe straturi de acest fel.7 se arata o RNA avand un singur strat. Comportarea unui neuron la diferite functii de transfer se poate vedea in programul demonstrativ: >>nnd2n2 En.3. k >0 .a.6. Aceste simboluri vor înlocui simbolul general f în schemele RNA pentru a arata functia particulara de transfer care este folosita. Intrarea poate avea orice valoare între plus si minus infinit. ex +1 Fig. 1. 1. fiecare element din vectorul intrarilor p. 1 + e− k x se prezinta in fig. 1.Functia log-sigmoid: 1 F( x ) = .UN STRAT DE NEURONI In fig.b In patratul din dreapta fiecarui grafic se prezinta simbolul asociat functiei de transfer.6.5 c).3. prin matricea ponderilor W: .6.a O alta varianta este functia tan-sigmoid (fig. În aceasta retea.

trebuie sa facem diferenta între matricea ponderilor legaturilor la intrari si matricele cu ponderile conexiunilor între straturi. Ca urmare. a carui expresie se da în partea de jos a figurii. vom folosi indici la exponent (superscript) pentru a identifica sursa (indicele . iar al doilea indice – elementul din vectorul intrarilor caruia i se aplica acea pondere. 1. Toate marimile n(i) formeaza un vector n.8 se prezinta (in notatie abreviata) reteaua din fig.7.INTRARI SI STRATURI De regula.8 1.3. 1. indicii lui w1. In fig.2. Fig. o RNA are mai multe straturi. 2 arata sensul semnalului: de la al doilea element al vectorului de intrare. 1.7 Astfel. iar matricele cu ponderile conexiunilor la iesirile unui strat matricea ponderilor stratului (notata LW). Neuronul i are un sumator Σ care aduna intrarile sale ponderate si deplasarea. 1. Mai departe. Iesirile din stratul de neuroni formeaza un vector a. rezultand iesirea scalara n(i).Se observa ca primul indice al unui element din matricea W indica carui neuron ii este atribuita ponderea. catre primul neuron. Vom numi matricea ponderilor legaturilor la intrari matricea ponderilor intrarii (notata IW). cu S elemente. Fig.

Stratul liniar de iesire permite retelei sa produca valori in afara domeniului de la -1 la +1. notata cu y. pentru fiecare strat din RNA. Retelele multi-strat sunt foarte eficiente. cu S1 intrari. daca se doreste restrictionarea iesirilor unei retele (de ex. intre 0 si 1). notam numarul stratului ca superscript la variabila respectiva.10 are un strat de iesire (stratul 3) si doua straturi ascunse (straturile 1 si 2).. vectorii de iesire. Intrarea in stratul 2 este a1. permit retelei sa invete relatii liniare si neliniare intre vectorii de intrare si de iesire.9 Se vede ca am notat cu IW “matricea ponderilor intrarilor”. poate fi antrenat sa aproximeze orice functie (cu un numar finit de discontinuitati). 1. De exemplu. stratul urmator. elemente ale stratului 1 au superscriptul 1. Fig. etc. stratul 2 poate fi considerat ca o retea cu un singur strat. intrarea in functia de transfer se scrie: În urmatorul capitol vom folosi si “matricea ponderilor stratului” LW.in notatie abreviata – in fig. etc.secund) si destinatia (indicele prim) pentru ponderile si alte elemente ale retelei. 1. De asemenea. cu functii de transfer neliniare. un vector al deplasarilor b si un vector de iesire a.9. S2 neuroni în al doilea strat.11 .8 in forma din fig.1 Ca urmare. . 1. Vom folosi aceasta notatie pentru a preciza raspunsul retelelor cu mai multe straturi. 1. 1. Straturile au roluri diferite: . urmate de un strat cu neuroni liniari. Retelele cu “transmitere inainte” au de obicei unul sau mai multe straturi ascunse cu neuroni sigmoidali. Iesirea din al treilea strat (a3) este iesirea retelei. O intrare constanta 1 este atasata la deplasarea fiecarui neuron.. 1. 1. atunci stratul de iesire trebuie sa utilizeze o functie de transfer sigmoidala (cum ar fi logsig). S2 neuroni si o matrice W2 a ponderilor (cu dimensiunile S2 × S1).10 are R1 intrari. cum se vede la reteaua cu trei straturi din figura 1. Se observa ca iesirile din fiecare strat intermediar reprezinta intrarile pt.stratul care produce iesirea retelei este numit strat de iesire. Reteaua din fig.10 se prezinta . Aceasta abordare se poate aplica oricarui strat din retea. . fiecare strat avand o matrice a ponderilor W. RNA-ua din fig. Astfel.10 si în ecuatiile din partea de jos. pentru a arata ca sunt asociate primului strat. unde primul strat este sigmoid si al doilea strat este liniar. Reteaua din figura 1. având ca sursa 1 (indicele secund) si destinatia 1 (indice prim). am refacut fig. Pentru a ilustra acest lucru. iar iesirea este a2. Mai multe straturi de neuroni.3. S1 neuroni în primul strat. Pe de alta parte.celelalte straturi se numesc straturi ascunse. Pentru a distinge matricile ponderilor. Notatia in codul MATLAB pentru o RNA numita net este: 1. o retea cu doua straturi.STRATURI MULTIPLE DE NEURONI O RNA poate avea mai multe straturi.3.

10 .Fig. 1.

11 .Fig. 1.

1. Toate straturile au deplasari. Comanda newff initializeaza automat ponderile. avand N straturi. pentru cele Nl straturi. adica numarul de neuroni. Antrenarea se face cu functia de antrenare specificata. Functia newff creeaza o astfel de retea. dar cu toate ponderile si deplasarile initializate.blf.BLF. Prima intrare PR este o matrice (R x 2) cu valorile minime si maxime pentru fiecare dintre cele R elemente ale vectorului de intrare. Aceasta functie considera obiectul “retea” ca intrare si returneaza acelasi obiect. TRAINGD. precum TRAINLM. LOGSIG.TFNl}. ale celor R elemente de la intrare. Functia de antrenarea este traingd (care este descrisa intr-un capitol ulterior). care actualizeaza ponderile cu functia de instruire specificata. etc.BTF. TFi – functia de transfer a stratului i.s.5. Deci aceasta functie necesita patru intrari si returneaza obiectul “retea”.CREAREA UNEI RETELE (newff) Prima etapa in antrenarea unei retele cu transmitere inainte este crearea obiectului “retea”.PF) in care: PR . implicita = 'learngdm'.pf) NEWFF creaza o retea cu transmitere inainte si retro-propagare. urmatoarea comanda creeaza o retea cu doua straturi. Iata cum este initializata (sau reinitializata) o retea: net = init(net).SIMULAREA (sim) Functia sim simuleaza o retea. 1..SNl]. Ultima intrare contine numele functiei de antrenare folosita. iar functia de transfer din stratul de iesire este liniara. La fiecare strat urmator.1.btf. Si – dimensiunea stratului i. TRAINRP.in plus .functia de instruire backprop a ponderilor/deplasarilor retelei. sau PURELIN. precum TANSIG. functia de intrare neta NETSUM si functiile de transfer specificate.PF) Descriere: NEWFF(PR.initializeaza ponderile si deplasarile retelei. PF – functia de performanta. valorile pentru al doilea element al vectorului de intrare variaza intre 0 si 5. Ponderile si deplasarile se initializeaza cu INITNW.BLF. Adaptarea se face cu ADAPTWB.. Functiile de transfer TFi pot fi orice functie de transfer diferentiabila. Performanta se masoara cu functia de performanta specificata. Aceasta comanda creeaza obiectul “retea” si . trebuiesc initializate ponderile si deplasarile. Primul strat are ponderile legate de intrare.{TF1 TF2.INITIALIZAREA PONDERILOR (init) Inaintea antrenarii unei RNA.{TF1 TF2. BTF – functia de antrenare a retelei... Functia de antrenare BTF poate fi oricare dintre functiile de antrenare backprop. A treia intrare este formata dintr-o serie de celule care contin numele functiilor de transfer ce vor fi folosite in fiecare strat.. implicita = 'tansig'. BLF . Ultimul strat reprezinta iesirea din retea. Syntaxa: net = newff(PR.SNl]. function net = newff(pr.[S1 S2. . Valorile pentru primul element al vectorului de intrare variaza intre -1 si 2. Functia de transfer din primul strat este tansigmoidala. implicita = 'trainlm'.. Algoritmul: Retele cu transmitere inainte consista din Nl straturi in care se utilizeaza DOTPROD (produsul scalar) al functiilor pondere.tf.matrice Rx2 cu valorile min. A doua intrare este un sir (matrice) care contine dimensiunile fiecarui strat.4. ponderile provin din stratul anterior. Aceasta se poate face cu comanda init. Sim ia vectorul de intrare in retea p si obiectul “retea” net si returneaza iesirea retelei a. dar s-ar putea sa vrem sa le reinitializam. Sunt trei neuroni in primul strat si un neuron in al doilea strat (de iesire).. avand un vector de intrare cu doua elemente. si max.. TRAINBFG.[S1 S2.4. 1.BTF. implicita = 'mse' si returneaza o retea cu transmitere inainte si retro-propagare. acum reteaua este pregatita pentru a fi antrenata.TFNl}. De exemplu.

implicit = zero. Procesul de antrenare necesita un set de valori privind comportarea retelei: intrarea in retea p si tinta (iesirea) t.ANTRENAREA Dupa ce ponderile retelei si deplasarile au fost initializate.11): LW3. in care toti vectorii de intrare sunt plasati intr-o matrice. Mai jos. 3. Aceasta este modul grupat de simulare.performFcn. b).Af] = SIM(net. sim este apelata pentru a calcula iesirile pentru un set concurential cu trei vectori de intrare.1 . In timpul antrenarii.Decalajele finale ale stratului.Pf.Pf.With the relations like (1. P – Intrarile in retea. Pf . b3 . 2 o ). Pi – Decalajele initiale ale intrarii. 1. Consideram eroarea patratica dintre iesirea retelei si tinta impusa (fig.1 .P. b2 .Pi. reteaua este pregatita pentru a fi antrenata. LW2. j =1 s3 unde s3 este numarul neuronilor din stratul de iesire. p and t being the input . a32.Decalajele finale ale intrarii. 1. b) The network weights resulted from the learning are those for which the error is minimum . . Ai. . a3s3) se numeste suprafata de eroare. Ai .6.Decalajele initiale ale stratului. Functia implicita de performanta pentru retelele cu transmitere inainte este eroarea medie patratica mse – dintre iesirea retelei a si tinta t. p + b1) a 2 = f 2 (LW2.3) there are adjusted the weights and the shifts în order (fig. . si returneaza: Y – Iesirile din retea. IW1.Af] = sim(net.SIM simuleaza o retea neuronala. respectively output vectors from the learning set . Pf si Af sunt optionale si se vor folosi numai pentru retele care au intrarea sau vre-un strat decalat. Iata cum putem folosi sim pentru a simula reteaua pe care am creat-o mai sus pentru un singur vector de intrare: Iesirea ar putea fi diferita.Pi. y). E = f (a31.P.Backward .1 . deci E= f (w.Ai) in care: NET – Reteaua. .3) ∂E k k −1 bi = bi − α ( k ) k ∂ bi where α ( k ) represent the learning rate .Ai) Descriere: [Y. a2 + b3) . in which a 1 = f 1 (IW1. The learning algorithm for one only step has got 2 stages : 1o ).2 .2 . ∂ wi j (1.Forward . dar a = f (w.10): E = ∑ [ a 3( j ) − t( j ) ] 2 . b 1. Syntaxa: [Y. in functie de starea generatorului de numere aleatoare cand reteaua a fost initializata.1 . decat prezentarea vectorilor pe rand. ponderile retelei si deplasarile sunt ajustate iterativ pentru a minimiza functia de performanta a retelei net. a1 + b2) a 3 = f 3 (LW3. Observatie: Argumentele Pi.It is determined the error E. Af . The weights and shifts adjusting is made by using the gradient with descent step method : ∂E wikj = wikj−1 − α ( k ) . . implicit = zero. prin analogie cu E = f(x. Acest lucru este mult mai eficient.

Gradientul se determina folosind o tehnica numita propagare inversa.. care inseamna efectuarea calculelor in sens invers prin retea. gradientul este calculat si ponderile sunt actualizate dupa ce fiecare intrare este aplicata retelei.ANTRENAREA GRUPATA (train). pana la atingerea minimului. deci pe directia celei mai rapide descresteri. O imagine a modului in care actioneaza aceasta metoda – pentru o functie de doua variabile se arata in figura 1. este descris mai jos. adica in directia gradientului negativ.6. s. adica in sensul dat de -∇ F. In modul incremental. g k este gradientul curent.m. actualizeaza ponderile retelei si deplasarile in directia in care functia de performanta scade cel mai rapid. ] . Reamintim metoda gradientului negativ: Pentru functia F(x) = F(x1. Avansul pe aceasta directie se va face atata timp cat valoarea functiei scade. gradientul este ∂F ∂F G = grad F = ∇ F = [ . In modul grupat. In modul grupat. 1. toate intrarile sunt aplicate retelei inainte ca ponderile sa fie actualizate. ponderile si deplasarile sunt actualizate numai dupa ce intregul set de antrenare a fost aplicat retelei. O iteratie a acestui algoritm poate fi scrisa astfel: unde x k este un vector cu ponderile si deplasarile curente. Daca se doreste antrenarea retelei folosind aceasta . 1.. A). Algoritmul de antrenare prin propagare inversa.a. dupa care se va avansa pe noua orientare a gradientului.d. iar α k este rata de instruire.Urmeaza descrierea unor algoritmi de antrenare pentru retelele cu transmitere inainte. xn). .12. acest vector indicand directia celei mai mari cresteri.ANTRENAREA GRUPATA CU GRADIENT DESCENDENT (traingd) Functia pentru aceasta antrenare este traingd. A1).. in care ponderile variaza in directia gradientului negativ.1.…. Gradientii calculati la fiecare pas de antrenare sunt cumulati pentru a determina variatiile ponderilor si deplasarilor. Toti acesti algoritmi utilizeaza gradientul functiei de performanta E pentru a determina modul de ajustare a ponderilor cu scopul de a minimiza performanta.ALGORITMUL PROPAGARII INVERSE Cea mai simpla implementare a instruirii prin propagare inversa. . Fig. ∂ x1 ∂xn Dupa fecare punct nou determinat se ia directia de cautare in sens contrar gradientului.12 Exista doua modalitati in care poate fi implementat algoritmul gradientului descendent: modul incremental si modul grupat.

goal. Acest algoritm este ilustrat in programul demo: >>nnd12sd1 En . sau daca marimea gradientului este mai mica decat mingrad sau daca timpul de antrenare este mai mare decat time secunde. In cazul antrenarii grupate. Exista 7 parametri de antrenare asociati cu traingd: epochs.ANTRENAREA GRUPATA CU GRADIENT DESCENDENT SI MOMENTUM (traingdm) In afara de traingd. fiecare iteratie show a algoritmului. a determina domeniul de variatie al intrarilor: pr = minmax (p). Cresterea ratei de instruire duce la marirea pasului. Antrenarea se opreste daca numarul iteratiilor depaseste epochs. atunci pr = (R x 2) matrix of min. In aceasta etapa avem posibilitatea sa modificam unii dintre parametrii impliciti de antrenare: Daca vrem sa folosim parametrii impliciti de antrenare.3)) se inmulteste cu negativul gradientului pentru a determina modificarile ponderilor si deplasarilor. values for each row of p. Daca rata de instruire este prea mica. Acum reteaua pate fi antrenata. comenzile de mai sus nu sunt necesare. Secventa urmatoare creaza un set de antrenare cu intrarile p si tintele t. toti vectorii de intrare sunt pusi intr-o singura matrice. sau daca functia de performanta (mse) scade sub goal. min_grad. Rata de instruire lr (notata cu α in relatia (1. mai exista un algoritm prin grupare pentru retelele cu transmitere inainte. Daca rata de instruire este prea mare algoritmul devine instabil. atunci stadiul antrenarii nu este vizibil. . max_fail. Stadiul antrenarii apare pe ecran pt. and max. pentru a se obtine raspunsul ei la intrarile din setul de antrenare. Daca show este setat pe NaN. in care daca p = (R x Q) matrix. A2). Inregistrarea antrenarii tr contine informatii despre etapa in care se afla antrenarea. show.modalitate. Exista numai o singura functie de antrenare asociata unei retele date. algoritmul necesita mult timp pentru a deveni convergent. si lr. Acum reteaua antrenata poate fi simulata. mai intai trebuie setata functia trainFcn a retelei la traingd si apoi apelata functia train. time. Acum creem reteaua: Folosim functia minmax pt.

lr si max_perf_inc pot fi alesi. Marimea ultimei modificari a ponderii este mediata de o constanta momentum mc. Momentum inseamna sa luam variatiile ponderilor egale cu suma unei parti a ultimei variatii a ponderii. vom recrea reteaua precedenta si o vom reantrena folosind gradientul descendent cu momentum. care poate fi orice numar intre 0 si 1. Alegerea aleatorie a ponderilor si a deplasarilor initiale va afecta performanta algoritmului. cu exceptia faptului ca parametrii de instruire mc. o retea se poate bloca intr-un minim local.care duce deseori la o convergenta mai rapida – traingdm (descrestere abrupta cu momentum). cu noua variatie furnizata de regula propagarii inverse. momentum permite retelei sa ignore abaterile minore din suprafata de eroare. In urmatoarea secventa. Functia traingdm este utilizata folosind aceleasi etape ca si la functia traingd.04). . noua modificare a ponderii se ia egala cu ultima variatie. Gradientul este calculat prin adunarea gradientilor inregistrati la fiecare pereche de antrenare. cu mai mult decat un raport predefinit max_perf_inc (de regula = 1. Acest algoritm este ilustrat in programul demo: >>nnd12mo En . Daca am reinitializa si reantrena din nou folosind traingdm. Daca constanta este egala cu 1. iar ponderile si deplasarile sunt doar reactualizate dupa ce toate perechile de antrenare au fost prezentate. Daca dorim sa comparam performanta unor algoritmi diferiti. fiecare trebuie testat folosind mai multe seturi diferite de ponderi si deplasari initiale. ca mai sus) vom obtine o eroare medie patratica diferita. Facem observatia ca daca se reinitializeaza ponderile si deplasarile inainte de antrenare (apeland newff. Atunci cand constanta momentum este 0.04. Daca noua valoare a functiei de performanta. Fara momentum. adica MSEnou / MSEvechi >1. a reinitializa ponderile. la o iteratie data. “Momentum” permite retelei sa raspunda nu numai la gradientul local. Actionand ca un filtru trece-jos. gradientul fiind ignorat. Parametrii de antrenare pentru traingdm sunt aceeasi ca pentru traingd. reteaua poate ocoli asemenea minime. noile ponderi si deplasari sunt ignorate. dar si evolutiilor recente in suprafata de eroare. in comparatie cu cea obtinuta folosind traingd. Antrenarea grupata cu gradient descendent cu momentum este apelata folosind functia de antrenare traingdm. iar coeficientul momentum mc este setat la zero. depaseste functia de performanta la iteratia precedenta. vom obtine iar o alta eroare medie patratica. Este indicat sa se utilizeze net = init (net) pt. variatia ponderii provine numai din gradient. dar se adauga factorul momentum mc si cresterea maxima a performantei max_perf_inc. Avand momentum. decat sa se recreeze intreaga retea cu newff.

1. Performanta algoritmului cu descrestere rapida poate fi imbunatatita daca permitem ca rata de instruire sa se modifice in timpul antrenarii. Cand rata de instruire e prea mare pentru a garanta micsorarea erorii.7. inainte de antrenare. 1. lr_dec si lr_inc. nu este un lucru practic. Toti algoritmii din acest capitol opereaza in modul grupat si sunt apelati cu comanda train. pt. traingdx) In antrenarea standard cu descrestere rapida. daca noua eroare depaseste eroarea precedenta cu mai mult de un raport prestabilit max_perf_inc (de obicei = 1.04). pe care am descris-o mai sus.RATA VARIABILA DE INSTRUIRE (traingda. In acest capitol vom discuta cativa algoritmi de inalta performanta care pot converge de la zece pana la o suta de ori mai rapid decat algoritmii prezentati anterior. se v-a renunta la noile ponderi si deplasari si rata de instruire este diminuata (prin inmultirea cu lr_dec = 0. care se apeleaza ca si traingd. pana se reia instruirea stabila. Ca si la “momentum”. O modificare euristica este tehnica momentum. exceptie facand parametrii aditionali max_perf_inc.de fapt . Daca rata este prea mare. etc. ca . ea va fi redusa. rata de instruire (α. din capitolul anterior. Daca rata este prea mica. traincgb. . in timp ce mentine si instruirea stabila. dar numai in masura in care reteau poate fi instruita fara cresterea erorii. trainscg). se pastreaza noile ponderi. Iata cum se antreneaza reteaua cu doua nivele. traincgp. Prima categorie foloseste tehnici euristice. rata de instruire se mareste (inmultind-o cu lr_inc = 1. Atunci cand o rata de instruire mai mare se poate folosi intr-o instruire stabila. O rata de instruire adaptiva va incerca sa mentina marimea pasului de instruire cat de mare posibila. Daca noua eroare este mai mica decat eroarea precedenta. Stabilirea valorii optime a ratei de instruire. se obtine o rata de instruire cuasi-optima pentru conditiile locale. quasi-Newton (trainbfg. lr) este constanta. algoritmul poate oscila si devine instabil. si Levenberg-Marquardt (trainlm).05).7). Acesti algoritmi rapizi se impart in doua categorii. Performanta algoritmului este foarte senzitiva la aceasta rata. problemele practice. algoritmului ii v-a lua prea mult timp pentru a converge. La fiecare epoca se calculeaza noile ponderi si deplasari folosind rata de instruire curenta. rata de instruire este marita. Apoi sunt calculate noile iesiri si erori. Acest procedeu mareste rata de instruire. Mai intai se calculeaza iesirea initiala a retelei si eroarea. care au fost elaborate pe baza analizei performantei algoritmului standard de gradient descendent. In caz contrar. Astfel.rata de instruire optima variaza in timpul antrenarii. Antrenarea prin propagare inversa cu rata de instruire adaptiva se face cu functia traingda. Adaptarea ratei de instruire necesita unele modificari in procedura de antrenare folosita de traingd.1. trainoss).ANTRENAREA MAI RAPIDA Algoritmii de mai sus sunt deseori prea lenti pt. In aceasta categorie se prezinta doua tehnici mai euristice: propagarea inversa cu rata de instruire variabila (traingda) si propagarea inversa flexibila (trainrp). A doua categorie de algoritmi rapizi foloseste tehnici standard de optimizare numerica: gradientul conjugat (traincgf.7.

Parametrii de antrenare pentru trainrp sunt epochs. min-grad. delt-inc. Rprop este in general mult mai rapid decat algoritmul standard cu gradient descendent si cere doar o mica marire a necesarului de memorie. cand se foloseste “coborarea cea mai rapida” la antrenarea unei retele multi-strat cu functii sigmoidale. chiar cand acestea sunt departe de valorile lor optimale. variatia ponderii va fi redusa. ultimii doi reprezinta marimea pasului initial si respectiv. Se foloseste numai semnul derivatei pentru a afla directia actualizarii ponderii. Marimea variatiei ponderii se determina cu o valoare de actualizare separata. goal.Functia traingdx combina rata de instruire adaptiva si antrenarea cu momentum. atunci marimea variatiei ponderii se va amplifica. provoaca mici modificari ale valorilor ponderilor si deplasarilor. Daca ponderea continua sa se modifice in aceeasi directie pe parcursul mai multor iteratii.functii de transfer sigmoidale. Performanta lui “Rprop” nu este influentata mult de setarile parametrilor de antrenare. Am redus parametrul show fata de valoarea anterioara. In exemplul de mai jos. atunci valoarea actualizata ramane aceeasi.PROPAGAREA INVERSA FLEXIBILA Retelele multi-strat folosesc de obicei . Valoarea actualizarii pentru fiecare pondere si deplasare se amplifica cu un factor delt-inc daca derivata functiei de performanta in raport cu acea pondere are acelasi semn in doua iteratii successive. show. time. delta0. ceea ce este echivalent cu stocarea gradientului. 1. Acest algoritm este ilustrat in programul demo: >>nnd12vl En . pentru ca in general “Rprop” converge mult mai rapid decat algoritmii anteriori.in straturile ascunse . Este nevoie sa stocam valorile actualizate pentru fiecare pondere si deplasare. Se apeleaza ca si traingda. Am discutat in sectiunea anterioara primii opt parametrii. cand intrarea este mare. . cu exceptia faptului ca are coeficientul momentum mc ca un parametru in plus. Aceasta duce la aparitia unei probleme. anume ca gradientul fiind foarte mic. marimea pasului maxim. In urmatoarea secventa vom recrea reteaua anterioara si o vom antrena folosind algoritmul “Rprop”. Aceste functii sunt numite si functii de “comprimare”.2. marimea derivatei nu are nici un efect asupra actualizarii ponderii. Valoarea actualizata se micsoreaza cu factorul delt-dec cand derivata in raport cu acea pondere isi schimba semnul fata de iteratia anterioara. delt-dec. am lasat majoritatea parametrilor la valorile lor implicite. deltamax. Cand ponderile oscileaza.7. pentru ca ele comprima un domeniu infinit de la intrare intr-un domeniu finit la iesire . Functiile sigmoidale sunt caracterizate de faptul ca panta lor trebuie sa fie zero. maxfail. Scopul algoritmului de antrenare prin propagare inversa flexibila (Rprop) este acela de a elimina aceste efectele nedorite cauzate de derivatele partiale. Daca derivata are valoarea zero.

dar acest lucru poate fi modificat de catre utilizator. max-fail. ea poate fi oricare dintre functiile care vor fi descrise in continuare (sau o functie introdusa de utilizator).3. desi gasirea optimului poate varia in functie de aplicatia specifica. alpha. bmax. In aceasta sectiune. A). gama. Algoritmii cu gradient conjugat realizeaza o cautare in lungul directiilor “conjugate”. minstep.7. vom prezenta patru variante diferite ale algoritmilor cu gradient conjugat.ACTUALIZAREA FLETCHER-REEVES (traincgf) Toti algoritmii cu gradient conjugat pornesc prin a cauta in directia celei mai abrupte descresteri (gradientul negativ). La majoritatea algoritmilor cu gradient conjugat. Procedura tipica de determinare a noii directii de cautare este de a combina noua directie a celei mai abrupte descresteri cu directia de cautare anterioara: . Facem observatia ca. Anumite functii de cautare sunt cele mai potrivite anumitor functii de antrenare. Parametrii lui traincgf sunt epochs. O functie de cautare implicita potrivita este repartizata fiecarei functii de antrenare. delta. pentru a determina distanta optima de miscare de-a lungul directiei curente de cautare: . In majoritatea algoritmilor discutati pana acum se foloseste o rata de instruire pentru a determina marimea actualizarii ponderii (dimensiunea pasului). astfel incat ea este “conjugate” directiilor de cautare anterioare. desi functia descreste cel mai rapid in lungul gradientului negativ. In acest exemplu va fi folosita rutina implicita de cautare pe linie srchcha. Restul parametrilor sunt asociati cu rutinele specifice de cautare pe linie si vor fi descrise mai tarziu. Versiunile diferite ale gradientului conjugat se disting prin modul in care este calculata constanta βk. scal-tol. beta. Primii sase parametrii sunt ca mai sus. time. low-lim. maxstep. procedura este urmatoarea: . la prima iteratie: po = -go. marimea pasului este ajustata la fiecare iteratie. Traincgf converge in general in mai putine iteratii decat trainrp (desi sunt necesare mai multe calcule pentru fiecare iteratie).ALGORITMII CU GRADIENT CONJUGAT Algoritmul de baza al propagarii inverse ajusteaza ponderile in directia celei mai abrupte descresteri (care este gradientul negativ). In urmatorul program vom reinitializa reteaua de mai sus si o vom reantrena folosind versiunea Fletcher-Reeves a algoritmului gradientului conjugat. Parametrul srchFcn este denumirea functiei de cautare pe linie. min-grad. care duce – in general la o convergenta mai rapida decat directiile celor mai abrupte descresteri. Aceasta este directia in care functia de performanta descreste cel mai rapid. aceasta nu duce neaparat la cea mai rapida convergenta. show. Acesta este raportul intre patratul normei gradientului curent si patratul normei gradientului precedent. .1. Oricare dintre aceste functii poate fi folosita cu functiile de antrenare care sunt descrise in restul capitolului. Pentru actualizarea Fletcher-Reeves. goal. srchFcn. Se face o cautare in lungul directiei gradientului conjugat. Apoi se realizeaza o linie de cautare. pentru a determina marimea pasului care minimizeaza functia de performanta in lungul acelei linii. Exista cinci functii de cautare incluse in toolbox. Apoi se determina urmatoarea directie de cautare. up-lim.

Acest algoritm este ilustrat in programul demo: >>nnd12eg En . B). Rutina implicita de cautare pe linie srchcha v-a fi folosita si in acest exemplu. cu toate ca rezultatele vor varia de le o problema la alta. divizat cu patratul normei gradientului precedent. Parametrii show si epochs sunt stabiliti la aceeasi valoare pe care le-au avut pentru traincgf.De obicei algoritmii cu gradient conjugat sunt mult mai rapizi decat “propagarea inversa cu o rata variabila de instruire” si sunt uneori mai rapizi decat trainrp.ACTUALIZAREA POLAK-RIBIÉRE (traincgp) Polak si Ribiere au propus o alta varianta a algoritmului cu gradient conjugat. Ca si in cazul Fletcher-Reeves. directia de cautare la fiecare iteratie se determina cu: Pentru actualizarea Polak-Ribiere. . constanta βk se calculeaza cu: Acesta este produsul scalar al variatiilor anterioare in gradient cu gradientul current. Parametrii lui traincgp sunt aceeasi ca si pentru traincgf. deci sunt deseori o alegere mai buna pentru retelele cu un numar mare de ponderi. Algoritmii cu gradient conjugat necesita putin mai multa memorie decat algoritmii mai simpli. In urmatorul program vom recreea reteaua anterioara si o vom antrena folosind varianta PolakRibiere a algoritmului cu gradient conjugat.

Rutina implicita de cautare pe linie srchcha v-a fi folosita si pentru acest exemplu. vom recrea reteaua precedenta si o vom antrena folosind versiunea Powell-Beale a algoritmului cu gradient conjugat. desi performanta in cazul unei probleme date este dificil de prevazut. Parametrii lui traincgb sunt aceeasi ca cei pentru traincgf. Memoria necesara pentru Polak-Ribiere (patru vectori) este putin mai mare decat pentru Fletcher-Reeves (trei vectori). Acest fapt este testat in urmatoarea inegalitate: Daca aceasta conditie e satisfacuta. In urmatorul program. Este dificil de prevazut care algoritm va avea cea mai buna performanta intr-o problema.RESTARTUL POWELL-BEALE (traincgb) Pentru toti algoritmii cu gradient conjugat. Necesitatile de memorie pentru algoritmul Powell-Beale (sase vectori) sunt ceva mai mari decat cele pentru Polak-Ribiere (patru . C). O astfel de metoda de resetare a fost propusa de Powell si Beale. dar exista si alte metode de resetare care pot imbunatati eficienta antrenarii. directia de cautare se reseteaza la negativul gradientului. Punctul standard de resetare apare cand numarul de iteratii este egal cu numarul de parametrii din retea (ponderi si deplasari).Rutina traincgp are o performanta similara cu traincgf. Aceasta tehnica se aplica daca exista o foarte mica ortogonalitate intre gradientul curent si cel precedent. Parametrii show si epoch au aceleasi valori pe care le-au avut pentru traincgf. directia de cautare va fi periodic resetata la negativul gradientului. Rutina traincgb are calitatea de a fi ceva mai buna decat traincgp in cazul unor probleme.

In urmatorul program vom recreea reteaua anterioara si o vom reantrena folosind algoritmul quasi-Newton BFGS. Goldfarb si Shanno (BFGS). unde n este egal cu numarul ponderilor si deplasarilor din retea. retelele cu transmitere inainte). Parametrii show si epochs sunt stabiliti la 5.4. Din pacate. algoritmul fiind implementat in rutina trainbfg.ALGORITMII QUASI-NEWTON A). dar care nu necesita calcularea derivatelor secundare.ALGORITMUL “BFGS” (trainbgf) Metoda lui Newton este o alternativa la metodele cu gradient conjugat pentru optimizare rapida. este complicat si costisitor sa se calculeze matricea Hessiana pentru RNA cu transmitere inainte. pentru retelele mai mici. fara a fi necesara calcularea matricei Hessiene. Relatia de baza in metoda lui Newton este: unde Ak este matricea Hessiana (cu derivatele secunde ale functiei de performanta in raport cu valorile curente ale ponderilor si deplasarilor). unde J este matricea Jacobiana care contine primele derivate ale erorilor retelei (adica a functiei . algoritmul Levenberg-Marquardt a fost proiectat pentru atinge o viteza de antrenare de ordinul doi. Cand functia de performanta are forma unei sume de patrate (caracteristic pt.7. Hessianul aproximativ trebuie stocat.vectori). respectiv 300: Algoritmul BFGS necesita mai multe calcule in fiecare iteratie si mai multa memorie decat metodele cu gradient conjugat. Rutina implicita a cautarii pe linie srchbac v-a fi folosita in acest exemplu. Metoda quasi-Newton care a avut cel mai mare succes a fost descoperita de Broyden. 1. Parametrii pentru trainbfg sunt aceeasi ca si pentru traincgf. B). Fletcher. Aceste sunt numite metode quasi-Newton. In cazul retelelor foarte mari se recomanda utilizarea “Rprop” sau al unui algoritm cu gradient conjugat. iar dimensiunile sale sunt n × n. trainbfg poate fi o functie de antrenare eficienta. Aceste metode actualizeaza la fiecare iteratie o matrice Hessiana aproximativa. Actualizarea este calculata ca o functie de gradient. Exista o categorie de algoritmi bazati pe metoda lui Newton. atunci matricea Hessiana poate fi aproximata astfel: H = J TJ. Totusi. Metoda lui Newton converge deseori mai rapid decat metodele cu gradient conjugat.LEVENBERG-MARQUARDT (trainlm) La fel ca la metodele quasi-Newton. iar gradientul poate fi calculat astfel: g = J T e . desi in general converge in mai putine iteratii.

Acest algoritm pare a fi metoda cea mai rapida de antrenare a retelelor neuronale cu transmitere inainte. mu_dec. Algoritmul Levenberg-Marquardt foloseste aceasta aproximare pt.de performanta) in raport cu ponderile si deplasarile. avantajul lui trainlm scade. In acest fel. care controleaza marimea memoriei utilizata de algoritm. pentru retelele care contin pana la cateva sute de ponderi. Cererile de memorie pt. la problemele de aproximare a unei functii. folosind matricea Hessiana aproximativa. mu_inc. performanta lui trainlm este relativ slaba in problemele de “recunoastere a formelor”. cu un pas mic. show. astfel ca ideea este de a ne deplasa catre metoda lui Newton. Matricea Jacobiana poate fi calculata printr-o tehnica standard de propagare inversa (care este mult mai putin complicata decat calcularea matricii Hessiene). algoritmul este oprit. pe . Metoda Newton este mai rapida si mai precisa in privinta minimului erorii. de asemenea. ce au o marime moderata (pana la cateva sute de ponderi). Parametrii pentru trainlm sunt epochs. goal. min_grad. Cand μ este mare. pe masura ce numarul ponderilor din retea creste. time. trainlm sunt mai mari decat pt. aceasta este chiar metoda Newton. cat mai repede posibil. In plus. cererile de memorie se pot reduce. trainlm poate obtine o eroare medie patratica mai mica decat oricare alt algoritm. mem_reduc. mu. creste functia de performanta. RECOMANDARI In general. eficienta ei scazand in problemele de aproximare a unei functii. matricea Hessiana. iar e este vectorul erorilor retelei. Mai inainte am discutat primii sase parametrii. cand in urma pasului. max_fail. va fi prezentat in sectiunea urmatoare. functia de performanta va fi intotdeauna redusa la fiecare iteratie a algoritmului. Functia trainrp este cel mai rapid algoritm in problemele de recunoastere a formelor. algoritmul LM va avea convergenta cea mai rapida. alti algoritmi. aceasta devine “gradientul descendent”. Parametrul mem_reduc. Parametrii show si epoch sunt fixati la 5 si respectiv 300. dar cu riscul cresterii timpului de executie. Performanta ei scade. Totusi. μ este micsorat dupa fiecare pas realizat cu succes (care face o reducere in functia de performanta) si este marit doar. sau este inmultita cu mu_inc de cate ori un pas va face sa creasca functia de performanta. intr-o recurenta asemanatoare cu metoda Newton: Cand scalarul μ este zero. Daca mu devine mai mare decat mu_max. Acest avantaj este observabil in special daca se cere o mare precizie a antrenarii. In multe cazuri. Aceasta valoare este inmultita cu mu_dec de cate ori functia de performanta se reduce dupa un pas. Acest algoritm este ilustrat in programul demo: >>nnd12m En . mu_max. Parametrul mu este valoarea initiala pentru μ. Prin ajustarea parametrului mem_reduc. discutat mai sus. In urmatorul program reinitializam reteaua anterioara si o reantrenam folosind algoritmul Levenberg-Marquardt. Ca atare.

14 -0. Algoritmul cu rata de instruire variabila traingdx este de obicei mult mai lent decat celelalte metode si are aproximativ aceleasi cereri de memorie ca si trainrp. Algoritmul SCG este aproape la fel de rapid ca algoritmul LM in problemele de aproximare a unei functii (mai rapid pentru retelele mari) si este aproape la fel de rapid ca trainrp in problemele de recunoastere a formelor. 1.28 0. O rate de instruire prea mare duce la o instruire instabila. subplot(211).8. Algoritmii cu gradient conjugat.grid In continuare utilizam functia NEWFF pentru a crea o retea cu doua straturi si cu transmitere inainte. In orice caz. Alegerea ratei de instruire pentru o retea neliniara constituie o provocare. Reteaua va trebui reinitializata si reantrenata de cateva ori pentru a avea garantia obtinerii celei mai bune solutii. Performanta lui nu scade la fel de repede ca la trainrp cand se reduce eroarea. Totusi.84 0. .66 0. Reteaua are o intrare (in domeniul dela 0 la 8). Pentru retele mari se va folosi “trainscg” sau “trainrp”. cu asigurarea mentinerea stabilitatii. atunci exista o varietate de alti algoritmi rapizi. pt. Alegerea unei bune rate de instruire pentru o retea multistrat neliniara nu este deloc usoara.77 -0. functioneaza bine intr-o varietate larga de probleme. Varianta momentum este uzual mai rapida decat gradientul coborator simplu.5. Cum gradientul coborator se realizeaza pe suprafata de eroare. intrucat pentru o instruire stabila cere rate de instruire mici. urmat de un strat cu 1 neuron PURELIN. este indicat de ales valorile implicite ale parametrilor. Cererile de memorie pentru acest algoritm sunt relativ mici in comparatie cu ceilalti algoritmi. urmata de un prim strat cu 10 neuroni TANSIG. 1. Caderea intr-un minim local poate fi buna sau rea. Daca memoria este o problema.1. Algoritmii cu gradient conjugat au cereri relativ mici de memorie.APLICATII 1. trebuie ratinut ca desi o retea multistrat cu retro-propagare si cu suficienti neuroni poate implementa aproape orice functie. Suprafata de eroare a unei retele neliniare este complexa. Problema este ca functiile de transfer nenliniare ale retelelor multistrat introduc multe minime locale in suprafata de eroare. dar efortul de calcul creste geometric cu marimea retelei. Performanta lui trainbfg este similara cu cea a lui trainlm. usual se utilizeaza antrenarea Levenberg-Marquardt. desi o retea antrenata este – teoretic – capabila de realizari corecte.t. ea permitand rate de instruire mai mari. Folosim TRAINLM si retro-propagarea. dar poate fi util pentru unele probleme. o rata de instruire prea mica duce la un timp de antrenare foarte lung. Reciproc. nu cere la fel de multa memorie ca trainlm. In cazul algoritmilor de antrenare rapida.masura ce se reduce eroarea impusa.96 -0. depinzand de cat de aproape este minimul local de cel global si cat de mica eroare se cere. daca se dispune de memorie suficienta. ca echivalentul unei matrici inverse trebuie calculata la fiecare iteratie. Aceasta se poate intampla in functie de conditiile initiale de plecare. ce se poate plota (fig.'o'). Pentru retele de dimensiuni mici si medii.91 0. t=[0 0.CATEVA RNA SIMPLE Mai intai ne antrenam cu cateva RNA simple. in particular trainscg. este posibil ca retro-propagarea si variatiile ei sa nu gaseasca intotdeauna solutia.plot(p.13): figure(1). p=[0 1 2 3 4 5 6 7 8]. LIMITARII SI PRECAUTII Algoritmul cu gradient coborator este in general foarte lent. este posibil ca solutia sa cada intr-unul din aceste minime locale.99].8. Mai jos intrarea P si tinta T defineste o functie simpla. in special pentru retelele cu un numar mare de ponderi. in MATLAB 6. Retelele multistrat sunt capabile de a realiza corect orice calcul liniar sau neliniar si pot aproxima oricat de bine orice functie. dar ramane prea lenta pentru multe aplicatii practice. retro-propagarea nu va gasi intotdeauna ponderile corecte pentru solutia optima.

14 Acum antrenam reteaua pana la 50 de epoci. 1. y2=sim(net.p.p.'x') Fig.p.RNA PENTRU RECUNOASTEREA FORMELOR Acest program realizeaza recunoasterea formelor (clasificarea a doua multimi). In fereastra “Command Window”: OPEN – WORK\RNA\ demo_rna.[10 1].y1.03.Run”. net.'o'.grid Fig.Facem simularea retelei.p) plot(p.y2. 1.'x'.p).p.y1. 1. adica nu i s-au ajustat ponderile).144) ca “iesirea” nu este cea dorita (pentru ca RNA nu este antrenata.t).'*').t. y1=sim(net. Apare . Fig.m – En .8. apoi o resimulam (fig.trainParam.13 net=newff([0 8]. Se observa (fig.goal=0.plot(p. subplot(212).15 1.epochs=50. 1. net. figure(2). 1. adica se introduce “intrarea” si se scoate “iesirea”.03.'trainlm').15). cu o eroare impusa de 0. net=train(net.'purelin'}.'o'.t.{'tansig'.2.trainParam.

1.goal=0. cl2=formlot(lx.'o') hold off .17): tinta (o functie treapta – cele 7 “*” sunt considerate “zerouri”.:).:). in care – cu mausul – se fac 7 clicuri in coltul din stanga sus (apar 7 “*”) – En si 9 clicuri in coltul din dreapta jos (apar 9 “o”) – En. iar cele 9 “o” sunt considerate “unu”) si RNA-ua realizata (care aproximeaza tinta) . tf1='tansig' .ly. in “Training…” apar doua grafice (fig.cl1(2.ch1. hold off.n).{tf1 tf2 tf3}).p). % cl reprezinta multimea formelor rezultate in urma apelarii functiei formlot. t=[zeros(1.n2). plot(cl2(1. % INSTRUIRE RETEA.trainParam.ly. n2=9. % DEFINIRE RETEA s1=9 . 1. s3=1.16.ch2. 1.ch. % Dimensiunea matricei cl este (2 x n). dupa instruire. tf3='logsig'.17 % DEMO_RNA. care . yr=sim(net. pause.:). n1=7 .“Figure 1” .p. net. pause.M function cl=formlot(lx. plot([t' yr']) % t-tinta impusa.epochs=50. % FORMLOT. % lx=[lx(1) lx(2)] si ly=[ly(1) ly(2)] delimiteaza spatiul formelor.n1) ones(1.n2)]. tf2='tansig' .t).ly. pr=[lx. Fig.n).n1) .16 Dupa rularea programului . s2=15 .ly.cl2(2. net.ly]. yr. % Returneaza coordonatele punctelor marcate cu mausul % cl=formlot(lx. net=newff(pr. Fig.02. ch2='o'.M lx=[0 30] . ch1='*' .iesirea retelei pt cazul cand la intrare s-a aplicat vectorul p.:). net=train(net.trainParam. cl1=formlot(lx. pause.ch. “Figure 1” se prezinta in figura 1.'*') hold on. plot(cl1(1.[s1 s2 s3]. ly=[0 30]. p=[cl1 cl2].

x1=[].cx]. . for i=1:n. . hold on.y1]. plot(cx. [cx.y1=[]. x1=[x1. [lx(2) ly(1)].cy].cy]=ginput(1). . y1=[y1.% in acest caz este un dreptunghi ce are urmatoarele coordonate ale varfurilor: % [lx(1) ly(1)]. [lx(2) ly(2)] % ch reprezinta caracterul ( + .ly. [lx(1) ly(2)].cy.ch). end cl=[x1.'. * . o .'). x ) cu care se marcheaza forma care apartine clasei % n = nr de forme care apartin clasei % ATENTIE! dupa lansarea programului ecranul ramane in 'on' (noua figura se suprapune % peste cea veche) plot(lx.

Sign up to vote on this title
UsefulNot useful