Laborator1

32
Laboratorul Numărul 1 Perceptronul B. Proiectaţi o reţea neuronală artificială pentru realizarea funcţiei logice AND cu două intrări. Aplicaţi algoritmul de antrenare adapt. Desenaţi reţeaua şi notaţi ponderile finale. Definesc RNA cu două intrări și un singur neuron. Valorile minime și maxime pe care le pot lua cele două intrări sunt 1 respectiv 0. RNA am creat-o în Matlab cu ajutorul funcției newp. >> net=newp([0 1;0 1],1); Stabilesc valoarea polarizării la 0.25 respectiv atribui valorile inițiale ponderilor de interconectare care sunt 0 respectiv 0.4. >> net.b{1}=[0.25]; >> net.IW{1,1}=[0 0.4]; Am definit vectorul de intrare din setul de date de antrenare respectiv valoarea dorită sau ținta în secvențe (tablouri între acolade). >> i={[0;0] [0;1] [1;0] [1;1]}; >> t={0 0 0 1}; Am verificat valorile inițiale ale polarizării și ponderilor de interconectare pentru a vedea dacă corespund cu cele setate anterior. >> net.b{1} ans = 0.25 >> net.IW{1,1} ans = 0 0.4000 Am setat numărul de iterații la 1 astfel încât funcția adapt va aplica vectorul de intrare i o singură dată. >> net.trainParam.passes=1; Antrenez rețeaua cu funcția adapt și determin ieșirea curentă y1 respectiv eroarea e1. >> [net,y1,e1]=adapt(net,i,t)

description

Laborator1

Transcript of Laborator1

Page 1: Laborator1

Laboratorul Numărul 1 Perceptronul

B. Proiectaţi o reţea neuronală artificială pentru realizarea funcţiei logice AND cu două intrări. Aplicaţi algoritmul de antrenare adapt. Desenaţi reţeaua şi notaţi ponderile finale.

Definesc RNA cu două intrări și un singur neuron. Valorile minime și maxime pe care le pot lua cele două intrări sunt 1 respectiv 0. RNA am creat-o în Matlab cu ajutorul funcției newp.

>> net=newp([0 1;0 1],1);

Stabilesc valoarea polarizării la 0.25 respectiv atribui valorile inițiale ponderilor de interconectare care sunt 0 respectiv 0.4.

>> net.b{1}=[0.25];

>> net.IW{1,1}=[0 0.4];

Am definit vectorul de intrare din setul de date de antrenare respectiv valoarea dorită sau ținta în secvențe (tablouri între acolade).

>> i={[0;0] [0;1] [1;0] [1;1]};

>> t={0 0 0 1};

Am verificat valorile inițiale ale polarizării și ponderilor de interconectare pentru a vedea dacă corespund cu cele setate anterior.

>> net.b{1}

ans =

0.25

>> net.IW{1,1}

ans =

0 0.4000

Am setat numărul de iterații la 1 astfel încât funcția adapt va aplica vectorul de intrare i o singură dată.

>> net.trainParam.passes=1;

Antrenez rețeaua cu funcția adapt și determin ieșirea curentă y1 respectiv eroarea e1.

>> [net,y1,e1]=adapt(net,i,t)

Page 2: Laborator1

y1 =

[1] [0] [0] [0]

e1 =

[-1] [0] [0] [1]

Se observă că ieșirea curentă y1 este diferită de ieșirea țintă t prin urmare antrenez în continuarea rețeaua.

Noile ponderi sunt și polzarizarea sunt:

>> net.IW{1,1}

ans =

1.0000 1.4000

>> net.b{1}

ans =

0.2500

Antrenez în continuarea rețeaua și determin ieșirea curentă y2 respectiv eroarea e2.

>> [net,y2,e2]=adapt(net,i,t)

y2 =

[1] [1] [0] [0]

e2 =

[-1] [-1] [0] [1]

Ieșirea curentă y2 este diferită de ieșirea țintă t prin urmare antrenez în continuare rețeaua.

Calculez noile valori ale ponderilor și polarizarea:

>> net.IW{1,1}

ans =

2.0000 1.4000

>> net.b{1}

ans =

-0.7500

