Professional Documents
Culture Documents
Lab 5
Lab 5
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)
%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
%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:
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.