Sunteți pe pagina 1din 8

FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.

2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE

APLICAŢII MATLAB - REŢELE NEURONALE

1. Scrieţi un program MATLAB care să implementeze operaţiile cu matrici.

Rezolvare:
%Operatii cu matrici
clear all
close all
clc
disp('definirea unei constante: x=2')
x=2
pause
disp('definirea unui vector: y = [1 2 3 4 5]')
y = [1 2 3 4 5]
pause
disp('def. unei matr.:A=[1 2 3; 4 5 6;7 8 9],B = [10 7 6;3 2 0;2 4 5]')
A = [1 2 3; 4 5 6; 7 8 9]
B = [10 7 6;3 2 1;2 4 5]
pause
disp('referirea unui element al unei matrici: A(2,1)')
A(2,1)
pause
disp('adunarea a doua matrici: C = A + B')
C = A + B
pause
disp('scaderea a doua matrici: D = A - B')
D = A - B
pause
disp('inmultirea a doua matrici: E = A * B')
E = A * B
pause
disp('inmultirea elementelor corespondente: F = A .* B')
F = A .* B
pause
disp('ridicarea la puterea x: G = A ^ x')
G = A ^ x
pause
disp('ridicarea la putere a elem. corespondente: H = A .^x')
H = A .^ x
pause
disp('impartirea a doua matrici: I = A / B')
I = A / B
pause
disp('impartirea elem. Coresp. a doua matrici: J = A ./ B')
J = A ./B
pause
disp('transpusa unei matrici: K = A` ')
K = A'
pause
disp('schimbarea dimensiunii unei matrici: reshape(A,1,9)')
L = reshape(A,1,9)

1
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE

2. Scrieţi un program MATLAB care să genereze vectori/matrici şi să afişeze informaţii


referitoare la aceştia/acestea.

Rezolvare:

%Generarea vectorilor si matricilor


clear all
close all
clc
disp('generarea unei matrici nule cu 2 linii si 4 coloane:zeros(2,4)')
A = zeros(2,4)
pause
disp('gener. unei matrici unitate cu 3 linii si 2 coloane;ones(3,2)')
ones(3,2)
pause
disp('gener. unei matrici identice cu 3 linii si 3 coloane: eye(3)')
eye(3)
pause
disp('generarea unui vector cu pas liniar: a = 1:0.1:2')
a = 1:0.1:2
pause
disp('generarea unui vector cu pas logaritmic b = logspace(1,3,5)')
b = logspace(1,3,5)
pause
disp('afisarea dimensiunilor unei matrici: size(A)')
A
size(A)
pause
disp('afisarea dimensiunii unui vector: length(x)')
a
length (a)

2
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE

3. Realizarea unui program MATALB care foloseşte instrucţiunile de control.

Rezolvare:
%Instructiuni de control
clear all
close all
clc
disp('repetarea unei secvente de instructiuni de un nr. de ori: FOR')
disp(' ')
for i=1:1:4
disp('acest text va fi afisat de 4 ori')
end
pause
disp(' ')
disp('executarea conditionata a instructiunilor: IF, ELSEIF, ELSE')
disp(' ')
nr = input('introduceti un numar: ')
if nr > 10
disp('nr > 10')
elseif nr < 10
disp('nr < 10')
else
disp ('nr = 10')
end
pause
disp(' ')
disp('Repetarea unui grup de inst. de un nr. nedefinit de ori: WHILE')
disp(' ')
i=4
while i>0
i=i-1
end

3
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE
4. Scrieţi un program MATLAB care să ilustreze posibilităţile de creare a graficelor 2D şi 3D. În
acest sens reprezentaţi o distribuţie gaussiană 2D respectiv 3D.

