Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

Lucrarea nr.

5
Rețele neuronale artificiale feedforward cu strat ascuns

Programul
Codul programului:
% Selectarea problemei, tipului de retea neuronala folosita
% Functie activare strat ascuns(FSA)
% Functie activare strat iesire(FSI)
text_selectare_problema = (['Probleme: \n',...
'Problema 1: FSA - sigmoid unipolara, FSI - liniara \n',...
'Problema 2: FSA - sigmoid unipolara, FSI - sigmoid unipolara\n',...
'Problema 4: FSA - sigmoid bipolara , FSI - liniara\n',...
'Selectati numarul problemei: '])
problema_selectata = input(text_selectare_problema)

%date de intrare de antrenare


x = [-1 1 -1 1 ;
-1 -1 1 1];
%date de iesire de antrenare
d = [-1 1 1 -1];
%ponderi strat ascuns
w1 = [ 0.2 -0.15
-0.7 0.30];
teta1 = [ 0.8
-0.1];

%ponderi strat iesire


w2 = [0.1 -1];
teta2 = 1.2;

%structura RNA:
% - 2 neuroni in stratul ascuns
% - 1 neuron in stratul de iesire
str = [2 1];

%creare RNA
% ‘logsig’ - functia de activare tip sigmoid unipolara
% ‘tansig’ – functia de activare tip sigmoid bipolara
% ‘purelin’- functia de activare tip liniara

%retea cu FSA - sigmoid unipolara, FSI - liniara


rna_1 = newff([(min(x'))' (max(x'))'],str,{'logsig','purelin'},'traingd');
%retea cu FSA - sigmoid unipolara, FSI - sigmoid unipolara
rna_2 = newff([(min(x'))' (max(x'))'],str,{'logsig','logsig'},'traingd');
%retea cu FSA - sigmoid bipolara , FSI - liniara
rna_3 = newff([(min(x'))' (max(x'))'],str,{'tansig','purelin'},'traingd');
%setare ponderi RNA
%ponderi intrari strat ascuns
rna_1.IW{1,1} = w1;
rna_2.IW{1,1} = w1;
rna_3.IW{1,1} = w1;
%ponderi bias-uri strat ascuns
rna_1.b{1} = teta1;
rna_2.b{1} = teta1;
rna_3.b{1} = teta1;
%ponderi strat iesire
rna_1.LW{2,1} = w2;
rna_2.LW{2,1} = w2;
rna_3.LW{2,1} = w2;
%bias strat iesire
rna_1.b{2} = teta2;
rna_2.b{2} = teta2;
rna_3.b{2} = teta2;

%setare nr epoci
rna_1.trainParam.epochs = 1000;
rna_2.trainParam.epochs = 10000;
rna_3.trainParam.epochs = 1000;
%epsilon
e=10^(-3);
rna_1.trainParam.goal = e;
rna_2.trainParam.goal = e;
rna_3.trainParam.goal = e;
%rata de invatare
gama_1 = 0.78;
gama_2 = 1;
gama_3 = 0.5;
rna_1.trainParam.lr = gama_1;
rna_2.trainParam.lr = gama_2;
rna_3.trainParam.lr = gama_3;

if (problema_selectata == 1)
[rna_1,tr] = train(rna_1,x,d);
y = sim(rna_1,x);
fprintf('\nProblema 1: FSA - sigmoid unipolara, FSI - liniara\n')
fprintf('Iesire dorita: %.2f %.2f %.2f %.2f \nIesire obtinuta: %.2f
%.2f %.2f %.2f\n',d,y)
elseif (problema_selectata == 2)
x = [0 1 0 1 ;
0 0 1 1];
d = [0 1 1 0];
[rna_2,tr] = train(rna_2,x,d)
y = sim(rna_2,x);
fprintf('\nProblema 2: FSA - sigmoid unipolara, FSI - sigmoid
unipolara\n')
fprintf('Iesire dorita: %.2f %.2f %.2f %.2f \nIesire obtinuta: %.2f
%.2f %.2f %.2f\n',d,y)
elseif (problema_selectata == 4)
[rna_3,tr] = train(rna_3,x,d)
y = sim(rna_3,x);
fprintf('\nProblema 4: FSA - sigmoid bipolara , FSI - liniara\n')
fprintf('Iesire dorita: %.2f %.2f %.2f %.2f \nIesire obtinuta: %.2f
%.2f %.2f %.2f\n',d,y)
else
disp('Problema nu exista')
end
Concluzii
În cadrul acestei lucrări de laborator s-au studiat rețelele de tip RNAF cu un singur strat
ascuns. Regula de învățare utilizată este Delta generalizată (Backpropagation).
Rețelele antrenate în acest laborator au avut în vedere reproducerea funcției XOR.
Rata de învățare are un rol foarte important în eficiența rețelei neuronale. Valoarea ideală
a ratei de învățare diferă de la caz la caz. Aceasta trebuie aleasă cu atenție, o valoare prea mare
sau prea mică poate duce la o scădere drastică a performanței rețelei. Spre exemplu în
problema 1 s-au obținut următoarele rezultate:

Rata de învățare Număr de epoci parcurse


0.10 684
0.25 275
0.50 142
0.78 (Valoarea optimă pentru această rețea) 86
0.83 201
0.84+ Infinit (Rețeaua se blochează)

Problema 2 implică simularea celei de-a doua rețele, folosind funcția de activare sigmoid
unipolară folosită atât pe stratul ascuns cât și pe cel de ieșire. Pentru ca această rețea să poată
învăța trebuie modificat vectorul de antrenare a datelor de ieșire, d, ca acesta să cuprindă valori
în intervalul [0, 1]. În urma testării rețelei am tras concluzia că din toate rețelele utilizate
aceasta are performanța cea mai slabă, parcurgând 6105 de epoci, pentru rata de învățare
egală cu 1, în vederea satisfacerii erorii impuse.
Ultima problemă, patru, implică realizarea unei RNAF cu funcție sigmoid bipolară pe stratul
ascuns și funcție liniară pe stratul de ieșire. Utilizând o rată de învățare de 0.5 această rețea a
satisfăcut eroarea maximă impusă, în urma a doar 21 de epoci parcurse (de peste 4 ori mai
rapidă ca cea mai eficientă RNAF cu funcție sigmoid unipolară)
În concluzie putem spune cu certitudine că în vederea învățării porții XOR, RNAF cu
funcțiile: sigmoid bipolară pe stratul ascuns și liniară pe stratul de ieșire este cea mai bună
rețea. În schimb, rețeaua ce utilizează funcția sigmoid unipolară pe ambele straturi este
categoric o alegere nesatisfăcătoare.

You might also like