Sztuczne sieci neuronowe Ćwiczenia

Transkrypt

Sztuczne sieci neuronowe Ćwiczenia
Sztuczne sieci neuronowe
Ćwiczenia
Piotr Fulmański, Marta Grzanek
Piotr Fulmański1
Marta Grzanek2
Wydział Matematyki i Informatyki,
Uniwersytet Łódzki
Banacha 22, 90-232, Łódź
Polska
e-mail 1: [email protected], 2: [email protected]
Data ostaniej modyfikacji: 13 marca 2007
Zanim zaczniemy . . .
Tutaj kiedyś coś będzie
Piotr Fulmański
Marta Grzanek
Łódź, 2007
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
ii
ROZDZIAŁ 0. ZANIM ZACZNIEMY . . .
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
Spis treści
Zanim zaczniemy . . .
i
1 Sztuczny neuron - budowa i wykorzystanie
1
2 Badanie możliwości klasyfikacji
2.1 Wprowadzenie . . . . . . . . . .
2.2 Sieć jednowarstwowa . . . . . .
2.2.1 Przygotowanie . . . . .
2.2.2 Przebieg eksperymentu .
2.3 Sieć dwuwarstwowa . . . . . . .
2.4 Sieć radialna . . . . . . . . . .
2.5 Wnioski . . . . . . . . . . . . .
.
.
.
.
.
.
.
3
3
4
4
4
5
5
5
.
.
.
.
.
.
7
7
7
8
8
10
11
.
.
.
.
.
.
.
3 Najprostsza sieć
3.1 Zadanie . . . . . . . . . . . . . .
3.2 Konstrukcja sieci i przebieg nauki
3.2.1 Architektura . . . . . . .
3.2.2 Nauka . . . . . . . . . . .
3.3 Algorytm . . . . . . . . . . . . .
3.4 Zadanie . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iv
SPIS TREŚCI
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
Rozdział 1
Sztuczny neuron - budowa i
wykorzystanie
Opisać budowę sztucznego neuronu. Opisać elementarne sieci.
Funkcje aktywacji liniowa
f (x) = x
(1.1)
progowa bipolarna
1 dla x ≥ 0,
−1 dla x < 0.
(1.2)
f (x) =
1 dla x ≥ 0,
0 dla x < 0.
(1.3)
f (x) =
2
−1
1 + exp(−λx)
(1.4)
1
1 + exp(−λx)
(1.5)
f (x) =
progowa unipolarna
sigmoidlana bipolarna
sigmoidlana unipolarna
f (x) =
radialna
f (x) = exp
kx − ck2 r2
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
(1.6)
2
ROZDZIAŁ 1. SZTUCZNY NEURON - BUDOWA I WYKORZYSTANIE
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
Rozdział 2
Badanie możliwości klasyfikacji
2.1
Wprowadzenie
Jednym z najczęściej powierzanych sieciom neuronowym zadań jest klasyfikacja obiektów. Przez „obiekt” rozumieć będziemy tutaj wiele różnych rzeczy: litery, obrazy, dźwięki
itd. Każdy z takich obiektów reprezentowany jest przez ciąg liczb. Skoro tak, to ciąg ten
możemy utożsamiać z pewnym wektorem, czyli punktem w przestrzeni odpowiedniego
wymiaru. Zatem możemy inaczej powiedzieć, że sieć uczy się klasyfikowania punktów
pewnej przestrzeni do różnych klas. Interesującym zagadnieniem jest:
• jak sposób rozmieszczonia punktów w przestrzeni wpływa na konstrukcję sztucznej
sieci neuronowej;
• w jakim stopniu przyjęte założenia co do sposobu konstrukcji determinują możliwą
do rozwiązania klasę problemów.
Aby znaleźć przynajmniej częściową odpowiedź na powyższe pytania, przebadamy kilka
różnych sieci zwracając bacznie uwagę na sposób podziału przestrzeni sygnałów wejściowych.
W kolejnych podrozdziałach będziemy badać:
• sieci jednowarstwowe:
– z neuronami o liniowej funkcji aktywacji,
– z neuronami o progowej funkcji aktywacji,
– z neuronami o sigmoidalnej funkcji aktywacji;
• sieci wielowarstwowe:
– z neuronami o liniowej funkcji aktywacji,
– z neuronami o progowej funkcji aktywacji,
– z neuronami o sigmoidalnej funkcji aktywacji;
• sieci radialne.
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
4
ROZDZIAŁ 2. BADANIE MOŻLIWOŚCI KLASYFIKACJI
2.2
2.2.1
Sieć jednowarstwowa
Przygotowanie
Przyjmujemy najprostszy z możliwych modeli sztucznej sieci neuronowej, tj. model sieci
złożonej z jednego neuronu. Przyjmujemy, że neuron posiada dwa wejścia oraz bias.
Ponieważ mamy dwa wejścia, więc wektory sygnałów wejściowych będą miały w tym
przypadku tylko dwie zmieniające się współrzędne. Skoro tak, to łatwo możemy je interpretować jako pewien punkt na płaszczyźnie. Ponadto przyjmujemy dalej następujšce
założenia:
1. sygnały wejściowe zmieniają się w zakresie od −5 do +5 z pewnym, wybranym
indywidualnie krokiem, np. 0.1;
2. wagi są liczbami losowymi z przedziału [−5, 5].
2.2.2
Przebieg eksperymentu
1. Ustalmy wartość biasu na 0.0.
2. Wybieramy jedną z funkcji aktywacji: (1.1),(1.2) lub (1.4).
3. Losujemy wagi. W tym przypadku będą to wagi: w1 związana z pierwszym sygnałem wejściowym x1 , w2 związana z drugim sygnałem wejściowym x2 oraz w0
związana z biasem xb .
4. Podajemy na wejście sieci parę punktów (x1 , x2 ) z przestrzeni sygnałów wejściowych ([−5, 5] × [−5, 5]).
5. Dla pary sygnałów wejściowych obliczamy wartość wyjścia neuronu dla przyjętej
funkcji aktywacji.
6. W zależności od wartości otrzymanej na wyjściu, w punkcie odpowiadającym wartości podanych na wejście sygnałów, stawiamy kropkę o odpowiednim kolorze. Sposób kolorowania podany zostanie poniżej.
7. Postępowanie z punktów 2 − 5 kontynuujemy tak długo aż wyczerpiemy wszystkie
punkty z zadanego obszaru przy przyjętym kroku.
8. Jeśli nie przebadaliśmy jeszcze zachowania dla trzech funkcji aktywacji to powracamy do punktu 2, gdzie wybieramy kolejną funkcję aktywacji.
9. Jeśli przebadaliśmy zachowanie sieci dla trzech funkcji aktywacji, to powracamy
do punktu 2, ustalając wartość biasu na 1.0.
Całe powyższe postępowanie należy powtórzyć kilkakrotnie, aby móc zaobserwować
pewne prawidłowości.
Pozostało jeszcze ustalić sposób kolorowania.
W przypadku funkcji progowej jako, że przyjmuje ona tylko dwie wartości, używamy
tylko dwóch kolorów: czerwonego dla wartości równych 1 i niebieskiego dla wartosci
równych −1.
Liniowa funkcja aktywacji może przyjmujmować dowolną wartość rzeczywistą z przedziału [−55.0, 55.0]. Dlatego przyjmujemy następujący sposób kolorowania (lub dowolny
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
2.3. SIEĆ DWUWARSTWOWA
5
inny będący jego rozszerzeniem – im więcej kolorów, tym lepiej będzie widać zdolności
sieci do podziału płaszczyzny)
• dla wartości większych lub równych 1.0 – czerwony;
• dla wartości z przedziłu [0.0, 1.0) – żółty;
• dla wartości z przedziłu [−1.0, 0.0) – zielony;
• dla wartości mniejszych od −1.0 – niebieski.
Sigmoidalna funkcja aktywacji może przyjmujmować dowolną wartość rzeczywistą z
przedziału (−1.0, 1.0). Dlatego przyjmujemy następujący sposób kolorowania (uwaga o
sposobie kolorowania j.w.)
• dla wartości większych lub równych 0.8 – czerwony;
• dla wartości z przedziłu [0.0, 0.8) – żółty;
• dla wartości z przedziłu [−0.8, 0.0) – zielony;
• dla wartości mniejszych od −0.8 – niebieski.
2.3
Sieć dwuwarstwowa
Po przebadaniu możliwości jednego neuronu (sieci jednowarstwowej), zajmiemy się siecią
dwuwarstwową. Przyjmujemy następującą strukturę sieci: dwa neurony w pierwszej
warstwie oraz jeden w drugiej – ostatniej (wyjściowej), połączone na zasadzie „każdy z
każdym”. Dla tak zbudowanej sieci powtarzamy kroki 1−9 wykonywane podczas badania
sieci jednowarstwowej.
2.4
Sieć radialna
Dla sieci radialnej przyjmujemy strukturę taką jak przedstawioną w rozdziale 1, przy
czym w wartwie radialnej używać będziemy trzech neuronów. Używać będziemy bardzo
prostego sposobu kolorowania: czerwony dla wartości większych lub równych 0 i niebieski
dla wartosci mniejszych od 0.
2.5
Wnioski
Oto jakie wnioski powinno dać się wysnuć w wyniku przeprowadzonych eksperymentów.
1. Pojedyńczy neuron z progową funkcją aktywacji zawsze dzieli przestrzeń na dwie
podprzestrzenie za pomocą prostej. Prosta ta zawsze przechodzi przez punkt (0, 0)
jeśli bias ma wartość 0.0 (rys. ??,??).
2. Sieć złożona z neuronów progowych dzieli przestrzeń za pomocą łamanej o ile
występuje bias (rys. ??).
3. Sieć złożona z jednostek liniowych zawsze dzieli przestrzeń w ten sam sposób niezależnie od ilości warstw. Podziałten wyznaczany jest przez równoległe do siebie
linie proste (rys. ??).
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
6
ROZDZIAŁ 2. BADANIE MOŻLIWOŚCI KLASYFIKACJI
4. Pojedyńczy neuron z sigmoidalną funkcją aktywacji dzieli przestrzeń podobnie do
neuronu liniowego.
5. Sieć wielowarstwowa z sigmoidalnymi funkcjami aktywacji dzieli przestrzeń na podobszary za pomocą krzywych. Jeśli bias ma wartość 0.0, wówczas podział ten jest
symetryczny względem punktu (0, 0) (rys. ??,??).
6. Sieć radialna dzieli przestrzeń na podprzestrzenie będące „kombinacją” kół (rys.
??).
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
Rozdział 3
Najprostsza sieć
3.1
Zadanie
Zadanie postawione przed nami jest następujące: skonstruować sieć, która będzie mogła
rozpoznawać wzorce graficzne należące do dwóch różnych klas. Jako wzorcy graficznych
używać będziemy liter zapisanych w prostokątnym obszarze podzielonym na 7 wierszy i 5
kolumn. Każda komórka leżąca na przecięciu pewnego wiersza z jakąś kolumną może być
czarna lub biała. W ten oto sposób, przyjmując za rozpatrywane wzorce litery A oraz
C i przypisując im odpowiednio klasy oznaczane przez 0 oraz 1, możemy przedstawić je
w następujący sposób
XXXXX
X
X
X
X
XXXXX
X
X
X
X
X
X
XXXXX
X
X
X
X
X
XXXXX
X - czarne pole
Jeśli teraz nauczymy sieć tych dwóch wzorcy wówczas oczekiwać będziemy, że podanie zniekształconego wzorca A skutkować będzie odpowiedzią bliską 0, natomiast w
przypadku zniekształconego wzorca C odpowiedzią bliską 1.
3.2
Konstrukcja sieci i przebieg nauki
Aby osiągnąć pożądane zachowanie sieci, którego przejawem jest zdolność do klasyfikowania obiektów, musimy:
• określić architekturę sieci
–
–
–
–
ile warstw?
ile neuronów w każdej warstwie?
jak połączyć neurony?
jaki rodzaj funkcji aktywacji wybrać?
• określić sposób uczenia.
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
8
ROZDZIAŁ 3. NAJPROSTSZA SIEĆ
3.2.1
Architektura
Przyjmiemy najprostszą z możliwych architektur. Sieć będzie składała się z tylko jednej
warstwy. W warstwie tej będzie tylko jeden neuron. Ilość wejść określamy na równą ilości
punktów tworzących wzorce graficzne, plus jedno stałe wejście, na które bez względu
na wzorzec zawsze podawany jest sygnał o wartości 1.0. Zatem neuron będzie miał
5*7+1=36 wejść numerowanych od 0 do 35, przy czym wejście numer 0 jest wejściem
o stałym sygnale. Jako funkcję aktywacji wybieramy funkcję liniową lub sigmoidalną
unipolarna.
3.2.2
Nauka
Celem nauki jest dobranie takich parametrów sieci aby zachowywała się ona zgodnie z
naszymi oczekiwaniami przypisując wzorcom podobnym do A wartość bliską 0 a wzorcom
podobnym do C wartość bliską 1.
Jedynymi parametrami, za pomocą których możemy sterować zachowaniem neuronu
są wagi. To właśnie od ich doboru będzie zależało jakie zadania i w jakim stopniu neuron
będzie w stanie wykonać.
Na początku musimy zdefiniować dwa zbiory.
1. Zbiór pierwszy, to zbiór sygnałów jakie będą podawane na wejście neuronu; w
naszym przypadku: sygnały reprezentujące litery A i C.
2. Zbiór drugi, to zbiór prawidłowych sygnałow wyjściowych neuronu; w naszym przypadku: odpowiednio 0 i 1.
Oznaczmy pierwszy z tych zbiorów przez P , drugi przez T . Elementy tych zbiorów
oznaczać będziemy małymi literami – odpowiednio p i t, z ineksem wskazujacym na
numer. Tak wiec mamy: P = {p1 , p2 } oraz T = {t1 , t2 } = {0, 1} gdzie p1 i p2 to wektory
powstałe w oparciu o obrazy naszych wzorcy, według zasady: czarne pole = 1, białe =
−1. Przyjmują one postać (odstępu co 5 dodane są dla czytelnosci):
p1 =11111
p2 =11111
1-1-1-1 1
1-1-1-1-1
1-1-1-1 1
1-1-1-1-1
1 1 1 1 1
1-1-1-1-1
1-1-1-1 1
1-1-1-1-1
1-1-1-1 1
1-1-1-1-1
1-1-1-1 1
1 1 1 1 1
Oba zbiory P oraz T tworzą zbiór uczący L = {P, T }.
Dążymy do tego, aby wyjście z sieci yi zależne od podanego wzorca pi , i = 1, 2
różniło się jak najmniej od odpowiedzi oczekiwanej przez nas, czyli aby różnica (ti − y)
dla i = 1, 2 była jak najmniejsza. Inaczej mówiąc, dążymy do minimalizacji określonej
tym sposobem funkcji. Skoro jednak ma to być funkcja, to powinna mieć jakąś zmienną
(lub zmienne). Powyżej powiedzieliśmy, że jedyne co może sie w neuronie zmieniać to
jego wagi. Ostatecznie więc otrzymujemy nastepującą definicję funkcji
E(w) = (ti − y),
gdzie w = [w0 , ..., w35 ]
Po prawej stronie nie widać aby y zależało od w, ale łatwo jest to zmienić (a raczej
pokazać). Zgodnie z wcześniej podanymi informacjami y definiujemy jako y = f (net),
przy czym net określone jest jako
net =
35
X
(xik wk ),
k=0
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
3.2. KONSTRUKCJA SIECI I PRZEBIEG NAUKI
9
gdzie xik oznacza wartość k-te wejście w wyniku podania i-tego wzorca. Ostatecznie
35
X
E(w) = (ti − f (
xik wk )).
k=0
Zwykle aby zapewnić sobie, że funkcja E ma minimum i aby otrzymać w wyniku dalszych
działań „przyjemną” postać, przyjmuje się ją jako
1
E(w) = (ti − y)2 .
2
Tak więc określiliśmy pewną funkcję i poszukujemy jej minimum. Do tego celu, przy
założeniu różniczkowalności badanej funkcji, nadaje sie metoda gradientowa wyznaczania
minimum funkcji. Pochodna funkcji policzona w pewnym punkcie, oznaczmy go przez
w(t)1 , jej dziedziny wskazuje kierunek najszybszego wzrostu jej wartości. Tak więc
minus pochodna w danym punkcie wskazuje kierunek najszybszego spadku jej wartości.
Zatem szukając minimum przesuwamy się nieznacznie w tak wyznaczonym kierunku z
punktu w którym jesteśmy obecnie, otrzymując nowy punkt oznaczany przez w(t + 1).
Czyli, przyjmując za η niewielką liczbę rzeczywistą (np. 0.01) dokonujemy następującej
modyfikacji:
w(t + 1) = w(t) − η · kierunek,
czyli
w(t + 1) = w(t) − ηE 0 (w(t)).
Policzmy teraz gradient2 funkcji E
∂E
∂E
∇E =
, ...,
∂w0
∂w35
(przyjąć musimy, że obliczenia prowadzone są dla pewnej pary (pi , ti ))

