Politechnika Rzeszowska
Wydział Elektrotechniki i Informatyki
Katedra Informatyki i Automatyki
Sztuczna Inteligencja
Realizacja sieci neuronowej uczonej algorytmem wstecznej propagacji błędu (learnbp) uczącą się klasyfikacji pojazdów na podstawie ich sylwetki.
Kuśnierz Tomasz
II EF-DI
Rzeszów 2011
Celem projektu jest zrealizowanie działającej sieci neuronowej uczonej algorytmem
wstecznej propagacji błędu uczącej się klasyfikowania pojazdu jako jeden z czterech typów, z wykorzystaniem zestawu danych opisujących. Pojazd może być oglądany z jednego z wielu różnych kątów widzenia.
Dane uzyskano przez HIPS (Hierarchical Image Processing System) rozszerzony o BINATTS, które wydobywa połączenie skali niezależnych danych, w oparciu o własności takie jak skalowana wariancja, skośność i kurtoza głównych/dodatkowych osi oraz heurestyczne miary takie jak wklęsłość, kolistość, prostokątność i kompaktowość.
Cztery modele pojazdów zostały wykorzystane do eksperymentu:
- piętrowy autobus,
- Cheverolet van,
- Saab 900,
- Opel Manta 400,
Ta szczególna kombinacja została wybrana z oczekiwaniem, że autobus, van i jeden z samochodów będzie łatwo odróżnić, ale będzie trudniejsze rozpoznanie między Saabem a Oplem.
Zdjęcia zostały zrobione przez kamery ustawione w dół na model pojazdu ze stałego kąta (34,2). Pojazdy zostały umieszczone na powierzchni rozpraszającej światło (lightbox). Zostały pomalowane czarnym, matowym kolorem, aby zminimalizować rozjaśnienia. Wszystkie zdjęcia zostały zrobione z rozdzielczością przestrzenną 128x128 pikseli z 64 bitową skalą szarości. Pojazdy były obracane i ich kąt orientacji mierzono za pomocą promieniowej siatki pod pojazdem. Dwa zestawy 60 obrazów, każdy zestaw obejmujący pełny obrót 360 stopni, zostały zrobione dla każdego pojazdu. Pojazd został obrócony o stały kąt między obrazem.
Atrybuty: compactness, circularity, distance circularity, radius ratio, pr.axis aspect ratio, max length aspect ratio, scatter ratio, elongatedness, pr. axis rectangularity, max length rectangularity, scaled variance (wzdłuż głównej osi oraz pobocznej), scaled radius of gyration, skewness, kurtosis, hollows.
Klasy: Opel, Saab, Bus, Van
Dane zostały zaczerpnięte ze strony repozytorium uniwersytetu w Irvine.
Informacje na temat repozytorium znajdują się na stronie: http://archive.ics.uci.edu/ml/about.html, natomiast zestaw danych użytych do wykonania projektu znajduje się pod adresem: http://archive.ics.uci.edu/ml/datasets/statlog+(vehicle+silhouettes)
89 | 42 | 85 | 144 | 58 | 10 | 152 | 44 | 19 | 144 | 173 | 345 | 161 | 72 | 8 | 13 | 187 | 197 | van |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
94 | 49 | 79 | 203 | 71 | 5 | 174 | 37 | 21 | 154 | 196 | 465 | 206 | 71 | 6 | 2 | 197 | 199 | bus |
96 | 55 | 103 | 201 | 65 | 9 | 204 | 32 | 23 | 166 | 227 | 624 | 246 | 74 | 6 | 2 | 186 | 194 | opel |
89 | 36 | 51 | 109 | 52 | 6 | 118 | 57 | 17 | 129 | 137 | 206 | 125 | 80 | 2 | 14 | 181 | 185 | van |
99 | 41 | 77 | 197 | 69 | 6 | 177 | 36 | 21 | 139 | 202 | 485 | 151 | 72 | 4 | 10 | 198 | 199 | bus |
104 | 54 | 100 | 186 | 61 | 10 | 216 | 31 | 24 | 173 | 225 | 686 | 220 | 74 | 5 | 11 | 185 | 195 | saab |
Tabela 1.1 Przykładowe dane pobrane z repozytorium.
Jak można łatwo zauważyć pobrane dane nie mogą być użyte w podanej formie przez program. Należy zamienić tekst z ostatniej kolumny na wartości liczbowe, co też zostało zrobione:
- van 1
- saab 2
- bus 3
- opel 4
82 | 40 | 73 | 141 | 57 | 8 | 153 | 44 | 19 | 133 | 173 | 342 | 153 | 75 | 11 | 9 | 181 | 187 | 4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
82 | 39 | 86 | 140 | 54 | 7 | 153 | 45 | 19 | 134 | 174 | 338 | 139 | 71 | 11 | 18 | 183 | 189 | 4 |
82 | 43 | 73 | 158 | 68 | 7 | 151 | 44 | 19 | 145 | 181 | 337 | 173 | 80 | 2 | 17 | 183 | 188 | 3 |
82 | 43 | 70 | 250 | 105 | 55 | 139 | 48 | 18 | 145 | 231 | 289 | 172 | 99 | 4 | 9 | 190 | 199 | 1 |
82 | 36 | 51 | 114 | 53 | 4 | 135 | 50 | 18 | 126 | 150 | 268 | 144 | 86 | 15 | 4 | 181 | 182 | 2 |
83 | 36 | 54 | 119 | 57 | 6 | 128 | 53 | 18 | 125 | 143 | 238 | 139 | 82 | 6 | 3 | 179 | 183 | 2 |
Tabela 1.2 Przykładowe dane po zmianie na liczby.
Następnym krokiem było sprawdzenie, czy takie same zestawy danych nie występują wielokrotnie. Nie stwierdzono takiego przypadku.
Sieć jednokierunkowa wielowarstwowa charakteryzuje się występowaniem co najmniej jednej warstwy ukrytej neuronów, pośredniczącej w przekazywaniu sygnałów między węzłami wejściowymi a warstwą wyjściową. Sygnały wejściowe są podawane a pierwszą warstwę ukrytą neuronów, a te z kolei stanowią sygnały źródłowe dla kolejnej warstwy. Przykład sieci jednokierunkowej wielowarstwowej przedstawiono na rysunku poniżej.
Rys. 2.1 Przykład sieci wielowarstwowej jednokierunkowej.
Każda warstwa neuronów posiada swoją macierz wag w, wektor przesunięć b, funkcje aktywacji f i wektor sygnałów wyjściowych y. Działanie poszczególnych warstw można opisać za pomocą wzorów:
y1 = f1(w1x+b1)
y2 = f2(w2x+b2)
y3 = f3(w3x+b3)
gdzie indeksy dolne oznaczają warstwę sieci.
Całe działanie sieci można opisać jako
y3 = f3(w3 * f2(w2*f1(w1*x+b1)+b2) + b3)
Funkcja aktywacji może przybrać jedną z trzech postaci: skoku jednostkowego, liniową, nieliniową. Wykresy poszczególnych funkcji pokazuje rys. 2.2. Wybór funkcji aktywacji zależy od rodzaju problemu. Dla sieci wielowarstwowych są to najczęściej funkcje nieliniowe, gdyż neurony o takiej charakterystyce wykazują największe zdolności do nauki.
Rys. 2.2 Wykresy funkcji aktywacji
Uczenie za pomocą tej metody charakteryzuje się obecnością „nauczyciela”. Pierwszą czynnością w procesie uczenia jest przygotowanie ciągu uczącego. Jest to taki zbiór danych, które charakteryzują dany problem. Porcja danych nazywana jest wektorem uczącym. W skład tego wektora wchodzi wektor wejściowy, są to dane podawane na wejście sieci, oraz wektor wyjściowy, czyli dane oczekiwane na wyjściu sieci. Po przetworzeniu wektora podanego na wejściu sieci „nauczyciel” porównuje wyjście sieci z danymi oczekiwanymi i informuje sieć o poprawności odpowiedzi oraz wartości ewentualnego błędu. Błąd ten jest propagowany do sieci w kolejności odwrotnej niż miało to miejsce przy wektorze wejściowym. Na jego podstawie następuje korekcja wag1 w każdym neuronie tak, aby przy ponownym przetworzeniu tego wektora błąd odpowiedzi uległ zmniejszeniu.
Wij(k+1) = Wij(k) − Wij
Wij = xj(yi−di)
Wij – wagi neuronów
yi – wartość na wyjściu neuronu
di – wartość oczekiwana
k – cykl poprzedni
k+1 – cykl następny
xj – wektor wejściowy
Procedurę tę powtarza się do momentu osiągnięcia przez sieć błędu mniejszego niż założony na początku. Po przetworzeniu całego ciągu uczącego2 oblicza się błąd i cały algorytm jest powtarzany dopóki błąd nie spadnie poniżej błędu oczekiwanego.
Celem uczenia pod nadzorem jest minimalizacja odpowiedzi zdefiniowanej funkcji celu, która w wyniku umożliwi dopasowanie wartości aktualnych odpowiedzi neuronów wyjściowych (wektor y) do wartości żądanych (wektor d) dla wszystkich p par uczących, przy czym dopasowanie to jest rozumiane w sensie statystycznym. Najczęściej przyjmowaną postacią funkcji celu jest błąd średniokwadratowy.
$$E = \frac{1}{2}\sum_{k = 1}^{p}{\sum_{j = 1}^{M}{e_{j}^{2}(k)}}$$
e(k) = y(k) − d(k)
M – liczba neuronów wyjściowych
p – liczba par uczących
y(k) – aktualna odpowiedź
d(k) – oczekiwana odpowiedź
clear all - wyczyszczenie przestrzeni roboczej
nntwarn off - wyłączenie powiadomienia o błędach
format compact - ustawienie sposobu wyświetlania
load data1.txt
P=data1(:,1:18); - wczytanie danych uczących (wejściowych)
T=data1(:,19)'; - wczytanie danych uczących (oczekiwanych)
MINIMALIZACJA DANYCH
maxP=max(P);
minP=min(P);
Pn=zeros(size(P));
for i=1:length(maxP),
Pn(:,i) = (1-(-1))*(P(:,i)-minP(i))/(maxP(i)-minP(i)) + (-1);
% (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;
end
Pn = Pn'; - transponowanie macierzy
[R,Q] = size(Pn); - zapis do zmiennej R wielkości wektora wejściowego
[S3,Q] = size(T); - przypisanie liczby wyjść jako ilość neuronów w warstwie wyjściowej
S1 = 1; - ilość neuronów w warstwie pierwszej
S2 = 1; - ilość neuronów w warstwie drugiej (ukrytej)
[W1,B1] = nwtan(S1,R); - inicjalizacja neuronów z funkcją aktywacji tansig losowymi wartościami
[W2,B2] = nwtan(S2,S1);
[W3,B3] = rands(S3,S2); - przypisanie tablicy o rozmiarach S3xS2 losowymi wartościami z zakresu [-1,1]
disp_freq=1; - częstotliwość wyświetlania wyników
max_epoch=200000; - maksymalna ilość epok
err_goal=.25; - błąd oczekiwany
lr=1e-4; - współczynnik uczenia
error = []; - macierz błędu
for epoch=1:max_epoch, - zainicjowanie pętli odpowiadającej za uczenie się sieci neuronowej
A1 = tansig(W1*Pn,B1); - wyjście warstwy A1
A2 = tansig(W2*A1,B2); - wyjście warstwy A2
A3 = purelin(W3*A2,B3); - wyjście warstwy A3
E = T -A3; - obliczanie błędu
D3 = deltalin(A3,E); - obliczanie wektorów błędów w zależności od funkcji aktywacji
D2 = deltatan(A2,D3,W3);
D1 = deltatan(A1,D2,W2);
[dW1,dB1] = learnbp(Pn,D1,lr); - obliczanie zmian wag przy użyciu algorytmu wstecznej propagacji błędu
W1 = W1 + dW1; - aktualizacja wag wektora wejściowego
B1 = B1 + dB1; - aktualizacja wag przesunięć
[dW2,dB2] = learnbp(A1,D2,lr);
W2 = W2 + dW2;
B2 = B2 + dB2;
[dW3,dB3] = learnbp(A2,D3,lr);
W3 = W3 + dW3;
B3 = B3 + dB3;
SSE = sumsqr(E); - obliczanie sumy kwadratu błędu
error = [error SSE]; - dopisanie błędu na koniec wektora
if SSE < err_goal, - zakończenie uczenia w wypadku osiągnięcia zadanego błędu
epoch = epoch - 1;
break,
end,
if(rem(epoch,disp_freq)==0) - wyświetlanie wyników
epoch
SSE
end
end
[T' A3' (T-A3)' (abs(T-A3)>.5)'] - wyświetlanie zestawienia wartości wyjściowych z wartościami oczekiwanymi
S1 - wyświetlanie liczby neuronów pierwszej warstwy
S2 - wyświetlanie liczby neuronów drugiej warstwy
epoch - wyświetlanie liczby epok
SSE - wyświetlanie błędu końcowego
100*(1-sum((abs(T-A3)>.5)')/length(T)) - wyświetlenie procentu poprawnych odpowiedzi
Pierwszym krokiem w realizacji projektu było znalezienie odpowiedniego współczynnika uczenia3. Został on ustalony doświadczalnie, poprzez wyznaczanie maksymalnej ilości neuronów dla których błąd nie dążył do nieskończoności oraz wskaźnik SSE4 był mniejszy od błędu oczekiwanego5. Po kilku próbach ustalono wartość na poziomie 1e-4. Następnie przeprowadzono serię badań dotyczących wpływu zmiany wartości neuronów na pierwszej6 i drugiej7 warstwie. Wyniki przedstawiają tabele 3.1-3.3 oraz wykresy 3.1-3.3
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 48,21 | 44,25 | 37,52 | 27,47 | 18,41 | 16,68 | 15,22 | 14,93 |
15 | 17,81 | 14,92 | 8,52 | 5,76 | 4,63 | 3,85 | 3,01 | 2,78 |
20 | 10,56 | 9,37 | 5,36 | 4,28 | 3,59 | 2,27 | 1,87 | 1,37 |
25 | 6,33 | 3,76 | 2,63 | 1,79 | 1,53 | 1,03 | 0,96 | 0,89 |
30 | 3,79 | 2,24 | 1,72 | 1,47 | 0,92 | 0,72 | 0,57 | 0,41 |
35 | 1,82 | 1,66 | 0,91 | 0,82 | 0,75 | 0,52 | 0,45 | 0,32 |
40 | 1,47 | 0,95 | 0,8 | 0,73 | 0,64 | 0,43 | 0,27 | 0,25 |
45 | 0,84 | 0,81 | 0,75 | 0,65 | 0,45 | 0,24 | 0,25 | 0,25 |
Tabela 3.1 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
Wykres 3.1 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 94,68 | 95,15 | 97,75 | 98,46 | 99,41 | 99,55 | 99,63 | 99,53 |
15 | 99,41 | 99,53 | 100 | 100 | 100 | 100 | 100 | 100 |
20 | 99,88 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
25 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
30 | 100 | 99,88 | 100 | 100 | 100 | 100 | 100 | 100 |
35 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
40 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
45 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
Tabela 3.2 Zależność ilości neuronów w poszczególnych warstwach na poprawność odpowiedzi (dane w %)
Wykres 3.2 Zależność ilości neuronów w poszczególnych warstwach na poprawność odpowiedzi (dane w %)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
15 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
20 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
25 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
30 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
35 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
40 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 192691 |
45 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 184336 | 192783 |
Tabela 3.3 Zależność ilości neuronów w poszczególnych warstwach na ilość epok
Wykres 3.3 Zależność ilości neuronów w poszczególnych warstwach na ilość epok
Eksperyment powtórzono jeszcze trzykrotnie i otrzymano następujące wyniki.
- Druga seria eksperymentów:
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 64,06 | 48,65 | 35,02 | 26,61 | 16,25 | 15,47 | 13,26 | 10,02 |
15 | 23,54 | 23,42 | 14,06 | 8,25 | 6,63 | 5,27 | 4,13 | 3,34 |
20 | 9,66 | 6,98 | 4,59 | 2,78 | 2,39 | 2,21 | 2,01 | 1,89 |
25 | 4,41 | 4,2 | 1,56 | 1,92 | 1,23 | 1,19 | 1,1 | 0,92 |
30 | 5 | 1,34 | 1,83 | 1,15 | 0,95 | 0,79 | 0,54 | 0,41 |
35 | 0,85 | 1,78 | 1,03 | 0,89 | 0,81 | 0,59 | 0,49 | 0,3 |
40 | 1,7 | 1,13 | 0,83 | 0,75 | 0,63 | 0,45 | 0,26 | 0,26 |
45 | 1,71 | 0,94 | 0,78 | 0,67 | 0,56 | 0,28 | 0,32 | 0,25 |
Tabela 3.4 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 93,26 | 95,74 | 97,28 | 98,7 | 99,41 | 99,46 | 99,52 | 99,76 |
15 | 98,23 | 98,93 | 99,29 | 100 | 100 | 100 | 100 | 100 |
20 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
25 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
30 | 99,88 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
35 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
40 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
45 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
Tabela 3.5 Zależność ilości neuronów w poszczególnych warstwach na poprawność odpowiedzi (dane w %)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
15 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
20 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
25 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
30 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
35 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
40 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
45 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 194791 |
Tabela 3.6 Zależność ilości neuronów w poszczególnych warstwach na ilość epok
- Trzecia seria eksperymentów
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 67,32 | 45,52 | 36,98 | 29,61 | 20,12 | 19,32 | 16,89 | 14,36 |
15 | 18,92 | 15,82 | 9,42 | 6,52 | 4,82 | 3,65 | 2,92 | 2,56 |
20 | 11,43 | 9,76 | 6,12 | 5,39 | 3,86 | 2,89 | 1,92 | 1,58 |
25 | 6,82 | 4,92 | 2,74 | 1,56 | 1,49 | 1,28 | 1,02 | 0,37 |
30 | 3,92 | 2,29 | 1,92 | 1,58 | 0,96 | 0,78 | 0,67 | 0,42 |
35 | 1,72 | 1,69 | 0,81 | 0,78 | 0,72 | 0,68 | 0,37 | 0,29 |
40 | 1,39 | 0,96 | 0,82 | 0,79 | 0,69 | 0,53 | 0,28 | 0,26 |
45 | 0,92 | 0,84 | 0,74 | 0,69 | 0,57 | 0,29 | 0,25 | 0,25 |
Tabela 3.7 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 96,13 | 96,76 | 98,23 | 97,32 | 99,35 | 99,87 | 99,53 | 99,87 |
15 | 99,37 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
20 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
25 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
30 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
35 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
40 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
45 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
Tabela 3.8 Zależność ilości neuronów w poszczególnych warstwach na poprawność odpowiedzi (dane w %)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
15 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
20 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
25 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
30 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
35 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
40 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
45 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 197893 | 194326 |
Tabela 3.9 Zależność ilości neuronów w poszczególnych warstwach na ilość epok
- Czwarta seria eksperymentów
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 65,9 | 56,62 | 41,53 | 32,96 | 18,32 | 16,89 | 14,23 | 9,81 |
15 | 29,64 | 25,92 | 15,82 | 9,53 | 7,23 | 5,14 | 4,89 | 3,96 |
20 | 9,32 | 7,85 | 4,92 | 3,64 | 2,91 | 2,61 | 1,84 | 1,74 |
25 | 5,16 | 4,96 | 1,64 | 1,82 | 1,14 | 1,03 | 0,95 | 0,82 |
30 | 5,18 | 1,73 | 1,63 | 1,02 | 0,99 | 0,68 | 0,49 | 0,32 |
35 | 2,01 | 1,29 | 0,94 | 0,78 | 0,69 | 0,58 | 0,51 | 0,42 |
40 | 1,47 | 1,01 | 0,95 | 0,82 | 0,75 | 0,53 | 0,32 | 0,26 |
45 | 1,66 | 0,88 | 0,78 | 0,63 | 0,52 | 0,41 | 0,32 | 0,25 |
Tabela 3.10 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 92,98 | 95,65 | 97,24 | 98,79 | 98,53 | 99,85 | 99,42 | 100 |
15 | 97,34 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
20 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
25 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
30 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
35 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
40 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
45 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
Tabela 3.11 Zależność ilości neuronów w poszczególnych warstwach na poprawność odpowiedzi (dane w %)
S1/S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
15 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
20 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
25 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
30 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
35 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
40 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 |
45 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 200000 | 198267 |
Tabela 3.12 Zależność ilości neuronów w poszczególnych warstwach na ilość epok
Dla uzyskanych wyników obliczono średnią wartość błędu końcowego SSE dla poszczególnych kombinacji wartości S1 i S2.
S1\S2 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---|---|---|---|---|---|---|---|---|
10 | 61,37 | 48,76 | 37,76 | 29,16 | 18,28 | 17,09 | 14,90 | 12,28 |
15 | 22,48 | 20,02 | 11,96 | 7,52 | 5,83 | 4,48 | 3,74 | 3,16 |
20 | 10,24 | 8,49 | 5,25 | 4,02 | 3,19 | 2,50 | 1,91 | 1,65 |
25 | 5,68 | 4,46 | 2,14 | 1,77 | 1,35 | 1,13 | 1,01 | 0,75 |
30 | 4,47 | 1,90 | 1,78 | 1,31 | 0,96 | 0,74 | 0,57 | 0,39 |
35 | 1,60 | 1,61 | 0,92 | 0,82 | 0,74 | 0,59 | 0,46 | 0,33 |
40 | 1,51 | 1,01 | 0,85 | 0,77 | 0,68 | 0,49 | 0,28 | 0,26 |
45 | 1,28 | 0,87 | 0,76 | 0,66 | 0,53 | 0,31 | 0,29 | 0,25 |
Tabela 3.13 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
Analizując rozkład zawarty w tabeli 3.13 zauważono, że dla skrajnych liczby neuronów (ustalonych doświadczalnie dla wyznaczonego wcześniej współczynnika uczenia) oczekiwany błąd został osiągnięty podczas każdej z prób. Można zatem stwierdzić, że optymalne parametry do rozwiązania zadanego problemu zostały eksperymentalnie wyznaczone.
Dla potwierdzenia powyższych wniosków powtórzono eksperyment dla ilości neuronów, które osiągały zadany błąd za każdym razem, dziesięciokrotnie.
L.p | S1 | S2 | SSE | Epoch | % |
---|---|---|---|---|---|
1 | 45 | 45 | 0.25 | 197122 | 100 |
2 | 45 | 45 | 0.25 | 197276 | 100 |
3 | 45 | 45 | 0.25 | 195679 | 100 |
4 | 45 | 45 | 0.25 | 196627 | 100 |
5 | 45 | 45 | 0.25 | 199089 | 100 |
6 | 45 | 45 | 0.25 | 199204 | 100 |
7 | 45 | 45 | 0.25 | 192097 | 100 |
8 | 45 | 45 | 0.25 | 195895 | 100 |
9 | 45 | 45 | 0.25 | 197867 | 100 |
10 | 45 | 45 | 0.25 | 198864 | 100 |
ŚREDNIA | 196972 |
Tabela 3.14 Zależność ilości neuronów w poszczególnych warstwach na błąd końcowy (SSE)
Powtórzenie badań dla jednego ustawienia parametrów potwierdziło wniosek o znalezieniu optymalnych parametrów do rozwiązania tego problemu. Maksymalna liczba epoch nie została osiągnięta podczas powtarzanych badań. Stwierdzono, że sieć poprawnie klasyfikuje pojazdy.
Na wstępie dobrym pomysłem okazało się znormalizowanie danych. Z krótkich testów, które niestety nie były reprezentatywne otrzymano średnio o ok. 5% krótszy czas wykonywania skryptu (przy małej ilości neuronów oraz maksymalnej ilości epok). Nie jest to duża optymalizacja, jednak w przypadku dłuższych i bardziej skomplikowanych eksperymentach może okazać się, że można zaoszczędzić bardzo dużo czasu, który poświęci się większej ilości badań.
Podczas eksperymentów odkryto, że współczynnik uczenia8 ma bezpośredni wpływ na zakres neuronów jaki można użyć w sieci. Przy lr równym 0,001 zaobserwowano graniczną wartość neuronów na poziomie ok. 30. Przy większej liczbie neuronów zaobserwowano niestabilność programu objawiającą się poprzez dążenie błędu do nieskończoności. Dlatego w badaniu przyjęto współczynnik uczenia o rząd niższy tj. 0,0001. Spowodowało to zwiększenie czasu potrzebnego na przetworzenie wszystkich danych, ale większy zakres liczby neuronów oraz większe prawdopodobieństwo na osiągnięcie błędu minimalnego.
Ze względu na dużą ilość parametrów przeznaczonych do nauki sieci (18) oraz odpowiednim ustawieniu współczynnika uczenia sieć była w stanie osiągnąć skrajne wartości przy niskim zakresie neuronów (od 10 do 45). Dzięki temu w załączonych tabelach można zaobserwować zdarzenia, gdy sieć nie nauczyła się w pełni, nauczyła się w 100% oraz sytuację gdy osiągnęła wymagany błąd. Rozpoznawanie sylwetek samochodów w oparciu o otrzymane dane było dla sieci łatwym zadaniem i radziła sobie z tym już przy bardzo małych ilościach neuronów (15). Jest to spowodowane odpowiednim dobraniem badanych obiektów (w badaniach wykorzystano dwa samochody o skrajnie odmiennych sylwetkach oraz dwa modele, które miały zbliżoną budowę).
- R.Tadeusiewicz - Sieci_Neuronowe
- S. Ossowski Sieci neuronowe w ujęciu algorytmicznym WNT Warszawa 1996
- http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw9-siec-wielowarstw.pdf
- http://www.republika.pl/edward_ch/sneuro.html
- http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html