Antrenez în continuare rețeaua și determin ieșirea curentă y3 respectiv eroarea e3.

Page 3: Laborator1

>> [net,y3,e3]=adapt(net,i,t)

y3 =

[0] [1] [1] [0]

e3 =

[0] [-1] [-1] [1]

Ieșirea curentă y3 este diferită de ieșirea dorită t prin urmare antrenez în continuare rețeaua.

Calculez noile valori ale ponderilor, și polarizarea:

>> net.IW{1,1}

ans =

2.0000 1.4000

>> net.b{1}

ans =

-1.7500

Antrenez în continuare rețeaua și determin ieșirea curentă y4 respectiv eroarea e4.

>> [net,y4,e4]=adapt(net,i,t)

y4 =

[0] [0] [1] [0]

e4 =

[0] [0] [-1] [1]

Ieșirea curentă y4 este diferită de valoarea dorită t prin urmare antrenz în continuare rețeaua.

Calculez noile valori ale ponderilor, și polarizarea:

>> net.IW{1,1}

ans =

2.0000 2.4000

>> net.b{1}

ans =

-1.7500

Page 4: Laborator1

Antrenez în continuarea rețeaua și determin ieșirea curentă y5 respectiv eroarea e5.

>> [net,y5,e5]=adapt(net,i,t)

y5 =

[0] [1] [0] [1]

e5 =

[0] [-1] [0] [0]

Ieșirea curentă y5 este diferită de ieșirea dorită t deci antrenez în continuare rețeaua.

Calculez valorile noilor ponderi și polarizarea:

>> net.IW{1,1}

ans =

2.0000 1.4000

>> net.b{1}

ans =

-2.7500

Antrenez rețeaua în continuare și determin ieșirea curentă y6 respectiv eroarea e6.

>> [net,y6,e6]=adapt(net,i,t)

y6 =

[0] [0] [0] [1]

e6 =

[0] [0] [0] [0]

Se poate observa că ieșirea curentă y6 coincide cu ieșirea dorită t, prin urmare rețeaua este convergentă și produce ieșirile dorite, pentru toți vectorii de intrare.

Calculăm valorile finale ale ponderilor, și polarizarea:

>> net.IW{1,1}

ans =

2.0000 1.4000

>> net.b{1}

ans =

-2.7500

Page 5: Laborator1

Simulăm rețeua antrenată pentru fiecare intrare.

>> y=sim(net,i)

y =

[0] [0] [0] [1]

Pentru verificare calculăm eroarea pentru fiecare intrare.

>> eroarea={y{1}-t{1} y{2}-t{2} y{3}-t{3} y{4}-t{4}}

eroarea =

[0] [0] [0] [0]

Desenăm RNA pentru funcția logică AND cu două intrări și trasăm ponderile de interconectare.

RNA pentru funcția logică AND

C. Proiectaţi o reţea neuronală artificială pentru realizarea funcţiei logice OR cu două intrări. Aplicaţi algoritmul de antrenare adapt. Desenaţi reţeaua şi notaţi ponderile finale.

Definesc RNA cu două intrări și un singur neuron. Valorile minime și maxime pe care le pot lua cele două intrări sunt 1 respectiv 0. RNA am creat-o în Matlab cu ajutorul funcției newp.

>> net=newp([0 1;0 1],1);

Stabilesc valoarea polarizării la 0 respectiv atribui valorile inițiale ponderilor de interconectare care sunt 0.2 respectiv 0.35.

>> net.b{1}=[0];

>> net.IW{1,1}=[0.2 0.35];

Page 6: Laborator1

Am definit vectorul de intrare din setul de date de antrenare respectiv valoarea dorită sau ținta în secvențe (tablouri între acolade).

>> i={[0;0] [0;1] [1;0] [1;1]};

>> t={1 1 1 0};

Am verificat valorile inițiale ale polarizării și ponderilor de interconectare pentru a vedea dacă corespund cu cele setate anterior.

>> net.b{1}

ans =

0

>> net.IW{1,1}

ans =

0.2000 0.3500

Am setat numărul de iterații la 1 astfel încât funcția adapt va aplica vectorul de intrare i o singură dată.

>> net.trainParam.passes=1;

