sieci jednowarstwowe w ATLABie LABORKA Piotr Ciskowski
trzy funkcje do obsługi sieci jednowarstwowej : init1.m - tworzy sieć, inicjuje wagi (losowo) dzialaj1.m symuluje działanie sieci (na pojedynczym przykładzie) ucz1.m - uczy sieć na zadanym ciągu uczącym i jeden skrypt: test1.m - sieć 5-3, przykład: rozpoznawanie zwierząt
init1.m - tworzy sieć, czyli jej macierz wag i wypełnia ją wartościami losowymi z zakresu -0.1 0.1 - w sieciach jednowarstwowych rezygnujemy z wejścia zerowego biasu function [ W ] = init1 ( S, K ) % funkcja tworzy sieć jednowarstwową % i wypełnia jej macierz wag wartościami losowymi % z zakresu od -0.1 do 0.1 % parametry: S liczba wejsć do sieci % K liczba neuronów w warstwie % wynik: W macierz wag sieci W =...
function [ W ] = init1 ( S, K ) x 1 x 2 x S w k,1 w k,2 w k, S u 1 u k u K y 1 y k y K Y = y1 y 2 y K K 1 X = x1 x 2 x S S 1 W = W1 W2 L WK = w1,1 w2,1 L wk,1 w1,2 w2,2 w L K,2 O w w L w 1, S 2, S K, S S K
dzialaj1.m - dla sieci o danej macierzy wag W dla podanego na wejście wektora X oblicza wektor wyjść Y - neurony warstwy mają sigmoidalną funkcję aktywacji function [ Y ] = dzialaj1 ( W, X ) % funkcja symuluje działanie sieci jednowarstwowej % parametry: W macierz wag sieci % X wektor wejść do sieci % sygnał podany na wejście % wynik: Y wektor wyjść sieci % sygnał na wyjściu sieci beta = 5 ; U =... Y =...
function [ Y ] = dzialaj1 ( W, X ) u 1 y 1 x 1 x 2 x S w k,1 w k,2 w k, S u k u K y k y K X = x1 x 2 x S S 1 W = w1,1 w2,1 L wk,1 w1,2 w2,2 w L K,2 O w w L w 1, S 2, S K, S S K U = u1 = w1,1 x1 + w1,2 x2 + Lw1, S xs =? u w x + w x + Lw x 2 2,1 1 2,2 2 2, S S u w x + w x + Lw x K K 1 K,1 1 K,2 2 K, S S
function [ Y ] = dzialaj1 ( W, X ) u 1 y 1 x 1 x 2 x S w k,1 w k,2 w k, S u k u K y k y K Y ( ) ( ) = y1 = f u1 y 2 f u2 y f ( u ) K K 1 K
y y 1 gdy u 0 = f ( u) = 0 gdy u < 0 1 = f ( u) = 1 + u e β 1.5 1 0.5 0-0.5-10 -8-6 -4-2 0 2 4 6 8 10 ( ) = = ( ) f ' u... y 1 y» beta = 1 ;» U = od -5 do 5 co 0.01;» Y =...» plot ( U, Y )» hold on» beta = 2, Y =..., plot...» beta = 5, Y =..., plot...» beta = 10, Y =..., plot...
przykład - rozpoznawanie zwierząt - w pliku test1.m przykład 1 przykład 2 przykład 3 % wejścia sieci: P = [ 4 2-1 ; % we 1 - ile ma nóg 0.01-1 3.5 ; % we 2 - czy żyje w wodzie 0.01 2 0.01 ; % we 3 - czy umie latać -1 2.5-2 ; % we 4 - czy ma pióra -1.5 2 1.5 ] % we 5 - czy jest jajorodny przykład 1 przykład 2 przykład 3 T = [ 1 0 0 ; % ssak 0 1 0 ; % ptak 0 0 1 ] % ryba Wprzed = init1 ( 5, 3 ) Yprzed = dzialaj1 ( Wprzed, P ) % Wpo = ucz1 ( Wprzed, P, T, 100 ) % Ypo = dzialaj1 ( Wpo, P ) % żądane wyjścia sieci:
ucz1.m - dla sieci o danej macierzy wag W uczy sieć przez zadaną liczbę kroków na podanym ciągu uczącym macierze P i T function [ Wpo ] = ucz1 ( Wprzed, P, T, n ) % funkcja uczy sieć jednowarstwową % na podanym ciągu uczącym (P,T) % przez zadaną liczbę kroków (n) % parametry: Wprzed macierz wag sieci przed uczeniem % P ciąg uczący przykłady - wejścia % T - ciąg uczący żądane wyjścia % dla poszczególnych przykładów % n - liczba kroków % wynik: Wpo macierz wag sieci po uczeniu
ucz1.m - dla sieci o danej macierzy wag W uczy sieć przez zadaną liczbę kroków na podanym ciągu uczącym macierze P i T function [ Wpo ] = ucz1 ( Wprzed, P, T, n ) % schemat funkcji: % losuj numer przykładu % podaj przykład na wejścia i oblicz wyjścia % oblicz błędy na wyjściach % oblicz poprawki wag % dodaj poprawki do wag % i to wszystko n razy
function [ Wpo ] = ucz1 ( Wprzed, P, T, n ) liczbaprzykladow = size ( P, 2 ) ; W = Wprzed ; for i = 1 : n, % losuj numer przykładu nrprzykladu =... % podaj przykład na wejścia i oblicz wyjścia X =... Y =... % oblicz błędy na wyjściach D =... % oblicz poprawki wag dw =... % dodaj poprawki do wag W =... end % i to wszystko n razy Wpo = W ;
function [ Wpo ] = ucz1 ( Wprzed, P, T, n ) x 1 x 2 x 5 X = x1 x 2 x S S 1 w k,1 w k,2 w 2,5 u 1 u 2 dw = dw1,1 dw2,1 L dwk,1 dw1,2 dw2,2 dw L K, 2 O dw dw L dw 1, S 2, 5 K, S S K K y 1 y 2 y K Y = y1 y 2 y u t1 dw 2,5 =? K K 1 t 2 t K K 1 D = d1 d 2 d K K 1
przykład - rozpoznawanie zwierząt - w pliku test1.m przykład 1 przykład 2 przykład 3 % wejścia sieci: P = [ 4 2-1 ; % we 1 - ile ma nóg 0.01-1 3.5 ; % we 2 - czy żyje w wodzie 0.01 2 0.01 ; % we 3 - czy umie latać -1 2.5-2 ; % we 4 - czy ma pióra -1.5 2 1.5 ] % we 5 - czy jest jajorodny przykład 1 przykład 2 przykład 3 T = [ 1 0 0 ; % ssak 0 1 0 ; % ptak 0 0 1 ] % ryba Wprzed = init1 ( 5, 3 ) Yprzed = dzialaj1 ( Wprzed, P ) Wpo = ucz1 ( Wprzed, P, T, 100 ) Ypo = dzialaj1 ( Wpo, P ) % żądane wyjścia sieci:
sprawdzenie: % wejścia sieci: czlowiek = [ 2 ; % we 1 - ile ma nóg 0.2 ; % we 2 - czy żyje w wodzie - Otylia / Konrad 0.2 ; % we 3 - czy umie latać - Adam / Kamil 0.1 ; % we 4 - czy ma pióra - Winnetou / F. Baumgautner 0.05 ] % we 5 - czy jest jajorodny Kuba W. odp = dzialaj1 ( Wpo, czlowiek ) %???
sprawdzenie: % wejścia sieci: nietoperz = [? ; % we 1 - ile ma nóg? ; % we 2 - czy żyje w wodzie? ; % we 3 - czy umie latać? ; % we 4 - czy ma pióra? ] % we 5 - czy jest jajorodny strus =... waz =... odp = dzialaj1 ( Wpo,... )
do zrobienia sprawdź działanie / uczenie sieci przy innym kodowaniu wyjść: przykład 1 przykład 2 przykład 3 % wejścia sieci: P = [ 4 2-1 ; % we 1 - ile ma nóg 0.01-1 3.5 ; % we 2 - czy żyje w wodzie 0.01 2 0.01 ; % we 3 - czy umie latać -1 2.5-2 ; % we 4 - czy ma pióra -1.5 2 1.5 ] % we 5 - czy jest jajorodny przykład 1 przykład 2 przykład 3 % żądane wyjścia sieci: T = [ 1 1 0 ; % dwa zera na wyjściach 1 0 1 ] % oznaczają brak decyzji % ssak ptak ryba Wprzed = init1 ( 5, 2 ) Yprzed = dzialaj1 ( Wprzed, P ) Wpo = ucz1 ( Wprzed, P, T, 100 ) Ypo = dzialaj1 ( Wpo, P )
do zrobienia sprawdź działanie / uczenie sieci przy innym kodowaniu wyjść dodaj do funkcji ucz1 rysowanie wykresu błędu średniokwadratowego w kolejnych krokach uczenia do funkcji ucz1 dodaj parametry: m - maksymalna liczba kroków uczenia e - błąd, który sieć ma osiągnąć - sieć będzie się uczyć do osiągnięcia zadanego błędu, ale nie dłużej niż przez maksymalną liczbę kroków