Laborator1
description
Transcript of 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)
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.
>> [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
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
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];
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
>> 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:
>> 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 =
[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)
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};
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
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
>> [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)
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
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
>> 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 =
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
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
>> 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 =
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
??? 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
>> 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 =
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]
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.
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:
>> [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 =
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}
|
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}
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 =
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 =
[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}
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.