Laboratorium Modelowania i Symulacji

Ćwiczenie 4

Aproksymacja funkcji za pomocą sztucznej sieci neuronowej

Program ćwiczenia

Przed wykonaniem kolejnych punktów programu ćwiczenia należy dokładnie zapoznać się z załączonymi programami w języku Matlab,

Wybierając odpowiednie parametry wejściowe uruchomić program f1 obliczania wartości funkcji sin(x)/x przyjmując M = 100, Pmax = 1, a następnie wywołać program aproksymacji aprn przyjmując eg = 0.001,

zbadać wpływ zmian współczynnika uczenia lr i momentum mc na przebieg procesu uczenia,

zbadać wpływ zmian struktury sieci na przebieg procesu uczenia,

zbadać wpływ zmian parametru Pmax na przebieg procesu uczenia

Uruchomić program f2 obliczania wartości funkcji sin(x)/x, a następnie wywołać program aproksymacji aprn,

Napisać program w języku Matlab obliczania wartości indywidualnie wybranej funkcji, a następnie wykonać obliczenia według schematu z p. 1.2.

Sprawozdanie

    1. Sprawozdanie powinno zawierać raport z przebiegu ćwiczenia z wykresami otrzymanych przebiegów sygnałów i parametrów oraz uwagami i wnioskami.

    2. Programy wykorzystywane w ćwiczeniu

3.1. f1.m - generowanie funkcji sin(x)/x

function[P,T]=f1();

P=[0:0.02:1];

T=sin(10*P)./(10*P);

T(1)=1;

3.2. f2.m - funkcja f2

P=-1:0.1:1; % Wejścia

% Wyjścia

T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 .1336 -.2013 -.4344 ...

-.5000 -.3930 -.1647 .0988 .3072 .3960 .3449 .1816 -.0312 -.2189 ...

-.3201];

3.3. aprn.m - aproksymacja funkcji za pomocą sieci neuronowej

function[]=aprn(P,T,em);

% rozmieszczenie okien graficznych

close all;

figure(1); clf;

set(figure(1),'Position',[5,350,375,270]);

figure(2); clf;

set(figure(2),'Position',[420,350,375,270]);

figure(3); clf;

set(figure(3),'Position',[420,0,375,270]);

[m,n]=size(T);

lr=5/n; % Wsp. szybkości uczenia

mc=0.98; % Momentum

%em=0.001; % Zadany błąd aproksymacji

clear er; e=10;

hold on;

[R,Q]=size(P); % Liczba wejść=1, Liczba wzorców

S1=15; % Liczba neuronów warstwy1=15

[S2,Q]=size(T); % Liczba neuronów warstwy2=1

% Początkowe wartości współczynników wagowych

[W1,B1]=nwtan(S1,R); dW1=0*W1; dB1=0*B1; W1=0.5*W1;

[W2,B2]=rands(S2,S1); dW2=0*W2; dB2=0*B2; W2=0.25*W2;

% Uczenie sieci

i=1;

while e>em,

A1=tansig(W1*P,B1);

A2=purelin(W2*A1,B2);

P1=A1;

E=T-A2;

e=sumsqr(E); % Pierw. z sumy kwadratów błędów

er(i)=e;

% Wsteczna propagacja błędu

D2=deltalin(A2,E);

D1=deltatan(A1,D2,W2);

% Obliczanie skorygowanych wsp. wagowych

[dW1,dB1]=learnbpm(P,D1,lr,mc,dW1,dB1);

W1=W1+dW1; B1=B1+dB1;

[dW2,dB2]=learnbpm(P1,D2,lr,mc,dW2,dB2);

W2=W2+dW2; B2=B2+dB2;

% Rysowanie wykresów

if rem(i,100)==0, i,e,

figure(1); clf;

hold on;

A1=tansig(W1*P,B1);

plot(P,T,'b+');

A2=purelin(W2*A1,B2);

plot(P,A2,'yo');

title('Funkcja (b+), model (yo)');

hold off;

figure(2);

ploterr(er,em);

title('Suma kwadratów błędów');

end;

i=i+1;

end;

end;

% Testowanie modelu

figure(3);

Pt=2*max(P)*(rand(1,length(P))-0.25);

plot(P,T,'b');

hold on;

At1=tansig(W1*Pt,B1);

At2=purelin(W2*At1,B2);

plot(Pt,At2,'y.');

title('Funkcja (b), model (y)');

hold off;

Literatura

Hertz J., Krogh A., Palmer R. G.: Wstęp do teorii obliczeń neuronowych. WNT. Warszawa. 1993, 1995.

Korbicz J., Obuchowicz A., Uciński D.: Sztuczne sieci neuronowe. Podstawy i zastosowania. Akad. Ofic. Wyd. Warszawa. 1994.

Żurada J., Barski M., Jędruch W.: Sztuczne sieci neuronowe. PWN. Warszawa. 1996.