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