Antrenez rețeaua cu funcția adapt și determin ieșirea curentă y1 respectiv eroarea e1.

>> [net,y1,e1]=adapt(net,i,t)

y1 =

[1] [1] [1] [1]

e1 =

[0] [0] [0] [-1]

Se observă că ieșirea curentă y1 este diferită de ieșirea țintă t prin urmare antrenez în continuarea rețeaua.

Noile ponderi și polzarizarea sunt:

>> net.IW{1,1}

ans =

-0.8000 -0.6500

Page 7: Laborator1

>> net.b{1}

ans =

-1

Antrenez în continuarea rețeaua și determin ieșirea curentă y2 respectiv eroarea e2.

>> [net,y2,e2]=adapt(net,i,t)

y2 =

[0] [0] [1] [1]

e2 =

[1] [1] [0] [-1]

Ieșirea curentă y2 este diferită de ieșirea țintă t prin urmare antrenez în continuare rețeaua.

Calculez noile valori ale ponderilor și polarizarea:

>> net.b{1}

ans =

0

>> net.IW{1,1}

ans =

-1.8000 -0.6500

Antrenez în continuare rețeaua și determin ieșirea curentă y3 respectiv eroarea e3.

>> [net,y3,e3]=adapt(net,i,t)

y3 =

[1] [0] [0] [1]

e3 =

[0] [1] [1] [-1]

Ieșirea curentă y3 este diferită de ieșirea dorită t prin urmare antrenez în continuare rețeaua.

Calculez noile valori ale ponderilor, și polarizarea:

Page 8: Laborator1

>> net.b{1}

ans =

1

>> net.IW{1,1}

ans =

-1.8000 -0.6500

Antrenez în continuare rețeaua și determin ieșirea curentă y4 respectiv eroarea e4.

>> [net,y4,e4]=adapt(net,i,t)

y4 =

[1] [1] [0] [1]

e4 =

[0] [0] [1] [-1]

Ieșirea curentă y4 este diferită de valoarea dorită t prin urmare antrenez în continuare rețeaua.

Calculez noile valori ale ponderilor, și polarizarea:

>> net.b{1}

ans =

1

>> net.IW{1,1}

ans =

-1.8000 -1.6500

Antrenez în continuarea rețeaua și determin ieșirea curentă y5 respectiv eroarea e5.

>> [net,y5,e5]=adapt(net,i,t)

y5 =

[1] [0] [1] [0]

e5 =

Page 9: Laborator1

[0] [1] [0] [0]

Ieșirea curentă y5 este diferită de ieșirea dorită t deci antrenez în continuare rețeaua.

Calculez valorile noilor ponderi și polarizarea:

>> net.b{1}

ans =

2

>> net.IW{1,1}

ans =

-1.8000 -0.6500

Antrenez rețeaua în continuare și determin ieșirea curentă y6 respectiv eroarea e6.

>> [net,y6,e6]=adapt(net,i,t)

y6 =

[1] [1] [1] [0]

e6 =

[0] [0] [0] [0]

Se poate observa că ieșirea curentă y6 coincide cu ieșirea dorită t, prin urmare rețeaua este convergentă și produce ieșirile dorite, pentru toți vectorii de intrare.

Calculăm valorile finale ale ponderilor, și polarizarea:

>> net.b{1}

ans =

2

>> net.IW{1,1}

ans =

-1.8000 -0.6500

Simulăm rețeua antrenată pentru fiecare intrare.

>> y=sim(net,i)

Page 10: Laborator1

y =

[1] [1] [1] [0]

Pentru verificare calculăm eroarea pentru fiecare intrare.

>> eroarea={y{1}-t{1} y{2}-t{2} y{3}-t{3} y{4}-t{4}}

eroarea =

[0] [0] [0] [0]

Desenăm RNA pentru funcția logică OR cu două intrări și trasăm ponderile de interconectare.

RNA pentru funcția logică OR

D. Proiectaţi o reţea neuronală artificială pentru realizarea unui detector de paritate cu patru intrări. Ieşirea 1 numai dacă numărul de intrări 1 este par. Aplicaţi algoritmul de antrenare adapt. Desenaţi reţeaua şi notaţi ponderile finale.

