Sunteți pe pagina 1din 31

Studiul capacității de învățare al rețelelor

neuronale artificiale in funcție de datele intrare-iesire


obținute dintr-un anumit mediu

-Aplicație in Matlab-

➢ Realizat de studenta: Adile-Elena NEMOIANU


➢ Sectia: Ingineria Sistemelor
➢ Anul: 3
➢ Grupa: 4.2
Cuprins

1) Introducere……………………………………………….………….pag 1.
2) Dezvoltarea teoretica…………………………………….……….…pag 2.
3) Dezvoltarea practica……………………………….….…………….pag 3.
4) Graficele pentru performanta, starea de pregatire, regresie si histograma
erorilor……………………………………………………………...pag 10.
5) Codul in Matlab…………………………………………………….pag 13.
6) Testari………………………………………………………………pag 15.
7) Graficul erorilor de invatare………………………………………..pag 26.
8) Concluziile lucrarii…………………………………………………pag 28.
9) Bibliografie…………………………………………………………pag 29.
Introducere

O rețea neuronală artificială (ANN) este piesa unui sistem de calcul conceput pentru a

simula modul în care creierul uman analizează și procesează informațiile. Este fundamentul

inteligenței artificiale (AI) și rezolvă probleme care s-ar dovedi imposibile sau dificile de

către standardele umane sau statistice.

In aceasta lucrare voi studia daca o retea neuronala poate invata din exemplele primite sa

deduca valori corecte, in felul urmator: reteauta va primi doi vectori cu date pentru intrare si

un vector cu date pentru iesire si reteaua va trebui sa deduca legatura dintre vectorii de la

intrare si vectorul de la iesire, astfel incat sa creeze valori asemanatoare la iesire, prin

instruire. Metoda de instruire aplicata se va numi “Levenberg-Marquardt”.

y1, y2 sunt semnalele de intrare, care vor fi reprezentate de doi vectori, fiecare dintre ei
avand cate 20 de valori.
W1, W2 sunt ponderile sinaptice, care vor modela permeabilitatea sinaptica.
B va fi considerat pragul de activare al neuronului si va fi reprezentat de o functie
sigmoidala (hiperbolica).
Functia de transfer pe care o voi folosi va fi: a = 2 ./ (1 + exp(-2*n)) – 1

Y va reprezenta iesirea din neuron.

1
Dezvoltarea teoretica

Am pornit de la urmatoarea retea, care poate fi utilizată ca un “aproximator de funcții

generale”, deoarece aceasta poate aproxima orice funcție cu un număr finit de discontinuități,

în mod arbitrar, foarte bine, daca i se dau suficienți neuroni în stratul ascuns. Pentru aceasta

lucrare, eu am folosit 5 neuroni in stratul ascuns.

Avand in vedere ca circuitul de mai sus se aseamana foarte bine cu urmatoarea schema, am
folosit in Matlab functia “Fitting Neural Network” pentru rezolvarea acestei lucrari.

2
Dezvoltarea practica

Intr-o firma, angajatii trebuie sa relizeze un anumit numar de sarcini. Toate aceste sarcini
se pot realiza intr-un interval de timp delta T, care este egal cu diferenta dintre ora la care
angajatul ajunge in firma si incepe sa munceasca si ora la care angajatul paraseste firma,
deoarece acesta si-a terminat sarcinile pe care le-a avut de indeplinit. Cu totii stim ca pentru a
munci, iti trebuie o anumita putere de munca si am putea considera ca puterea unui angajat de
a munci este egala cu munca efectuata impartita la delta T.
Puterea = Munca / Delta T
Am considerat ca fiecare angajat are un anumit numar de sarcini si am trecut numarul de
sarcini ale fiecarui angajat intr-un vector, pe care l-am denumit „Munca efectuata”, dupa cum
urmeaza:
Munca_efectuata=[10.3; 20.5; 30.4; 40.2; 50.6; 60.4; 70.3; 80.2; 90.6; 100.1; 110.7;
120.3; 130.8; 140.5; 150.2; 160.9; 170.4; 180.6; 190.1; 200.3]
Apoi, intr-un alt vector, am trecut valorile pentru intervalul de timp delta T, in care se
realizeaza munca fiecarui angajat, in functie de numarul de sarcini primite. Toate valorile din
vectorul Timpul_delta_t se masoara in ore:
Timpul_delta_t=[2.4; 4.8; 6.3; 8.9; 10.6; 12.2; 14.5; 16.1; 18.3; 20.4; 22.6; 24.2; 26.3;
28.8; 30.7; 32.4; 34.2; 36.5; 38.9; 40.3]
Dupa aceea, am creat un vector denumit „Puterea_de_a_realiza_activitati_a_persoanei” si
in acest vector, fiecare valoare este calculata conform formulei: Puterea = Munca / Delta T.
Puterea_de_a_realiza_activitati_a_persoanei=[4.2916; 4.2708; 4.8253; 4.5168; 4.7735;
4.9508; 4.8482; 4.9813; 4.9508; 4.9068; 4.8982; 4.9710; 4.9733; 4.8784; 4.8925; 4.9660;
4.9824; 4.9479; 4.8868; 4.9702]
Toate aceste valori au fost trecute intr-un tabel Excel, dupa cum urmeaza:

