z7 2neur 1neur.M, WAT, SEMESTR VIII, Metody i zadania rozpoznawania wzorców
[ Pobierz całość w formacie PDF ]
%Siec dwuwarstwowa - dwie klasy%Aproksymacja liniowaclearosie=[-20 20 -10 10];L=6;u1=[-4 0];u2=[5 2];u3=[2 -5];u4=[-10 6];u5=[0 8];u6=[0 -8];P=[u1;u2;u3;u4;u5;u6]'U=[ones(6,1) P']%det(U'*U)z=[-1 ;-1 ;-1;1;1;1];disp('Rozwiazanie analityczne')w=inv(U'*U)*U'*zwp=w;r=U*w-z;disp('Błšd aproksymacji')r=r'*rfigure(1);clf;subplot(2,2,1);newplot;hold on;[lw,lk]=size(P);kolor1='bs';kolor2='ro';for licz=1:lk;if z(licz)<=0plot(P(1,licz),P(2,licz),kolor2);elseplot(P(1,licz),P(2,licz),kolor1);end;end;kolor=['m-'];wrys=w;rprosta(wrys,osie,kolor);title('Analityczna dyskryminacja liniowa');z2=[-1 -1 ;-1 -1;-1 -1;1 -1;1 -1;-1 1];disp('Rozwiazanie analityczne')w=inv(U'*U)*U'*z2w1=w(:,1);w2=w(:,2);rprosta(w1,osie,'b--');rprosta(w2,osie,'b-');title('Analityczna dyskryminacja liniowa');%%%Funkcje TOOLBOXa% TRAINLM is a network training function% that updates weight and bias values according to Levenberg-Marquardt optimization.% You can create a standard network that uses TRAINLM with NEWFF.zakresy=[-20 20; -10 10]net=newff(zakresy,[2,1],{'tansig','purelin'});%% net.trainParam.epochs = 400;% net.trainParam.show = 20;% net.adaptFcn: 'trainb'T=z'net = train(net,P,T);disp('Wynik uczenia');%kolejne neurony w kolejnych wierszachdisp('Pierwsza warstwa')net.iw{1,1}net.b{1}disp('Druga warstwa')net.lw{2,1}net.b(2)%Testwynik=sim(net,P)disp('Weryfikacja wyniku');[T;wynik]figure(1);subplot(2,2,2);newplot;axis(osie);hold on;[lw,lk]=size(P);kolor1='bs';kolor1a='bo';kolor2='ro';kolor2a='rs';for licz=1:lk;if wynik(licz)<=0if z(licz)<=0plot(P(1,licz),P(2,licz),kolor2);elseplot(P(1,licz),P(2,licz),kolor2a);end;elseif z(licz)>0plot(P(1,licz),P(2,licz),kolor1);elseplot(P(1,licz),P(2,licz),kolor1a);end;end;end;title('Weryfikacja uczenia w sieci 2-warstwowej')figure(1);subplot(2,2,3);newplot;axis(osie);hold on;[lw,lk]=size(P);kolor1='bs';kolor1a='bo';kolor2='ro';kolor2a='rs';for licz=1:lk;if wynik(licz)<=0if z(licz)<=0plot(P(1,licz),P(2,licz),kolor2);elseplot(P(1,licz),P(2,licz),kolor2a);end;elseif z(licz)>0plot(P(1,licz),P(2,licz),kolor1);elseplot(P(1,licz),P(2,licz),kolor1a);end;end;end;title('Weryfikacja pierwszej warstwy')%kolejne neurony w kolejnych wierszachwrys(2:3)=net.iw{1,1}(1,:);wrys(1)=net.b{1}(1);kolor=['b-'];rprosta(wrys,osie,kolor);wrys(2:3)=net.iw{1,1}(2,:);wrys(1)=net.b{1}(2);kolor=['b--'];rprosta(wrys,osie,kolor);hold off;%Odczytywanie struktury neuronu z wyników obliczeń%Symulacja pierwszego neuronu pierwszej warstwyw1=zeros(3,1);w1(2:3)=net.iw{1,1}(1,:);w1(1)=net.b{1}(1);%disp('Wyjscie pierwszego neuronu pierwszej warstwy');y1=U*w1;%Symulacja drugiego neuronu pierwszej warstwyw2=zeros(3,1);w2(2:3)=net.iw{1,1}(2,:);w2(1)=net.b{1}(2);%disp('Wyjscie drugiego neuronu pierwszej warstwy');y2=U*w2;disp('Wyjcia pierwszej warstwy');Y=[y1,y2];Yf=tansig(Y)figure(1);subplot(2,2,4);newplot;hold on;oski=2*[floor(min(Yf(:,1))),ceil(max(Yf(:,1))), floor(min(Yf(:,2))),ceil(max(Yf(:,2)))];axis(oski);[lw,lk]=size(Yf);kolor1='bs';kolor2='ro';for licz=1:lw;if z(licz)<=0plot(Yf(licz,1),Yf(licz,2),kolor2);elseplot(Yf(licz,1),Yf(licz,2),kolor1);end;end;kolor=['m-'];wrys=zeros(3,1);wrys(2:3)=net.lw{2,1}(1,:);wrys(1)=net.b{2}(1);rprosta(wrys,oski,kolor);title('Weryfikacja drugiej warstwy');disp('Weryfikacja rachunkowa wyjsc drugiej warstwy')Yk=[ones(size(y1)) Yf]Q=Yk*wrys;[T',Q]
[ Pobierz całość w formacie PDF ]