Definesc rețeaua în Matlab cu ajutorul funcției newp:

>> net=newp([0 1;0 1;0 1;0 1],1);

Setez valorile inițiale ale polarizării și ale ponderilor de interconectare:

>> net.b{1}=[0.7];

>> net.IW{1,1}=[0.12 0.24 0.32 0.47];

Definesc vectorul semnalelor de intrare și vectorul ieșirii dorite sau țintă:

>> i={[0;0;0;0] [0;0;0;1] [0;0;1;0] [0;0;1;1] [0;1;0;0] [0;1;0;1] [0;1;1;0] [0;1;1;1] [1;0;0;0] [1;0;0;1] [1;0;1;0] [1;0;1;1] [1;1;0;0] [1;1;0;1] [1;1;1;0] [1;1;1;1]};

>> t={0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1};

Page 11: Laborator1

Verific dacă ponderile respectiv polarizarea au fost setate corect:

>> net.b{1}

ans =

0.7000

>> net.IW{1,1}

ans =

0.1200 0.2400 0.3200 0.4700

Am setat numărul de iterații la 1 astfel încât funcția adapt va aplica vectorul de intrare i o singură dată.

>> net.trainParam.passes=1;

Antrenez rețeaua cu funcția adapt:

>> [net,y1,e1]=adapt(net,i,t)

Claculez ieșirea curentă și eroarea pentru prima iterație de calcul:

y1 =

[1] [1] [0] [0] [0] [1] [1] [1] [0] [0] [1] [1] [0] [1] [0] [0]

e1 =

[-1] [-1] [0] [1] [0] [0] [0] [-1] [0] [1] [0] [-1] [1] [-1] [0] [1]

Calculez valorile polarizării și ponderilor de interconectare pentru prima iterație:

>> net.b{1}

ans =

-0.3000

>> net.IW{1,1}

ans =

1.1200 0.2400 0.3200 -0.5300

Page 12: Laborator1

Ieșirea curentă nu corespunde cu ieșirea dorită, prin urmare antrenez în continuare rețeaua:

>> [net,y2,e2]=adapt(net,i,t)

y2 =

[0] [0] [1] [0] [0] [1] [1] [1] [0] [0] [1] [1] [0] [1] [0] [0]

e2 =

[0] [0] [-1] [1] [0] [0] [0] [-1] [0] [1] [0] [-1] [1] [-1] [0] [1]

>> net.b{1}

ans =

-0.3000

>> net.IW{1,1}

ans =

2.1200 0.2400 -0.6800 -0.5300

>> [net,y3,e3]=adapt(net,i,t)

y3 =

[0] [0] [0] [0] [1] [0] [1] [1] [1] [1] [0] [1] [0] [1] [0] [0]

e3 =

[0] [0] [0] [1] [-1] [1] [0] [-1] [-1] [0] [1] [-1] [1] [-1] [0] [1]

>> net.b{1}

ans =

-0.3000

>> net.IW{1,1}

ans =

2.1200 0.2400 0.3200 -0.5300

Page 13: Laborator1

>> [net,y4,e4]=adapt(net,i,t)

y4 =

[0] [0] [1] [0] [0] [1] [1] [1] [1] [0] [1] [1] [0] [1] [0] [0]

e4 =

[0] [0] [-1] [1] [0] [0] [0] [-1] [-1] [1] [0] [-1] [1] [-1] [0] [1]

>> net.b{1}

ans =

-1.3000

>> net.IW{1,1}

ans =

2.1200 0.2400 -0.6800 -0.5300

>> [net,y5,e5]=adapt(net,i,t)

y5 =

[0] [0] [0] [0] [0] [1] [1] [1] [1] [0] [1] [1] [0] [1] [0] [0]

e5 =

[0] [0] [0] [1] [0] [0] [0] [-1] [-1] [1] [0] [-1] [1] [-1] [0] [1]

>> net.b{1}

ans =

-1.3000

>> net.IW{1,1}

ans =

2.1200 0.2400 -0.6800 -0.5300

>> [net,y6,e6]=adapt(net,i,t)

Page 14: Laborator1

y6 =

[0] [0] [0] [0] [0] [1] [1] [1] [1] [0] [1] [1] [0] [1] [0] [0]

