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 )
y1
u1
Y = y1
îÅ‚ Å‚Å‚
wk ,1
x1
ïÅ‚ śł
M y2
yk
wk ,2
ïÅ‚ śł
uk
x2
ïÅ‚ śł
M
M
M
M
ïÅ‚ śł
yK
uK
yK
ðÅ‚ ûÅ‚K×1
wk ,S
xS
îÅ‚W1 W2 L WK Å‚Å‚
X = x1
W = = w1,1 w2,1 L wK ,1
îÅ‚ Å‚Å‚
îÅ‚ Å‚Å‚
ðÅ‚ ûÅ‚
ïÅ‚x śł
ïÅ‚w w2,2 L wK śł
2
1,2 ,2
ïÅ‚ śł
ïÅ‚ śł
ïÅ‚ śł
M ïÅ‚ śł
M M O M
ïÅ‚ śł
ïÅ‚ śł
ðÅ‚xS ûÅ‚S×1 1,S ,S
ðÅ‚w w2,S L wK ûÅ‚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 )
y1
u1
wk ,1
x1
M
yk
wk ,2
uk
x2
M
M
M
yK
uK
wk ,S
xS
W = w1,1 w2,1 L wK ,1
X = x1
îÅ‚ Å‚Å‚ îÅ‚ Å‚Å‚
U = u1 = w1,1x1 + w1,2x2 +Lw1,S xS = ?
îÅ‚ Å‚Å‚ îÅ‚ Å‚Å‚
ïÅ‚w w2,2 L wK śł
ïÅ‚x śł
ïÅ‚u śł ïÅ‚
1,2 ,2
2 w2,1x1 + w2,2x2 +Lw2,S xS śł
ïÅ‚ śł
ïÅ‚ śł 2
ïÅ‚ śł ïÅ‚ śł
ïÅ‚ śł
ïÅ‚ śł M M O M
M
ïÅ‚ śł ïÅ‚ śł
M M
ïÅ‚ śł
ïÅ‚ śł
ïÅ‚ śł ïÅ‚ śł
1,S ,S
ðÅ‚xS ûÅ‚S×1
ðÅ‚w w2,S L wK ûÅ‚S×K ðÅ‚uK ûÅ‚K×1 K ,1 ,2 ,S
ðÅ‚w x1 + wK x2 +LwK xS ûÅ‚
function [ Y ] = dzialaj1 ( W , X )
y1
u1
wk ,1
x1
M
yk
wk ,2
uk
x2
M
M
M
yK
uK
wk ,S
xS
Y = y1 = îÅ‚ f u1 Å‚Å‚
îÅ‚ Å‚Å‚ ( )
ïÅ‚
ïÅ‚ śł
y2 f u2 śł
( )śł
ïÅ‚
ïÅ‚ śł
ïÅ‚ śł
ïÅ‚ śł
M M
ïÅ‚
ïÅ‚ śł
yK
( )śł
ïÅ‚ śł
ðÅ‚ ûÅ‚K×1 f uK
ðÅ‚ ûÅ‚
1.5
1 gdy u e" 0
Å„Å‚
1
y = f u =
( )
òÅ‚
ół0 gdy u < 0
0.5
1 0
y = f u =
( )
1+ e-²u
-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 % żądane wyjścia sieci:
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 )
" 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 = P ( : , nrPrzykladu ) ;
Y = dzialaj1 ( W , X ) ;
% oblicz błędy na wyjściach
D = T ( : , nrPrzykladu ) Y ;
% oblicz poprawki wag
dW = ...
% dodaj poprawki do wag
W = W + dW ;
end % i to wszystko n razy
Wpo = W ;
function [ Wpo ] = ucz1 ( Wprzed , P , T , n )
y1
Y = y1 D = d1
îÅ‚ Å‚Å‚ îÅ‚ Å‚Å‚
u1
ïÅ‚ śł ïÅ‚ śł
wk ,1 y2 d2
x1
ïÅ‚ śł ïÅ‚ śł
M
y2
ïÅ‚ śł ïÅ‚ śł
wk ,2 M M
u2
x2
ïÅ‚ śł ïÅ‚ śł
yK
ðÅ‚ ûÅ‚K×1 ðÅ‚dK ûÅ‚K×1
M
M
M
yK t1
îÅ‚ Å‚Å‚
uK
w2,5 ïÅ‚t śł
x5
2
ïÅ‚ śł
ïÅ‚ śł
M
ïÅ‚ śł
ðÅ‚tK ûÅ‚K×1
X = x1 dW = dw1,1 dw2,1 L dwK ,1
îÅ‚ Å‚Å‚ îÅ‚ Å‚Å‚
ïÅ‚x śł ïÅ‚dw dw2,2 L dwK śł
2 1,2 ,2
ïÅ‚ śł ïÅ‚ śł
dw2,5 = ?
ïÅ‚ śł ïÅ‚ śł
M M M O M
ïÅ‚ śł ïÅ‚dw dw2,5 L dwK śł
ðÅ‚xS ûÅ‚S×1 1,S ,S
ðÅ‚ ûÅ‚S×K
" 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 % żądane wyjścia sieci:
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 )
" sprawdzenie:
% wejścia sieci:
czlowiek = [ 2 ; % we 1 - ile ma nóg
0.2 ; % we 2 - czy żyje w wodzie - Otylia
0.2 ; % we 3 - czy umie latać - Adam
0.1 ; % we 4 - czy ma pióra - Winnetou
0 ] % we 5 - czy jest jajorodny
odp = dzialaj1 ( Wpo , czlowiek ) % ???
" sprawdzenie:
% wejścia sieci:
nietoperz = [ ? ; % 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
" 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
k - liczba pokazów w epoce
- liczba przykładów pokazywanych w jednej epoce uczenia
do zrobienia
" opracowany na zajęciach zestaw init1-dzialaj1-ucz1-test1
nazwij init1-dzialaj1-ucz1a-test1a
" opracuj kolejne:
init1-dzialaj1-ucz1b-test1b
funkcja ucz1b rysuje wykres błędu średniokwadratowego podczas uczenia
(w kolejnych epokach)
do zrobienia
" opracowany na zajęciach zestaw init1-dzialaj1-ucz1-test1
nazwij init1-dzialaj1-ucz1a-test1a
" opracuj kolejne:
init1-dzialaj1-ucz1c-test1c
funkcja ucz1c rysuje wykres błędu średniokwadratowego
oraz wykres liczby błędnych klasyfikacji podczas uczenia
do zrobienia
" opracowany na zajęciach zestaw init1-dzialaj1-ucz1-test1
nazwij init1-dzialaj1-ucz1a-test1a
" opracuj kolejne:
init1-dzialaj1-ucz1d-test1d
funkcja ucz1d rysuje wykres błędu średniokwadratowego
oraz wykres liczby błędnych klasyfikacji podczas uczenia
i wykres wszystkich wag sieci
do zrobienia
" opracowany na zajęciach zestaw init1-dzialaj1-ucz1-test1
nazwij init1-dzialaj1-ucz1a-test1a
" opracuj kolejne:
init1-dzialaj1-ucz1dd-test1dd
funkcja ucz1dd rysuje wykres błędu średniokwadratowego
oraz wykres liczby błędnych klasyfikacji podczas uczenia
i wykresy wag poszczególnych neuronów
do zrobienia
" opracowany na zajęciach zestaw init1-dzialaj1-ucz1-test1
nazwij init1-dzialaj1-ucz1a-test1a
" opracuj kolejne:
init1-dzialaj1-ucz1e-test1e
funkcja ucz1e rysuje wykres błędu średniokwadratowego
oraz wykres liczby błędnych klasyfikacji podczas uczenia
i wykresy wag poszczególnych neuronów
i granice decyzyjne poszczególnych neuronów
do zrobienia
" &
Wyszukiwarka
Podobne podstrony:
Jak korygować odliczony VAT z niezapłaconych faktur w 2013 r – instrukcja dla dłużnikainstrukcja dla kandydataMatlab instrukcjeId 09 Instrukcja dla toromistrzaInstrukcja dla komisarzy krolew NieznanyInstrukcja dla Sygic09 jak skutecznie skorzystac z ulgi na zle dlugi instrukcja dla wierzycielainstrukcja dla nauczyciela01 Traktat Lizboński instrukcja dla początkującychinstrukcja dla amatorow xDwięcej podobnych podstron