Rezolvare:
%Grafice 2D si 3D
%clear all
%close all
%clc
sigma=3;
disp('grafic 2D')
x=-1:.005:1;
y=(1/2*pi*sigma^2)*exp(-(x.^2/2*sigma^2));
plot(x,y)
title('Gaussian 2D')
xlabel('Axa Ox')
ylabel('Axa Oy')
pause
disp('grafic 3D')
x=-1:.01:1;
y=-1:.01:1;
[X,Y] = meshgrid(x,y);
Z=(1/2*pi*sigma^2)*exp(-(X.^2+Y.^2)/2*sigma^2);
figure
mesh(Z)
title('Gaussian 3D')
xlabel('Axa Ox')
ylabel('Axa Oy')
zlabel('Axa Oz')

4
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE

5. Reprezentaţi grafic câteva dintre funcţiile de activare (denumite în MATLAB “transfer


functions”) ale unui neuron disponibile în Neural Networks Toolbox.

Indicaţie: Pentru a cunoaşte totalitatea funcţiilor specifice, predefinite, disponibile pentru


domeniul reţele neuronale tastaţi “help nnet”. Dacă se doresc amănunte despre o anumită
funcţie, acestea se pot obţine prin: “help denumirea_funcţiei”.

Rezolvare:
%Reprezentare functii de activare
clear all
close all
clc
n = -4:0.001:4;
%functie de activare de tip sigmoid
a1 = logsig(n);
%functie de acticare de tip treapta
a2 = hardlim(n);
%functie de activare de tip liniar, cu saturatie
a3 = satlins(n);
%functie de activare radiala
a4 = radbas(n);
subplot(1,4,1)
plot(n,a1,'linewidth',2,'color','b');
axis([-4 4 -1.1 1.1])
title('sigmoid')
subplot(1,4,2)
plot(n,a2,'linewidth',2,'color','b');
axis([-4 4 -1.1 1.1])
title('treapta')
subplot(1,4,3)
plot(n,a3,'linewidth',2,'color','b')
axis([-4 4 -1.1 1.1])
title('liniar')
subplot(1,4,4)
plot(n,a4,'linewidth',2,'color','b');
axis([-4 4 -1.1 1.1])
title('radial')

5
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE

6. Un neuron “j” primeşte semnale de la alţi patru neuroni ale căror nivele de activare sunt: 0,1;
0,3; - 0,8; 0,5. Ponderile sinaptice ale neuronului “j” sunt: 0,9; 0,7; 0,1; 0,7. Calculaţi ieşirea
neuronului “j” în următoarele cazuri:
a) neuronul este liniar;
b) neuronul are o funcţie de activare sigmoidală.
Se consideră pragul de activare θk = 0,5.

Indicaţie: Modelul neuronului va fi implementat folosind funcţiile de activare purelin pentru


cazul neuronului liniar respectiv logsig pentru cazul neuronului neliniar.