e6 =

[0] [0] [0] [1] [0] [0] [0] [-1] [-1] [1] [0] [-1] [1] [-1] [0] [1]

>> net.b{1}

ans =

-1.3000

>> net.IW{1,1}

ans =

2.1200 0.2400 -0.6800 -0.5300

>> [net,y7,e7]=adapt(net,i,t)

y7 =

[0] [0] [0] [0] [0] [1] [1] [1] [1] [0] [1] [1] [0] [1] [0] [0]

e7 =

[0] [0] [0] [1] [0] [0] [0] [-1] [-1] [1] [0] [-1] [1] [-1] [0] [1]

>> net.IW{1,1}

ans =

2.1200 0.2400 -0.6800 -0.5300

>> net.b{1}

ans =

-1.3000

Concluzia privind utilizarea algoritmului adapt pentru proiectarea unei RNA pentru implementarea unui detector de paritate cu patru intrări este că RNA nu poate fi antrenată cu algoritmul adapt deoarece la iterații successive de calcul, ponderile

Page 15: Laborator1

de interconectare nu se mai actualizează (algoritmul de antrenare se oprește) iar ieșirea curentă este diferită de ieșirea dorită așa cum reiese din iterațiile prezentate pe parcursul algoritmului adapt.

A. Verificaţi toate programele descrise în paragrafele anterioare şi prezentaţi rezultatele în referatul de laborator.

În cele ce urmează voi prezenta toate calculele efectuate în cadrul laboratorului 1 împreună cu verificarea amănunțită a fiecărui calcul cu mențiunea că am finalizat și unii algoritmi de calcul din cadrul lucrării: Antrenarea adaptivă:

Să presupunem că avem următoarea problemă de clasificare şi dorim să o rezolvăm cu un singur perceptron cu două intrări:

{( )}t,p();t,p();t,p();t,p 111

022

12

10

22

44332211 =

−==

−==

==

=

>> p1=[2;2];

>> p2=[1;-2];

>> p3=[-2;2];

>> p4=[-1;1];

>> t1=[0];

>> t2=[1];

>> t3=[0];

>> t4=[1];

>> w0=[0 0]

w0 =

0 0

>> b0=[0]

b0 =

0

Începem prin a calcula ieşirea a a perceptronului pentru primul vector de intrare, p1, folosind ponderile şi polarizarea iniţiale

Page 16: Laborator1

>> a=hardlim(w0*p1+b0)

a =

1

Ieşirea a nu este egală cu valoarea ţintă t1, aşadar vom folosi regula perceptronului pentru a găsi variaţia ponderilor:

>> e=t1-a

e =

-1

>> dw=e*p1'

dw =

-2 -2

>> db=e

db =

-1

Se pot calcula noile ponderi prin:

>> w1=w0+dw

w1 =

-2 -2

>> db=e

db =

-1

>> a=hardlim(w1*p2+b1)

a =

1

>> e=t2-a

e =

Page 17: Laborator1

0

>> dw=e*p2'

dw =

0 0

>> db=e

db =

0

>> w2=w1+dw

w2 =

-2 -2

>> b2=b1+db

b2 =

-1

>> a=hardlim(w2*p3+b2)

a =

0

>> e=t3-a

e =

0

>> dw=e*p3'

dw =

0 0

>> db=e

db =

0

>> w3=w2+dw

Page 18: Laborator1

w3 =

-2 -2

>> b3=b2+db

b3 =

-1

>> a=hardlim(w3*p4+b3)

a =

0

>> e=t4-a

e =

1

>> dw=e*p4'

dw =

-1 1

>> db=e

db =

1

>> w4

w4 =

-3 -1

>> w3+dw

ans =

-3 -1

>> b4=b3+db

b4 =

0

Page 19: Laborator1

>> a=hardlim(w4*p1+b4)

a =

0

>> e=t1-a

e =

0

>> dw=e*p1'

dw =

0 0

>> db=e

db =

0

>> w5=w4+dw

w5 =

-3 -1

>> b5=b4+db

b5 =

0

>> a=hardlim(w5*p2+b5)

a =

0

>> e=t2-a

e =

1

