slajdy
Transkrypt
slajdy
sieci jednowarstwowe w MATLABie 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 ) x1 x2 ⋮ xS X = x1 x 2 ⋮ xS S ×1 wk ,1 wk ,2 ⋮ wk , S W = W1 u1 y1 uk ⋮ yk uK ⋮y K W 2 ⋯ W K = w1,1 w 1,2 ⋮ w1, S Y = y1 y 2 ⋮ yK K ×1 w2,1 w2,2 ⋮ w2, S ⋯ wK ,1 ⋯ wK ,2 ⋱ ⋮ ⋯ wK , 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 ) x1 x2 ⋮ xS X = x1 x 2 ⋮ xS S ×1 W = w1,1 w 1,2 ⋮ w1, S wk ,1 wk ,2 ⋮ wk , S w2,1 ⋯ wK ,1 w2,2 ⋯ wK ,2 ⋮ ⋱ ⋮ w2, S ⋯ wK , S S × K u1 y1 uk ⋮ yk uK ⋮y K U = u1 = w1,1 x1 + w1,2 x2 + ⋯ w1, S xS = ? u w x + w x +⋯w x 2,2 2 2, S S 2 2,1 1 ⋮ ⋮ uK K ×1 wK ,1 x1 + wK ,2 x2 + ⋯ wK , S xS function [ Y ] = dzialaj1 ( W , X ) x1 x2 ⋮ xS wk ,1 wk ,2 ⋮ wk , S u1 y1 uk ⋮ yk uK ⋮y K Y = y1 = f ( u1 ) y f u ( ) 2 2 ⋮ ⋮ y f u ( ) K K ×1 K 1.5 1 gdy u ≥ 0 y = f (u ) = 0 gdy u < 0 1 0.5 1 y = f (u ) = 1 + e− β u 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 ... 0 -0.5 -10 -8 -6 -4 -2 0 2 4 6 8 10 • przykład - rozpoznawanie zwierząt - w pliku test1.m P = [ przykład 1 przykład 2 przykład 3 4 0.01 0.01 -1 -1.5 2 -1 2 2.5 2 -1 3.5 0.01 -2 1.5 przykład 1 przykład 2 przykład 3 T = [ Wprzed Yprzed % Wpo % Ypo = = = = 1 0 0 1 0 0 init1 ( dzialaj1 ( ucz1 ( dzialaj1 ( 0 0 1 5 , 3 ) Wprzed , Wprzed , Wpo , ; ; ; ; ] % % % % % % wejścia sieci: 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 ; ; ] % % % % żądane wyjścia sieci: ssak ptak ryba P ) P , T , 100 ) P ) • ucz1.m - dla sieci o danej macierzy wag W uczy siec przez zadaną liczbę epok 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ę epok (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 epok % wynik: Wpo – macierz wag sieci po uczeniu • ucz1.m - dla sieci o danej macierzy wag W uczy siec przez zadaną liczbę epok 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 ) x1 x2 ⋮ x5 X = x1 x 2 ⋮ xS S ×1 u1 y1 u2 ⋮ y2 ⋮ w2,5 uK ⋮y K dW = dw1,1 dw 1,2 ⋮ dw1, S dw2,1 ⋯ dwK ,1 dw2,2 ⋯ dwK ,2 ⋮ ⋱ ⋮ dw2,5 ⋯ dwK , S S × K wk ,1 wk ,2 Y = y1 y 2 ⋮ yK K ×1 t1 t 2 ⋮ t K K ×1 dw2,5 = ? D = d1 d 2 ⋮ d K K ×1 • przykład - rozpoznawanie zwierząt - w pliku test1.m P = [ przykład 1 przykład 2 przykład 3 4 0.01 0.01 -1 -1.5 2 -1 2 2.5 2 -1 3.5 0.01 -2 1.5 przykład 1 przykład 2 przykład 3 T = [ Wprzed Yprzed Wpo Ypo = = = = 1 0 0 1 0 0 init1 ( dzialaj1 ( ucz1 ( dzialaj1 ( 0 0 1 5 , 3 ) Wprzed , Wprzed , Wpo , ; ; ; ; ] % % % % % % wejścia sieci: 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 ; ; ] % % % % żądane wyjścia sieci: ssak ptak ryba P ) P , T , 100 ) P ) • sprawdzenie: czlowiek = [ 2 0.2 0.2 0.1 0 ; ; ; ; ] % % % % % % wejścia sieci: we 1 - ile ma nóg we 2 - czy żyje w wodzie - Otylia we 3 - czy umie latać - Adam we 4 - czy ma pióra - Winnetou we 5 - czy jest jajorodny odp = dzialaj1 ( Wpo , czlowiek ) % ??? • sprawdzenie: nietoperz = [ ? ? ? ? ? ; ; ; ; ] % % % % % % wejścia sieci: we 1 - ile ma nóg we 2 - czy żyje w wodzie - Otylia we 3 - czy umie latać - Adam we 4 - czy ma pióra - Winnetou we 5 - czy jest jajorodny strus = ... waz = ... odp = dzialaj1 ( Wpo , ... ) do zrobienia • sprawdź działanie / uczenie sieci przy innym kodowaniu wyjść: P = [ przykład 1 przykład 2 przykład 3 4 0.01 0.01 -1 -1.5 2 -1 2 2.5 2 -1 3.5 0.01 -2 1.5 przykład 1 przykład 2 przykład 3 1 0 ptak 0 1 ryba T = [ 1 1 % ssak Wprzed Yprzed Wpo Ypo = = = = init1 dzialaj1 ucz1 dzialaj1 ( ( ( ( ; ; ; ; ] % % % % % % wejścia sieci: 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 ; ] % żądane wyjścia sieci: % dwa zera na wyjściach % oznaczają brak decyzji 5 , 2 ) Wprzed , P ) Wprzed , P , T , 100 ) Wpo , P ) do zrobienia • sprawdź działanie / uczenie sieci przy innym kodowaniu wyjść: P = [ przykład 1 przykład 2 przykład 3 4 0.01 0.01 -1 -1.5 2 -1 2 2.5 2 -1 3.5 0.01 -2 1.5 przykład 1 przykład 2 przykład 3 1 0 ptak 0 1 ryba T = [ 1 1 % ssak Wprzed Yprzed Wpo Ypo = = = = init1 dzialaj1 ucz1 dzialaj1 ( ( ( ( ; ; ; ; ] % % % % % % wejścia sieci: 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 ; ] % żądane wyjścia sieci: % dwa zera na wyjściach % oznaczają brak decyzji 5 , 2 ) Wprzed , P ) Wprzed , P , T , 100 ) Wpo , P ) do zrobienia • sprawdź działanie / uczenie sieci przy innym kodowaniu wyjść • dodaj do funkcji ucz1 rysowanie wykresu błędu średniokwadratowego w kolejnych epokach uczenia • do funkcji ucz1 dodaj parametry: – m - maksymalna liczba epok 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ę epok