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
Sprawozdanie powinno zawierać raport z przebiegu ćwiczenia z wykresami otrzymanych przebiegów sygnałów i parametrów oraz uwagami i wnioskami.
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.