>> dw=e*p2'

dw =

Page 20: Laborator1

1 -2

>> db=e

db =

1

>> w6=w5+dw

w6 =

-2 -3

>> b6=b5+1

b6 =

1

>> a=hardlim(w6*p3+b6)

a =

0

>> e=t3-a

e =

0

>> dw=e*p3'

dw =

0 0

>> db=e

db =

0

>> w7=w6+dw

w7 =

-2 -3

>> b7=b+db

Page 21: Laborator1

??? Undefined function or variable 'b'.

>> b7=b6+db

b7 =

1

>> a=hardlim(w7*p4+b7)

a =

1

>> e=t4-a

e =

0

>> dw=e*p4'

dw =

0 0

>> db=e

db =

0

>> w8=w7+dw

w8 =

-2 -3

>> b8=b7+db

b8 =

1

>> a=hardlim(w8*p1+b8)

a =

0

Page 22: Laborator1

>> e=t2-a

e =

1

>> e=t1-a

e =

0

>> dw=e*p1'

dw =

0 0

>> db=e

db =

0

>> w9=w8+dw

w9 =

-2 -3

>> b9=b8+db

b9 =

1

>> a=hardlim(w9*p2+b9)

a =

1

>> e=t2-a

e =

0

>> dw=e*p2'

dw =

Page 23: Laborator1

0 0

>> db=e

db =

0

>> w10=w9+db

w10 =

-2 -3

>> b10=b9+db

b10 =

1

Procedeul s-a oprit pentru că s-au obținut valorile finale ale rețelei.

Următoarele instrucţiuni definesc un perceptron cu ponderile iniţiale egale cu zero.

>> net = newp([-2 2;-2 +2],1);

Să considerăm mai întâi aplicarea unei singure intrări. Vom defini defini primul vector de intrare şi prima ţintă în secvenţe (tablouri între acolade).

>> p = {[2; 2]};

>> t = {0}

t =

[0]

Setăm numărul de paşi (iteraţii) la 1, aşa încât adapt va aplica vectorul de intrare (numai unul, în acest caz) o singură dată.

>> net.adaptParam.passes = 1;

Antrenăm reţeaua cu:

>> [net,a,e] = adapt(net,p,t)

Ieşirea şi eroarea returnate sunt

a =

[1]

Page 24: Laborator1

e =

[-1]

Noile ponderi şi polarizarea sunt:

>> twts=net.IW{1,1}

twts =

-2 -2

>> tbiase=net.b{1}

tbiase =

-1

Aşadar, ponderile iniţiale sunt zero şi după antrenarea cu numai primul vector ele au valorile [-2 -2] şi -1, aşa cum au fost calculate şi mai înainte. Aplicăm apoi al doilea vector, p2, s.a.m.d.

Următoarele instrucţiuni definesc un perceptron cu ponderile iniţiale egale cu zero.

>> net = newp([-2 2;-2 +2],1);

Să considerăm mai întâi aplicarea unei singure intrări.

>> p1=[2;2];

>> p2=[1;-2];

>> p3=[-2;2];

>> p4=[-1;1];

>> t=[0 1 0 1];

Setăm numărul de paşi (iteraţii) la 1, aşa încât adapt va aplica vectorul de intrare (numai unul, în acest caz) o singură dată.

>> net.adaptParam.pases=1;

Antrenăm rețeaua cu funcția adapt:

>> [net,a,e]=adapt(net,p1,t)

??? Error using ==> network.adapt at 156

Targets are incorrectly sized for network.

Page 25: Laborator1

Matrix must have 1 columns.

>> t1=[0]

t1 =

0

>> t2=[1];

>> t3=[0];

>> t4=[1];

Aplicăm primul vector:

>> [net,a,e]=adapt(net,p1,t1)

a =

1

e =

-1

>> twts=net.IW(1,1}

??? twts=net.IW(1,1}

|

Error: Unbalanced or unexpected parenthesis or bracket.

Noile ponderi și polarizarea sunt:

>> twts=net.IW{1,1}

twts =

-2 -2

>> tbiase=net.b{1}

tbiase =

-1

Aplicăm cel de-al doilea vector:

Page 26: Laborator1