Rezolvare:
%Implementare neuron
clear all
close all
clc
% definire prag de activare
theta = 0.5
% x = vector de intrare
x = [0.1 0.3 -0.8 0.5]
% w = vectorul ponderilor sinaptice
w = [0.9 0.7 0.1 0.7]
% y = iesirea neuronului
y1 = purelin(x*w'-theta)
y2 = logsig(x*w'-theta)

6
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE
7. Perceptronul simplu poate fi folosit la implementarea unor funcţii logice. Verificaţi practic
această afirmaţie prin intermediul codului sursă MATLAB aferent unui perceptron simplu care
să efectueze funcţiile logice ŞI, SAU şi SAU EXCLUSIV. Justificaţi comportamentul
perceptronului simplu în cazul funcţiei SAU EXCLUSIV.
Indicaţie: La implementarea RNA se va folosi funcţia newp, a cărei descriere este oferită în
continuare:
NEWP - creează un perceptron
Sintaxa: net = newp(pr,s,tf,lf)
în care:
PR – Rx2, matrice de valori min şi max pentru R intrări.
S – Număr de neuroni
TF – Funcţie de transfer, implicit funcţia prag ('hardlim').
LF – Funcţia de învăţare, implicit 'learnp'.
Rezolvare:
%Implementare unei retele neuronale de tip perceptron simplu
clear all
close all
clc
% tipar de intrare
Pantr = [0 0 1 1;0 1 0 1]
% tipare de iesire
T_SAU = [0 1 1 1]
T_SI = [0 0 0 1]
T_XOR = [0 1 1 0]
% se implementeaza 3 RNA perceptron
net1 = newp([0 1;0 1],1);
net2 = newp([0 1;0 1],1);
net3 = newp([0 1;0 1],1);
% se antreneaza 3 RNA perceptron in rezolvarea
% problemelor SAU, SI, SAU-EXCLUSIV
% implicit numarul de epoci = 100
% iar pentru a modifica nr. epoci se utilizeaza
%net1.trainParam.epochs = 20;
net1 = train(net1,Pantr,T_SAU);
net2 = train(net2,Pantr,T_SI);
net3 = train(net3,Pantr,T_XOR);
% se testeaza performantele retelelor pentru vectorii de antrenament
y1a = sim(net1,Pantr)
y2a = sim(net2,Pantr)
y3a = sim(net3,Pantr)
% se testeaza performantele retelelor pentru vectorii de test
% astfel se poate testa capacitatea de generalizare a retelelor
Ptest = [0.1 0.2 0.9 0.8;0.2 0.7 0.1 0.9];
y1t = sim(net1,Ptest)
y2t = sim(net2,Ptest)
y3t = sim(net3,Ptest)

Observaţie: Pentru reţelele neuronale care implementează funcţiile ŞI şi SAU logic se constată o
funcţionare corespunzătoare atât pentru tiparele de antrenament cât şi pentru cele de test. Pentru
cazul SAU-EXCLUSIV se constată imposibilitatea rezolvării corecte a problemei, atât pentru
datele de atrenament cât şi pentru cele de test. Explicaţia provine din faptul că primele două
cazuri (ŞI, SAU) reprezintă probleme liniar separabile, pe când problema SAU-EXCLUSIV nu
este liniar separabilă.

7
FACULTATEA DE MATEMATICĂ–INFORMATICĂ 15.03.2020 14:59:40
SPECIALIZAREA INFORMATICĂ
DISCIPLINA: REŢELE NEURONALE

8. Verificaţi capacitatea de predicţie liniară pentru o RNA ADALINE în cazul eşantioanelor


prelevate dintr-o funcţie de tip sinusoidal, la care frecvenţa se modifică liniar în intervalul [0 6π].
Consideraţi o predicţie de ordinul 5, adică eşantionul x(n) să fie prezis pe baza x(n-1), x(n-2),
…, x(n-5).

Indicaţie: La implementarea RNA se va folosi funcţia newlin, a cărei descriere este oferită în
continuare:

NEWLIN - creează un strat liniar


Sintaxă: net = newlin(PR,S,ID,LR)
în care:
PR – Rx2, matrice de valori min şi max pentru R intrări.
S – Numărul de neuroni de ieşire.
ID – Vectorul întârzierilor, implicit = [0].
LR – Rata de învăţare, implicit = 0.01.

Rezolvare:
%Predictie liniara
clear all
close all
clc
% generarea si reprezentarea functiei tinta
x = 0:0.1:6*pi;
fr = linspace(1,3,length(x));
y = sin(x.*fr);
plot(x,y);
hold on
% vectori de intrare si iesire P respectiv T
P = con2seq(y);
T = P;
% implementarea retelei neuronale
lr = 0.1;
intarzieri = [1 2 3 4 5];
net = newlin(minmax(y),1,intarzieri,lr);
% calculul esantionului curent din cele 5 esantioane intarziate
[net,ies,e]=adapt(net,P,T);
% reprezentarea grafica a rezultatelor
plot(x,cat(2,ies{:}),':r');
xlabel('Timp');
ylabel('Predictie (rosu) - Tinta – Eroare (verde) .-');
title('Semnalele Predictie, Tinta si Eroare');
plot(x,cat(2,e{:}),'.-g')
hold off

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