3
Apoi, am deschis aplicatia Matlab si in Workspace am creat doua tabele. Pe un tabel l-am
denumit „Intrare” si pe celalalt l-am denumit „Iesire” Aceste doua tabele reprezinta intrarea si
iesirea din reteaua neuronala pe care o voi crea.

In tabelul denumit „Intrare” am introdus datele pe care le-am avut salvate anterior pe cele
doua coloane din tabelul Excel: „Munca efectuata” si „Timpul delta T”, iar in tabelul denumit
„Iesire” am introdus datele pe care le-am avut salvate anterior pe coloana din tabelul Excel:
„Puterea de a realiza activitati a persoanei”.

4
Am apelat functia „nnstart” in Command Window, in Matlab, ca sa incep sa creez
reteaua neuronala.

5
In fereastra in care s-a deschis, am selectat „Fitting app”:

Dupa aceea, am realizat pasii urmatori pentru crearea retelei neuronale:

6
Am selectat vectorul pentru intrarea in reteaua neuronala si vectorul pentru iesirea din
reateaua neuronala si am selectat „Matrix rows”:

Am configurat Instruirea, Validarea si Testarea retelei neuronale:

7
Am selectat un numar de 5 neuroni ascunsi pentru reteaua neuronala pe care urmeaza sa o
creez:

Am selectat metoda de Instruire denumita „Levenberg-Marquardt” si am inceput instruirea,


apasand pe butonul „Train” (Antreneaza):

8
La finalul instruirii, in Matlab, a aparut o fereastra in care erau specificate valorile pentru:
ciclurile de timp efectuate (7 repetari), timpul (1 secunda), performanta (0.000944), variatia in
functie de timp (gradientul = 0.00207), numarul de verificari validate (6):

Din aceasta fereastra, cu ajutorul meniului, am resit sa vizualizez graficele pentru:


performanta, starea de pregatire, histograma erorilor si regresia retelei neuronale.

9
Graficul pentru performanta:

Graficul pentru starea de pregatire a retelei neuronale:

10
Histograma erorilor:

Regresia:

11
Dupa ce am vizualizat si am analizat aceste grafice, am realizat pasii urmatori:

In aceasta fereastra, am selectat „MATLAB Matrix-Only Function”:

12
Si apasand pe acel buton, s-a generat urmatorul program intr-un mod automat, in Matlab:
function [y1] = myNeuralNetworkFunction(x1)
%MYNEURALNETWORKFUNCTION neural network simulation function.
%
% Auto-generated by MATLAB
%
% [y1] = myNeuralNetworkFunction(x1) takes these arguments:
% x = Qx2 matrix, input #1
% and returns:
% y = Qx1 matrix, output #1
% where Q is the number of samples.

%#ok<*RPMT0>

% ===== NEURAL NETWORK CONSTANTS =====

% Input 1
x1_step1.xoffset = [10.3;2.4];
x1_step1.gain = [0.0105263157894737;0.0527704485488127];
x1_step1.ymin = -1;

% Layer 1
b1 = [-3.1328942747978536509;-1.4565339417612903627;-
0.15273005944223722041;1.552780217055454326;3.0148431719086712377];
IW1_1 = [1.9256048427446372795 -2.4682146185599260768;2.6043807534262195524 -
1.70315796266956343;-2.9561732280980121956
0.49720140972002457858;2.1059530577038798604
2.3305940374128142345;0.95960570480107065805 3.1073415837336688661];

% Layer 2
b2 = -0.48156312516106758448;
LW2_1 = [-0.91768408531128897732 0.71590477957822040711 0.31323971951569262728
0.18313763042768282929 1.0552138770856311911];

% Output 1
y1_step1.ymin = -1;
y1_step1.gain = 2.81047765800457;
y1_step1.xoffset = 4.270833333;

% ===== SIMULATION ========

% Dimensions
Q = size(x1,1); % samples

% Input 1
x1 = x1';
xp1 = mapminmax_apply(x1,x1_step1);

% Layer 1
a1 = tansig_apply(repmat(b1,1,Q) + IW1_1*xp1);
13
% Layer 2
a2 = repmat(b2,1,Q) + LW2_1*a1;

% Output 1
y1 = mapminmax_reverse(a2,y1_step1);
y1 = y1';
end