>> [net,a,e]=adapt(net,p2,t2)

a =

1

e =

0

>> net.IW{1,1}

ans =

-2 -2

>> net.b{1}

ans =

-1

>> [net,a,e]=adapt(net,p3,t3)

a =

0

e =

0

>> net.IW{1,1}

ans =

-2 -2

>> net.b{1}

ans =

-1

>> [net,a,e]=adapt(net,p4,t4)

a =

0

e =

Page 27: Laborator1

1

>> net.IW{1,1}

ans =

-3 -1

>> net.b{1}

ans =

0

>> [net,a,e]=adapt(net,p1,t1)

n

a =

0

e =

0

>> net.IW{1,1}

ans =

-3 -1

>> net.b{1}

ans =

0

>> [net,a,e]=adapt(net,p2,t2)

a =

0

e =

1

>> net.Iw[1,1}

??? net.Iw[1,1}

Page 28: Laborator1

|

Error: Unbalanced or unexpected parenthesis or bracket.

>> net.IW{1,1}

ans =

-2 -3

>> net.b{1}

ans =

1

>> [net,q,e]=adapt(net,p3,t3)

q =

0

e =

0

>> net.IW{1,1}

ans =

-2 -3

>> net.b{1}

ans =

1

>> [net,a,e]=adapt(net,p4,t4)

a =

1

e =

0

>> net.IW{1,1}

Page 29: Laborator1

ans =

-2 -3

>> net.b{1}

ans =

1

>> [net,a,e]=adapt(net,p1,t1)

a =

0

e =

0

>> net.IW{1,1}

ans =

-2 -3

>> net.b{1}

ans =

1

>> [net,a,e]=adapt(net,p2,t2)

a =

1

e =

0

>> net.IW{1,1}

ans =

-2 -3

>> net.b{1}

ans =

Page 30: Laborator1

1

Reţeaua este convergentă şi produce ieşirile dorite pentru toţi cei patru vectori de intrare.

Să aplicăm adapt un singur pas, folosind secvenţa formată din toţi cei patru vectori de intrare. Începem prin definirea reţelei.

>> net = newp([-2 2;-2 +2],1);

>> net.trainParam.passes = 1;

Intrările şi ţintele corespunzătoare din setul de antrenare sunt:

>> p = {[2;2] [1;-2] [-2;2] [-1;1]};

>> t = {0 1 0 1};

Antrenăm reţeaua cu:

>> [net,a,e]=adapt(net,p,t)

Ieşirea şi eroarea returnate sunt:

a =

[1] [1] [0] [0]

e =

[-1] [0] [0] [1]

Noile ponderi sunt:

>> net.IW{1,1}

ans =

-3 -1

>> net.b{1}

ans =

0

În final, simulăm reţeaua antrenată pentru fiecare intrare.

>> a1=sim(net,p)

a1 =

Page 31: Laborator1

[0] [0] [1] [1]

>> [net,a,e]=adapt(net,p,t)

a =

[0] [0] [0] [1]

e =

[0] [1] [0] [0]

>> net.IW{1,1}

ans =

-2 -3

>> net.b{1}

ans =

1

Ieşirile nu sunt egale cu ţintele, deci trebuie să antrenăm reţeaua cu mai mult de un pas.

>> a2=sim(net,p)

a2 =

[0] [1] [0] [1]

>> [net,a,e]=adapt(net,p,t)

a =

[0] [1] [0] [1]

e =

[0] [0] [0] [0]

>> net.IW{1,1}

ans =

-2 -3

>> net.b{1}

Page 32: Laborator1

ans =

1

>> a3=sim(net,p)

a3 =

[0] [1] [0] [1]

Reţeaua este convergentă şi produce ieşirile dorite pentru toţi cei patru vectori de intrare. Pentru a verifica, putem determina eroarea pentru fiecare intrare:

>> error = {a1{1}-t{1} a1{2}-t{2} a1{3}-t{3} a1{4}-t{4}}

error =

[0] [-1] [1] [0]

>> error = {a3{1}-t{1} a3{2}-t{2} a3{3}-t{3} a3{4}-t{4}}

error =

[0] [0] [0] [0]

Toate intrările sunt clasificate corect.