!2 
35
X
∂E
1
= Ewk (w) = 
ti − f (
xim wm )  =
∂wk
2
m=0
35
X
1
· 2 ti − f (
xim wm )
2
·
ti − f (
m=0
− ti − f (
35
X
wk
!
xim wm ) fw0 k (
35
X
xim wm )
m=0
− ti − f (
35
X
!
xim wm )
m=0
!
m=0
35
X
35
X
wk
!
xim wm
m=0
!
xim wm ) f 0 (
m=0
35
X
=
=
wk
xim wm )xik =
m=0
0
−(ti − f (net))f (net)xik .
Iloczyn (ti − f (net))f 0 (net) oznaczamy przez δ i nazywamy sygnałem błędu delta.
1
Zmienna t oznacza w tym przypadku pewną, intuicyjnie rozumianą, zależność czasową, polegającą
na tym, że wartość w(t) jest obliczana przed w(t + 1).
2
Gradient, czyli pochodna funkcji wielu zmiennych.
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
10
ROZDZIAŁ 3. NAJPROSTSZA SIEĆ
W zależności od wyboru funckji aktywacji, inaczej będzie wyglądało wyrażenie f 0 (x).
Przyjmując liniową funkcję aktywacji (patrz wzór (1.1)) otrzymujemy
f 0 (x) = 1.0.
Dla sigmoidalnej unipolarnej funkcję aktywacji (patrz wzór (1.5)) otrzymujemy
f 0 (x) = f (x)(1 − f (x)).
Postać ta jest o tyle ciekawa, iż widzimy, że pochodna sigmoidalnej funkcji unipolarnej
w punkcie x wyraża się przez wartość tejże funkcji w tym samym punkcie x. Oznacza to,
że nie musimy przeprowadzać prawie żadnych dodatkowych obliczeń w celu obliczenia
pochodnej.
3.3
Algorytm
Mamy dany zbiór uczący L postaci L = {P, T }, gdzie P = {p1 , p2 } oraz T = {t1 , t2 }
zgodznie z opisem powyżej.
1. Wybór
(a) η > 0 – współczynnik uczenia,
(b) Emax > 0 – maksymalny błąd jaki chcemy osiągnąć,
(c) Cmax > 0 – ilość kroków uczenia.
2. Losowy wybór początkowych wartości wag (zmienne w0 , ..., w35 ) jako niewielkich
liczb (na przykład z przedziału [−1, 1]).
3. Przyjmujemy c := 1.
4. Przyjmujemy l := 1, E := 0.
5. Losowy wybór liczby k ∈ {0, 1}.
6. Podanie k-tego obrazu ze zbioru P na wejscia neuronu: xi = pk,i , i = 0, . . . , 35.
P
7. Obliczenie sygnału wyjściowego neuronu y = f (net), gdzie net = 35
m=0 xm wm .
8. Uaktualnienie wartości wag według wzoru
wi (t + 1) = wi (t) − η
∂E
,
∂wk
k = 0, . . . , 35.
9. Obliczenie błędu b = (tk − y) oraz zaktualizowanie sumarycznej wartości błędu dla
danego cyklu uczącego: E = E + 21 b2 .
10. Jesli l < 2 to l := l + 1 i przejscie do kroku 5.
11. Jesli E < Emax , to kończymy algorytm.
12. Jeśli c < Cmax , to c := c + 1 i przechodzimy do kroku 4. W przeciwnym razie
kończymy algorytm.
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
3.4. ZADANIE
11
Drobne uwagi:
1. Zmienna c wskazuje na kolejne cykle uczące.
2. Powinno się zadbać aby w ramach każdego cyklu uczącego zaprezentować wszystkie
wzorce uczące w losowej kolejności. Zatem losowy wybór liczby k musi wykluczać
obrazy już wybrane w danym cyklu uczącym.
3.4
Zadanie
Należy zaimplementować zaprezentowany algorytm dla identycznego zadania jak rozważanego w tekście (rozpoznawanie pewnych wzorcy graficznych). Program powinien
mieć możliwość, po nauczeniu sieci, podawania przez użytkownika wartości sygnałów
wejściowych i obliczenia dla nich odpowiedzi neuronu. Ilość rozpoznawanych klas można
rozszerzyć wedle uznania.
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)
12
ROZDZIAŁ 3. NAJPROSTSZA SIEĆ
c
Sztuczne sieci neuronowe. Ćwiczenia 2007
by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)