% ===== MODULE FUNCTIONS ========

% Map Minimum and Maximum Input Processing Function


function y = mapminmax_apply(x,settings)
y = bsxfun(@minus,x,settings.xoffset);
y = bsxfun(@times,y,settings.gain);
y = bsxfun(@plus,y,settings.ymin);
end

% Sigmoid Symmetric Transfer Function


function a = tansig_apply(n,~)
a = 2 ./ (1 + exp(-2*n)) - 1;
end

% Map Minimum and Maximum Output Reverse-Processing Function


function x = mapminmax_reverse(y,settings)
x = bsxfun(@minus,y,settings.ymin);
x = bsxfun(@rdivide,x,settings.gain);
x = bsxfun(@plus,x,settings.xoffset);
end

Am denumit acest program “myNeuralNetworkFunction.m”:

14
Am inceput sa introduc valori in vectorul de intrare x1, din functia
“myNeuralNetworkFunction.m”, pentru a verifica daca reteaua neuronala imi calculeaza
vectorul de iesire (care este reprezentat de valorile puterii de a realiza activitati a fiecarei
persoane din firma) intr-un mod correct.
Valorile introduse in vectorul de intrare x1 au fost preluate din urmatoarele doua coloane:

Programul a fost testat in felul urmator:


Testul 1)

15
Testul 2)

Testul 3)

16
Testul 4)

Testul 5)

17
Testul 6)

Testul 7)

18
Testul 8)

Testul 9)

19
Testul 10)

Testul 11)

20
Testul 12)

Testul 13)

21
Testul 14)

Testul 15)

22
Testul 16)

Testul 17)

23
Testul 18)

Testul 19)

24
Testul 20)

Am creat un nou vector, sub forma unei coloane, pe care am denumit-o „Puterea calculata
cu ajutorul retelei neuronale”, in care am introdus valorile obtinute in urma testelor realizate.
Acea coloana am alaturat-o tabelului initial din Excel (care continea valorile initiale), pentru a
putea vizualiza usor comparatiile dintre valori:

25
Am creat un nou tabel in Excel, care pe prima coloana (denumita „Puterea calculata cu
ajutorul retelei neuronale) are valorile obtinute in urma testarii retelei, pe a doua coloana
(denumita „Puterea calculata folosind formula Puterea=Munca/Timp) are valorile initiale ale
Puterii si pe ultima coloana (denumita „Diferenta dintre cele doua puteri calculate”) am
introdus valorile, in modul, a diferentei dintre cele doua puteri:

Se remarca faptul ca majoritatea diferentelor dintre cele doua puteri tind spre zero,
ceea ce inseamna ca reteaua neuronala a invatat foarte repede (intr-o secunda) si foarte bine sa
realizeze calculul puterii.

26
La finalul aplicatiei practice, am salvat toate datele oferite de programul Matlab si am
apasat butonul „Finish”.

27
Concluziile lucrarii

Principala deosebire a rețelelor neuronale artificiale față de alte sisteme electronice de


prelucrare a informațiilor îl constituie capacitatea de învățare foarte rapida, în urma
interacțiunii cu factorii din mediul înconjurător, care pot fi considerati ca date de intrare.
O reprezentare corectă a informațiilor, care să permită interpretarea, predicția și răspunsul
la un stimul extern, ca data de intrare, poate permite rețelei să construiască un model propriu
al procesului analizat.
Informațiile utilizate în procesul de învățare pot fi: informații disponibile a priori sau
perechi intrare-ieșire(care stabilesc relații de tipul cauză-efect) si modul de reprezentare
internă urmărește un set de reguli bine documentate.
Dupa cum s-a aratat si in aceasta lucrare, domeniile în care rețelele neuronale artificiale
realizează modele eficiente sunt: aproximarile de functii, predictiile ale unor serii temporale si
in general, predictiile care se bazeaza pe recunoașterea unor tipare.

28
Bibliografie

1) „Identificare si predicţie cu retele neuronale”, cursul 7 al materiei „Identificarea


sistemelor”, Prof.dr.ing. Cristian VASAR;
2) „Clasificare cu o retea neuronala de tip perceptron avand 2 intrari”, laboratorul 8
al materiei „Identificarea sistemelor”, Prof.dr.ing. Cristian VASAR;
3) „Retele neuronale -Arhitecturi si Algoritmi-, colectia „Prelucrarea semnalelor”,
Prof.dr.ing. Stefan HOLBAN, editura Politehnica din Timisoara, 2002
4) „Retelele neuronale -Rezolvarea problemelor de asociere-, cursul 11, Prof.dr.ing.
Daniela ZAHARIE.
5) „Retea neurala”, Wikipedia:
https://ro.wikipedia.org/wiki/Re%C8%9Bea_neural%C4%83

29

S-ar putea să vă placă și