implementacija kohonenovih nevronskih mreŽ za operacijski … · operacijski sistem android je...
TRANSCRIPT
Matija Vrbovšek
IMPLEMENTACIJA KOHONENOVIH NEVRONSKIH MREŽ ZA OPERACIJSKI
SISTEM ANDROID
Diplomsko delo
Maribor, september 2012
IMPLEMENTACIJA KOHONENOVIH NEVRONSKIH MREŽ
ZA OPERACIJSKI SISTEM ANDROID
Diplomsko delo
Študent: Matija Vrbovšek
Študijski program: UN
Računalništvo in informacijske tehnologije
Mentor: red. prof. dr. Milan Zorman
Somentor: asist. Bojan Butolen
Lektor: Matej Jazbinšek
I
II
ZAHVALA
Zahvaljujem se mentorju prof. dr. Milanu
Zormanu in somentorju asist. Bojanu Butolenu
za pomoč in vodenje pri diplomskem delu
Zahvaljujem se tudi mojim staršem za podporo
pri študiju in Janji za podporo pri izdelavi
diplomskega dela.
III
Implementacija Kohonenovih nevronskih mrež za
operacijski sistem Android
Ključne besede: Kohonenove nevronske mreže, operacijski sistem Android, 3D-
vizualizacija, parametrične enačbe
UDK: 004.032.26:004.92(043.2)
Povzetek
V diplomski nalogi bo najprej opisan operacijski sistem Android in njegova razvojna
programska oprema, nato pa značilnosti Kohonenove nevronske mreže, njeni parametri in
učni algoritem.
Na operacijski sistem Android je bila implementirana Kohonenova nevronska mreža, za
lažjo interpretacijo delovanja algoritma in izhodov pa je bila narejena vizualizacija njenega
učenja v 3D-prostoru. Učenje je bilo izvedeno s parametričnimi enačbami likov in teles.
IV
Implementation of Kohonen neural networks for
operating system Android
Keywords: Kohonen neural network, Android operating system, 3D visualization,
parametrical equations
UDK: 004.032.26:004.92(043.2)
Abstract
In this thesis we present the operating system Android, its software development kit and
then the characteristics of Kohonen neural networks, its parameters and a learning
algorithm.
We implemented Kohonen neural network on the operating system Android and for easier
interpretation of the algorithm and the results we show a visualization of training in 3D
space. We train it with parametrical equations of shapes and bodies.
V
KAZALO
1 UVOD .............................................................................................................. 1
2 OPERACIJSKI SISTEM ANDROID................................................................. 2
2.1 Primerjava z drugimi operacijskimi sistemi za mobilne naprave ...........................4
2.2 Razvojna programska oprema .............................................................................5
3 KOHONENOVE NEVRONSKE MREŽE .......................................................... 8
3.1 Struktura Kohonenove nevronske mreže .............................................................8
3.2 Učenje Kohonenove nevronske mreže ..............................................................10
3.3 Parametri Kohonenove nevronske mreže ..........................................................12
4 OPIS IMPLEMENTACIJE .............................................................................. 15
4.1 Implementacija Kohonenove nevronske mreže ..................................................15
4.2 Enačbe likov in teles ter generiranje vhodnih podatkov ......................................19
4.3 Vizualizacija v 3D-prostoru.................................................................................21
4.4 Rezultati.............................................................................................................25
5 SKLEP ........................................................................................................... 29
VIRI ...................................................................................................................... 30
VI
KAZALO SLIK
Slika 2.1: Prikaz arhitekture programske opreme operacijskega sistema Android ............. 2
Slika 2.2: Prikaz deleža različnih verzij operacijskega sistema Android ............................. 3
Slika 3.1: Dvodimenzionalna zgradba Kohonenove nevronske mreže ............................... 9
Slika 3.2: Prikaz različnih topologij povezav med nevroni, z leve si sledijo
enodimenzionalna, dvodimenzionalna pravokotna in dvodimenzionalna šesterokotna ...... 9
Slika 3.3: Prikaz oblik Kohonenove mreže, z leve si sledijo navadna mreža, valj brez
osnovnih ploskev in toroid. .............................................................................................. 10
Slika 4.1: Prikaz uporabniškega vmesnika zavihka »Nastavitve« .................................... 16
Slika 4.2: Del algoritma, ki ga uporabljamo za implementacijo navadne mreže ............... 18
Slika 4.3: Metoda za popravljanje uteži za mrežo toroidalne oblike ................................. 19
Slika 4.4: Prikaz uporabniškega vmesnika zavihka »Enačba« ......................................... 20
Slika 4.5: Prikaz zavihka »Vizualizacija« med učenjem Kohonenove mreže .................... 22
Slika 4.6: Metoda onDrawFrame(), kjer se izrisujejo objekti .......................................... 24
Slika 4.7: Del metode draw(), ki izriše neaktivni del Kohonenove mreže ....................... 25
Slika 4.8: Srčnica pri velikosti mreže 12 x 12 in krog pri velikosti 12 x 12 ........................ 27
Slika 4.9: Krogla pri velikosti 25 x 25 in stožec pri enaki velikosti..................................... 28
Slika 4.10: Toroid pri velikosti 15 x 15 in isti toroid z vidno luknjo .................................... 28
KAZALO TABEL
Tabela 2.1: Tabela razlik med operacijskimi sistemi za mobilne naprave .......................... 4
Tabela 2.2: Prikaz orodij, vsebovanih v Android SDK in ADT ............................................ 6
Tabela 2.3: Prikaz različnih velikosti in gostot pikslov mobilnih naprav .............................. 7
Tabela 4.1: Vpliv različnih parametrov na rezultate ......................................................... 25
Tabela 4.2: Vpliv različnih enačb na rezultat .................................................................... 26
VII
UPORABLJENE KRATICE
OpenGL ES – odprta grafična knjižnica za vgrajene sisteme (angl. Open Graphics Library
for Embedded Systems)
SGL – razširljiva grafična knjižnica (angl. Scalable Graphics Library)
SSL – sloj varnih vtičnic (angl. Secure Socket Layer)
ARM – napredni stroj RISC (angl. Advanced RISC Machine)
RISC – računalnik z majhnim naborom inštrukcij (angl. reduced instruction set computer)
OS – operacijski sistem (angl. operating system)
SDK – razvojna programska oprema (angl. software development kit)
ADT – razvojna orodja Android (angl. Android development tools)
AVD – navidezna naprava Android (angl. Android virtual device)
API – programski vmesnik (angl. application programming interface)
dpi – slikovnik pik na palec (angl. dots per inch)
QVGA – (angl. Quarter Video Graphics Array)
WQVGA - (angl. Wide Quarter Video Graphics Array)
HVGA - (angl. Half-size Video Graphics Array)
WXGA - (angl. Wide Extended Graphics Array)
WVGA - (angl. Wide Video Graphics Array)
1
1 UVOD
Kohonenove nevronske mreže so vrsta umetnih nevronskih mrež, ki jih je implementiral
Teuvo Kohonen leta 1982, in so najbolj znan predstavnik nenadzorovanega učenja
umetnih nevronskih mrež. Njihova uporabnost se kaže v sposobnosti gručenja podatkov
in interpretacije večdimenzionalnih podatkov, ki jih je Kohonenova nevronska mreža
sposobna preslikati v manj dimenzij. Prednost Kohonenove nevronske mreže je, da ji
lahko predstavimo podatke v neurejenem zaporedju, pa jih bo znala sama urediti, medtem
ko je njena slabost težka interpretacija izhodov. Zato je uporabna vizualna interpretacija
podatkov, kar je tudi eden izmed ciljev te diplomske naloge.
Operacijski sistem Android je trenutno najbolj priljubljen operacijski sistem za pametne
telefone, uporablja pa se tudi za druge mobilne naprave, kot so npr. tablični računalniki.
Glavna značilnost mobilnih naprav je intuitivnost uporabniškega vmesnika, kjer interakcija
z objekti na zaslonu deluje prek dotika zaslona, sama naprava pa omogoča interakcijo z
okoljem preko vgrajene strojne opreme (kamera, pospeškometer, kompas) in interneta.
Zaradi teh značilnosti bodo mobilne naprave vedno bolj priljubljene, prav tako pa tudi
operacijski sistem Android, ki je pomemben za prihodnost razvoja mobilnih naprav.
Interpretacija izhodov Kohonenove mreže je zahtevna, zato je dobro rezultate predstaviti
grafično. Android ima implementiran standard OpenGL ES, ki omogoča izrisovanje v 3D-
prostoru, kar je primerno za vizualizacijo izhodov Kohonenove nevronske mreže. To smo
izkoristili za animacijo učenja Kohonenove mreže.
Diploma je razdeljena na pet poglavij. V drugem poglavju predstavimo operacijski sistem
Android in njegove značilnosti ter opišemo, kako na njem poteka razvoj programske
opreme. V tretjem se posvetimo Kohonenovim nevronskim mrežam, predstavimo njihove
značilnosti in povemo, v čem se razlikujejo od umetnih nevronskih mrež. V naslednjih
podpoglavjih prikažemo različne strukture Kohonenovih nevronskih mrež in predstavimo
učenje Kohonenove nevronske mreže. Pri tem zajamemo različne procese, ki so del
učenja, in na koncu definiramo celoten učni algoritem. V zadnjem podpoglavju pri
Kohonenovih nevronskih mrežah predstavimo še različne parametre in izbiro različnih
funkcij, ki vplivajo na učenje Kohonenove nevronske mreže. V zadnjem poglavju opišemo
implementacijo. Pri tem predstavimo, kako je definirana naša Kohonenova nevronska
mreža, kako smo implementirali vizualizacijo izhodov Kohonenove mreže na operacijskem
sistem Android in katere vhodne podatke smo izbrali za učenje. V zadnjem podpoglavju
prikažemo rezultate testiranja naše aplikacije.
2
2 OPERACIJSKI SISTEM ANDROID
Android je operacijski sistem, vendar ne zgolj to. Je sklad programske opreme, ki poleg
operacijskega sistema vsebuje še ključne aplikacije in vmesni sloj programske opreme,
narejen za razvoj aplikacij. Operacijski sistem Android je sestavljen iz navideznega stroja ,
ki teče na jedru Linux. Razvit je bil s strani Googla in drugih podjetij iz združenja Open
Handset Alliance za mobilne naprave, kot so pametni telefoni in tablični računalniki. Je
odprtokoden operacijski sistem, izdan pod licenco Apache[1].
Na Slika 2.1 je prikazan Androidov sklad programske opreme. Vsebuje aplikacije,
aplikacijsko ogrodje, programske knjižnice, Androidovo izvajalno okolje in jedro Linux [2].
Slika 2.1: Prikaz arhitekture programske opreme operacijskega sistema Android
3
Aplikacijski sloj vsebuje najpomembnejše osnovne aplikacije, kot so spletni brskalnik,
odjemalec za e-pošto, SMS-program, koledar, seznam kontaktov. Vse aplikacije so
napisane v programskem jeziku Java.
Aplikacijsko ogrodje omogoča dostop do strojne opreme in enostavno upravljanje z njim
ter dostop do aplikacijskega sloja, da lahko uporablja njegove storitve. Namenjen je
razvijalcem za razvijanje bogatih in raznolikih aplikacij.
Programske knjižnice vsebujejo nabor komponent, ki jih uporabljajo različni deli
operacijskega sistema Android. Napisane so v programskem jeziku C ali C++.
Android izvajalno okolje poganja vsako aplikacijo v svojem navideznem stroju Dalvik.
Dalvik navidezni stroj je narejen tako, da lahko hkrati učinkovito poganja več navideznih
strojev. Navidezni stroj izvršuje programe v datotečnem formatu .dex, ker pa razvijamo v
programskem jeziku Java, mora prevedeno Javino zložno kodo (angl. Java bytecode) v
datotekah .class prevesti v .dex format.
Android temelji na jedru Linux verzije 2.6 in ga uporablja za sistemske storitve, kot so
upravljanje s pomnilnikom, upravljanje s procesi, upravljanje z gonilniki in varnost. Jedro
se obnaša tudi kot vmesni nivo abstrakcije med strojno in programsko opremo.
Poleg splošnih značilnosti operacijskega sistema Android je pomembno tudi to, da obstaja
veliko različnih verzij (Slika 2.2), kar povzroča probleme razvijalcem, saj morajo svoje
aplikacije prilagoditi tako, da bodo podpirale vse najbolj razširjene verzije[3].
Slika 2.2: Prikaz deleža različnih verzij operacijskega sistema Android
4
2.1 Primerjava z drugimi operacijskimi sistemi za mobilne naprave
V Tabela 2.1 so prikazane razlike med operacijskim sistemom Android in drugimi
operacijskimi sistemi za mobilne naprave[4]. Razlike se nanašajo na razvijanje aplikacij,
razlike v arhitekturi in informacije glede razvoja operacijskega sistema.
Tabela 2.1: Tabela razlik med operacijskimi sistemi za mobilne naprave
Kategorija Android iOS[5] Windows Phone
Symbian OS
BlackBerry OS[6]
Razvojni jezik
Java, C++ Objective-C C#, C++ Java, C++,
Python Java
Emulator Da Da Da Da Da
Družina operacijskih
sistemov Linux OS X, Unix
Windows Phone
Symbian Blackberry
Zadnja izdana verzija
4.1 (Jelly Bean)
10.7. 2012
5.1.1 7. 5. 2012
7.5 8. 4. 2012
10.1. (Nokia Belle)
24.8.2011
7.1.0.649 27.8. 2012
Podprte računalniške
platforme
ARM, MIPS, x86
ARM(iPhone, iPod, iPad), Apple A4, Apple A5, Apple A5x
Qualcomm Snapdragon
ARM, x86 ARM
Obseg naprav
pametni telefoni, tablični
računalniki
pametni telefoni, tablični
računalniki, medijski
predvajalniki
pametni telefoni (za
tablične računalnike je Windows
RT)
pametni telefoni
pametni telefoni (za
tablične računalnike
je BlackBerry Tablet OS)
Podjetja, ki izdelujejo
naprave za OS
HTC, LG, Samsung,
Sony in drugi[7]
Apple HTC, Nokia,
Samsung
včasih največ
Nokia, tudi Samsung,
Sony Erricson
BlackBerry
Model izvorne kode
Odprtokoden Zaprta koda Zaprta koda Lastniška Zaprta koda
Iz tabele lahko razberemo da se trenutno najhitreje razvijajo Android, iOS, BlackBerry OS
in Windows Phone, čeprav se slednji še ni tako uveljavil, saj je bila prva verzija izdana
šele proti koncu leta 2010[8]. Razvoj pa se je ustavil pri Symbian OS, ki je bil leta 2010
celo vodilni na trgu, zdaj pa so se podjetja odločila za podporo Androidu ali Windows
Phone[9]. Večina operacijskih sistemov je namenjena za računalniško platformo ARM
5
(Advanced RISC Machine), razen Windows Phone, ki je razvit za platformo Qualcomm, ki
temelji na ARM. Večina, razen Windows Phone in iOS, jih podpira razvijanje v
programskem jeziku Java, skoraj vsi pa podpirajo programiranje v C/C++. Aplikacijo lahko
hkrati za vse mobilne naprave razvijaš le pri Androidu in iOS, kar je prednost pred
preostalimi operacijskimi sistemi. Razlika je tudi v podpori proizvajalcev mobilnih naprav,
saj sta iOS in BlackBerry OS le na napravah njunih podjetij Apple in BlackBerry, medtem
ko drugi podpirajo več različnih proizvajalcev mobilnih naprav, največ pa prav Android.
Operacijski sistem Android je edini, ki je odprtokoden, kar je tudi ena izmed njegovih
prednosti in razlog, da je najbolj uporabljan operacijski sistem za pametne telefone z 59-
odstotnim deležem na trgu glede na raziskave v prvem polletju leta 2012. Za njim so iOS
s 23 %, Symbian OS ter BlackBerry OS z malo več kot 6 % in nazadnje WindowsPhone z
2 % [10].
2.2 Razvojna programska oprema
Android ima obširno skupnost razvijalcev, ki aplikacije pišejo v prirejeni različici Jave,
objavijo pa jih lahko v spletni trgovini GooglePlay (prej Android Market). Za razvoj
programov potrebujemo Android SDK, Android SDK Platform-tools in verzijo
operacijskega sistema Android, za katero bomo razvijali aplikacijo[11]. Razvijalci pri
Androidu so naredili tudi ADT – vtičnik za razvojno okolje Eclipse, ki v razvojno okolje
integrira razhroščevanje, gradnjo uporabniškega vmesnika in testiranje na navideznih ali
pravih mobilnih napravah. Zato je najbolj razširjeno razvijanje v razvojnem okolju Eclipse,
lahko pa uporabimo tudi kakšno drugo razvojno okolje ali tekstovni urejevalnik, za
prevajanje pa ustrezna orodja iz razvojnega paketa Android SDK [12].
V Tabela 2.2 bomo predstavili razvojna orodja, ki so vsebovana v razvojnem
programskem paketu Android SDK [4].
6
Tabela 2.2: Prikaz orodij, vsebovanih v Android SDK in ADT
Orodje v Android SDK Opis
Android Za ustvarjanje oz. posodabljanje Android projektov in ustvarjanje navideznih naprav Android.
Android Emulator Za izvajanje programa v posnemanem okolju Android.
Android Debug Bridge
Za komunikacijo z emulatorjem ali povezano mobilno napravo (omogoča namestitev programa in izdajanje ukazov napravi).
Ant Za prevajanje in pretvarjanje v datoteko .apk.
Keytool Za generiranje varnostnih certifikatov in privatnega ključa, potrebnega za podpis datoteke .apk.
Jarsigner Za podpis datoteke .apk s privatnim ključem.
Treba je omeniti, da če razvijamo v razvojnem okolju Eclipse, so ta orodja samodejno
klicana in nam jih ni treba uporabljati pri samem razvoju programov za Android.
Stopnje razvijanja aplikacije za Android so naslednje:
Nastavitev okolja: v tej stopnji namestimo prej omenjene potrebne programe in
nastavimo svoje razvojno okolje. Ustvarimo tudi Androidovo navidezno napravo –
emulator ali AVD.
Razvijanje: nastavimo nastavitve v projektu in razvijemo program.
Prevajanje, razhroščevanje in testiranje: v tej stopnji se projekt prevede v paket
.apk, ki ga lahko namestimo na Android napravo. Program lahko razhroščujemo in
testiramo s pomočjo orodij, ki so v razvojnem programskem paketu Android SDK.
Objavljanje: v tej stopnji program pripravimo za izdajo in dostopnost
uporabnikom.
Pri razvoju želimo, da bo naša aplikacija dostopna za vse mobilne naprave. Zato moramo
upoštevati različne velikosti zaslonov mobilnih naprav in s tem povezano različno gostoto
pikslov na zaslonih. To dosežemo tako, da v aplikaciji deklariramo, katere velikosti
zaslonov podpiramo in zanje izdelamo različne uporabniške vmesnike. Za različne
zaslone moramo izdelati šest uporabniških vmesnikov, poleg velikosti v prvem stolpcu
Tabela 2.3 še za dve različni orientaciji – horizontalno in vertikalno. Priskrbeti moramo tudi
vse ikone oz. slike, ki jih bomo uporabljali v štirih različnih velikostih glede na različno
gostoto pikslov na zaslonu (prva vrstica Tabela 2.3). Android nato ob zagonu aplikacije
sam izbere najprimernejši uporabniški vmesnik[13].
7
Tabela 2.3: Prikaz različnih velikosti in gostot pikslov mobilnih naprav
Nizka gostota (120), ldpi
Srednja gostota (160), mdpi
Visoka gostota (240), hdpi
Zelo visoka gostota (320), xhdpi
Majhen zaslon QVGA (240x320)
480x640
Normalen zaslon
WQVGA400 (240x400) WQVGA (240x432)
HVGA (320x480)
WVGA (480x800) WVGA854 (480x854)
640x960
Velik zaslon
WVGA800 (480x800) WVGA854 (400x854)
WVGA800 (480x800) WVGA854 (480x854) 600x1024
Zelo velik zaslon
1024x600
WXGA (1280x800) 1024x768 1280x768
1536x1152 1920x1152 1920x1200
2048x1536 2560x1536 2560x1600
Aplikacijo lahko razvijamo za točno določeno Android platformo ali pa za najnovejšo
Android platformo in nato omogočimo podporo prejšnjim verzijam Android operacijskega
sistema. To dosežemo s pomočjo Android Support Library, ki omogoča podporo verzijam
vse do Android 1.6. To sicer pomeni, da za določene stvari ne bomo mogli uporabljati
najnovejših knjižnic, ampak bomo morali uporabljati ustrezno nadomestilo iz knjižnice
Android Support Library. Tako lahko za svojo aplikacijo dosežemo podporo za okoli 90 %
mobilnih naprav na trgu [14].
8
3 KOHONENOVE NEVRONSKE MREŽE
Nastanek umetnih nevronskih mrež je bil stimuliran zaradi ugotovitve, da človeški
možgani delujejo popolnoma drugače kot računalnik, a so vseeno dosti hitrejši pri
računanju. Kohonenove nevronske mreže so vrsta umetnih nevronskih mrež, ki so bile
razvite zaradi posebne lastnosti možganov, da organizirajo vhodne informacije v obliki
topološko urejenih računskih mrež. Te računske mreže so tako sestavni blok
infrastrukture procesiranja informacij živčnega sistema [15].
Umetne nevronske mreže sestavlja množica nevronov, ki svoje znanje vsebujejo v utežeh
nevrona, razlikujejo pa se po organiziranosti nevronov in načinu učenja. Kohonenove
nevronske mreže so primer nenadzorovanega učenja, kjer se priskrbijo le učni vzorci,
Kohonenova mreža se nato sama organizira glede na dane učne vzorce. Zato ji pravimo
tudi samoorganizirajoča mreža (angl. self-organizing map). Za učenje uporablja
tekmovalno učenje, kjer se izmed vseh nevronov izbere eden – zmagovalec, ki se najbolj
prilega učnemu vzorcu.
Kohonenove nevronske mreže se uporabljajo kot računska metoda za vizualizacijo
podatkov in analizo večdimenzionalnih podatkov, predvsem eksperimentalno pridobljenih
podatkov (neurejeni podatki, za katere ne vemo, kaj vsebujejo).
3.1 Struktura Kohonenove nevronske mreže
Pri samoorganizirajočih mrežah poznamo dva različna modela: prvi je Willshaw - von der
Malsburg, drugi pa Kohonenov, ki ga je predstavil Teuvo Kohonen leta 1982. Izkazalo se
je, da je ta bolj splošno uporaben in učinkovit, zato je tudi bolj poznan, saj se je hitro
razširil na različna področja uporabe. Kohonenov model nevronske mreže ima po navadi
svoje nevrone razporejene v dvodimenzionalno mrežo, ki ji pravimo tudi Kohonenov nivo,
pri čemer je vsak nevron povezan z vsemi nevroni iz vhodnega nivoja. To je razvidno na
Slika 3.1. Obstaja tudi poseben primer enodimenzionalne mreže nevronov, ki so kar ena
vrstica nevronov. Tri- ali večdimenzionalne mreže se le redko uporabljajo.
9
Slika 3.1: Dvodimenzionalna zgradba Kohonenove nevronske mreže
Pri zgradbi so pomembne tudi topologije povezav med posameznimi nevroni v
Kohonenovem nivoju. Pomembne so zato, ker z izbrano topologijo določimo, kako se
bodo popravile uteži okoli zmagovalnega nevrona in s tem, kako bo vhodni podatek vplival
na obliko Kohonenove nevronske mreže. Različne topologije, prikazane na Slika 3.2, so:
pravokotna: vsak nevron ima največ štiri sosede (manj jih imajo le nevroni na
robovih mreže),
šesterokotna (heksagonalna): vsak nevron ima največ šest sosedov (manj jih
imajo nevroni na robovih mreže).
Slika 3.2: Prikaz različnih topologij povezav med nevroni, z leve si sledijo
enodimenzionalna, dvodimenzionalna pravokotna in dvodimenzionalna šesterokotna
10
Pri obeh vrstah topologij lahko med sabo povezujemo tudi robne nevrone in tako
zagotovimo, da se bodo robovi mreže lepše prilagajali vhodnim podatkom. Tako dobimo
različne oblike Kohonenove mreže, ki so prikazane na Slika 3.3. [16]:
Valj brez osnovnih ploskev, če povežemo zgornji in spodnji rob mreže ali levi in
desni rob mreže.
Toroid, če povežemo zgornji in spodnji rob mreže in tudi levi in desni rob mreže.
Opozorimo še, da če imamo heksagonalno topologijo, mora biti število vrstic
sodo[17].
Slika 3.3: Prikaz oblik Kohonenove mreže, z leve si sledijo navadna mreža, valj brez
osnovnih ploskev in toroid.
3.2 Učenje Kohonenove nevronske mreže
Kohonenovo nevronsko mrežo učimo tako, da ji predstavimo nove učne vzorce, mreža pa
se jim potem prilagodi. Tako podatki, ki so podobni prejšnjim, aktivirajo isti nevron oz. isto
področje nevronov. Tej lastnosti pravimo gručenje (angl. clustering), iz nje pa izhaja tudi
dejstvo, da Kohonenova mreža podatke stisne, saj lahko shrani v majhno število nevronov
podatke od velikega števila iteracij.
Vhodni podatki so zvezna števila, njihovo območje ni pomembno, saj se Kohonenova
mreža prilagodi tudi območju podatkov [18]. Potrebno je dovolj veliko število vhodnih
podatkov, da se lahko Kohonenova mreža ustrezno prilagodi, poleg tega morajo biti
vhodni podatki tudi enakomerno razporejeni po prostoru rešitve, saj se bo le tako lahko
Kohonenova mreža ustrezno razvila in zajela celoten prostor rešitve.
Pred začetkom učenja je pomembna tudi inicializacija uteži nevronov, ki se nastavi na
naključno majhno vrednost iz izbranega ozkega območja.
Sam učni algoritem je sestavljen iz več procesov. Ti si sledijo v naslednjem vrstnem redu:
tekmovalni proces, kooperativni proces in proces prilagajanja.
11
Tekmovalni proces
V tem procesu se primerjajo vektor vhodnih podatkov z vektorjem uteži
posameznega nevrona . Treba je izračunati razdaljo med podatki,
za kar uporabimo izbrano funkcijo razdalje – po navadi se uporabi Evklidska razdalja
(3.1).
(3.1)
V enačbi je z označen j-ti nevron v Kohonenovi nevronski mreži. Tisti nevron, ki ima
najkrajšo razdaljo od vektorja vhodnih podatkov, postane zmagovalni nevron. To
ponazarja (3.2).
(3.2)
Kooperativni proces
Po določitvi zmagovalnega nevrona je treba definirati tudi njegovo soseščino, ta pa določa
nevrone, ki se jim bodo popravile uteži. Pred začetkom učenja je treba definirati začetni
radij, ki se med učenjem glede na izbrano funkcijo zmanjševanja radija zmanjšuje.
Odvisno od izbrane funkcije sosednosti pa se določi tudi vpliv, ki se uporabi pri
popravljanju uteži. Pri Gaussovi funkciji se na primer z oddaljenostjo nevrona od
zmagovalnega nevrona eksponentno zmanjšuje vpliv in tako se nevronom uteži
popravljajo vedno manj.
Proces prilagajanja
V procesu prilagajanja se izbranim nevronom popravijo uteži po ((3.3)), kjer je
vhodni vektor podatkov, vektor uteži nevrona,
oznaka pa predstavlja stanje vektorja v času n oz. v n-ti iteraciji algoritma.
Na popravljanje uteži vpliva tudi hitrost učenja in funkcija sosednosti .
(3.3)
12
Proces prilagajanja ima tudi več stopenj.
Prva je urejanje in obsega prvih tisoč ali še več ponovitev. V tej stopnji Kohonenova
mreža organizira vhodne vzorce. Pomembno je, da sta pravilno nastavljena začetni radij
in hitrost učenja, ki se potem postopoma zmanjšujeta skozi učni proces [15].
Druga je stopnja konvergence in je potrebna, da se Kohonenova mreža natančneje
prilagodi vhodnim podatkom. Ta stopnja bi morala trajati vsaj 500-krat toliko, kot je število
nevronov v mreži, kar po navadi pomeni več deset tisoč ponovitev. Pomembno je, da
hitrost učenja nikoli ne pride na nič, saj se sicer uteži ne bodo mogle več popravljati.
Učni algoritem
Spodnji učni algoritem prikazuje zaporedje korakov, ki jih je treba izvesti za en učni cikel –
epoho [15].
1. Inicializacija uteži nevronov na naključne majhne vrednosti, npr. med 0,5 in -0,5.
Treba je nastaviti tudi začetni radij in hitrost učenja.
2. Naključno izberemo nov vhodni vektor iz učne množice.
3. Opravimo tekmovalni proces, kjer poiščemo zmagovalni nevron glede na funkcijo
razdalje.
4. Opravimo kooperativni proces, kjer uporabimo izbrano funkcijo za zmanjšanje
radija r in funkcijo za zmanjšanje hitrosti učenja α.
5. Opravimo proces prilagajanja, kjer izbranim nevronom v soseski popravimo
nevrone.
3.3 Parametri Kohonenove nevronske mreže
Pri Kohonenovih mrežah lahko nastavljamo več različnih parametrov, in sicer:
Velikost Kohonenove mreže: definiramo število nevronov horizontalno in
vertikalno.
Število iteracij učnega algoritma: za dobre rezultate je treba učni algoritem ponoviti
vsaj 10-krat toliko, kot je vhodnih vzorcev[16]. Od te nastavitve sta odvisni funkcija
sosednosti in funkcija zmanjševanja hitrosti učenja.
Začetni radij: odvisen je od nastavljene velikosti Kohonenove mreže, dobro je, da
je vsaj polovica premera mreže ali pa malo več (npr. če je velikost mreže 8 x 8,
potem bi izbrali začetni radij 5).
13
Hitrost učenja: na začetku določimo vrednost, malo manjšo od 1,0. Hitrost učenja
se med učnim procesom zmanjšuje glede na izbrano funkcijo zmanjševanja hitrosti
učenja, vendar ne sme pasti prenizko.
Poleg parametrov lahko izbiramo tudi med različnimi funkcijami za zmanjševanje radija in
hitrosti učenja.
a) Funkcija sosednosti
Funkcija sosednosti se izračuna za nevron pred popravljanjem uteži. Uporablja
se pri izračunu novih uteži in določa, kako zelo se bodo uteži popravile. Gaussova funkcija
(3.4) je najpogosteje uporabljena funkcija, saj se enakomerno zmanjšuje z oddaljenostjo
od zmagovalnega nevrona, tako se nevronom, ki so bolj oddaljeni, manj popravijo uteži
[15].
(3.4)
V (3.4) je trenutni radij po izračunani funkciji zmanjševanja radija, pa je razdalja
med zmagovalnim in trenutnim nevronom.
Najpreprostejša funkcija, ki se uporablja, je mehurčna. Pri njej se vsem nevronom v
soseski uteži popravijo z enakim vplivom, ki je enak 1.
b) Funkcija hitrosti učenja
Funkcija hitrosti učenja ima velik vpliv v procesu prilagajanja, vendar le v stopnji
urejanja. V stopnji konvergence je že tako majhna, da nima velikega vpliva na učenje.
Obstaja več različnih funkcij hitrosti učenja, uporabljajo se linearna (3.5), eksponentna
(3.6) in inverz časa (3.7). V enačbah n označuje trenutno iteracijo algoritma.
(3.5)
(3.6)
(3.7)
14
c) Funkcija zmanjševanja radija
Za Kohonenove mreže je značilno tudi, da se radij, ki definira širino soseske, zmanjšuje
skozi učni proces. Najpogosteje uporabljena funkcija je eksponentni razpad (3.8), kjer je
začetni radij, pa trenutna iteracija algoritma [15].
(3.8)
konstanta je definirana s spodnjo enačbo (3.9).
(3.9)
15
4 OPIS IMPLEMENTACIJE
Program smo implementirali v razvojnem okolju Eclipse [19], uporabljali smo zadnjo
verzijo Android SDK [20] in Android SDK Platform-tools [11], za razvojno platformo pa
operacijski sistem Android 2.1 (API 7). Za to smo se odločili, da smo lahko aplikacijo
testirali tudi na pravi mobilni napravi, ta pa je imela operacijski sistem Android 2.1.
Aplikacijo smo preizkusili tudi na razvojni platformi Android 4.1, ki je zadnja verzija
operacijskega sistema Android. Pri tem smo uporabili programsko knjižnico Android
Support Library, ki omogoča podporo za prejšnje verzije Androida. To nam je tudi uspelo,
saj smo lahko aplikacijo za Android 4.1 namestili na Android 2.1. Med samim razvojem
smo aplikacijo testirali s pomočjo emulatorja, prej smo si morali ustvariti navidezno
napravo Android za razvojno platformo Android 2.1 in Android 4.1. Slike aplikacije so iz
emulatorja, in sicer na levi za Android 2.1 in na desni za Android 4.1. Aplikacijo smo
napisali v programskem jeziku Java.
4.1 Implementacija Kohonenove nevronske mreže
Za implementacijo Kohonenove nevronske mreže smo uporabili postopke, opisane v
poglavju 3, pri tem pa smo poskušali implementirati čim več raznolikosti Kohonenovih
nevronskih mrež. Namen je bil, preizkusiti raznolike Kohonenove nevronske mreže in
ugotoviti, katera se najbolj približa želenim rezultatom. Torej smo raziskovali, kakšen vpliv
imajo oblike in parametri Kohonenovih nevronskih mrež na to, da se Kohonenova
nevronska mreža čim lepše prilagodi vhodnim podatkom, ki jih dobimo iz enačb likov in
teles.
Implementirali smo dve različni obliki Kohonenove mreže, in sicer:
navadno mrežo in
mrežo toroidalne oblike.
Od topologij Kohonenovih nevronskih mrež smo implementirali le pravokotno mrežo,
poleg tega pa veliko različnih funkcij, ki nastopajo v parametrih Kohonenove nevronske
mreže:
Funkcije hitrosti učenja:
o inverz časa,
o eksponentna funkcija in
16
o linearna funkcija.
Funkcije sosednosti:
o Gaussova funkcija in
o mehurčna funkcija.
Funkcije zmanjševanja radija:
o Eksponentni razpad, ki se uporablja, ko je izbrana Gaussova funkcija.
o Zmanjševanje radija po vnaprej določenem številu iteracij, uporablja se,
ko je izbrana mehurčna funkcija.
Poleg tega se lahko nastavljajo še preostali parametri Kohonenove mreže:
velikost mreže, definirana kot število nevronov v širino in višino mreže (npr. 12
x 12),
število iteracij učnega algoritma,
začetni radij in
začetna hitrost učenja.
Vse te nastavitve se lahko v aplikaciji nastavljajo pod zavihkom »Nastavitve«, kot je vidno
na Slika 4.1.
Slika 4.1: Prikaz uporabniškega vmesnika zavihka »Nastavitve«
17
Nastavitve lahko enostavno urejamo z dotikom na želeno nastavitev, vrednosti pa se
shranijo v objekt SharedPreferences. To je razred v programskih knjižnicah Android, ki
omogoča hranjenje nastavitev za uporabnika, tako da mu nastavitev ni treba določati
vedno znova.
Kohonenova nevronska mreža je implementirana v razredih Neuron in
KohonenNeuralNetwork. Izvajanje Kohonenove mreže poteka v novi niti, saj na ta
način preprečimo obremenjenost niti z uporabniškim vmesnikom. Implementirali pa smo
tudi sporočanje dogodkov. Tako lahko vsako iteracijo učenja dobimo podatke o novih
utežeh nevronov, ki jih uporabimo za izrisovanje Kohonenove mreže. Razred
KohonenNeuralNetwork vsebuje tudi lastnost animationSpeed, ki določa čas v ms
med posameznimi iteracijami učenja in s tem hitrost animacije učenja Kohonenove
nevronske mreže.
Posebnosti učnega algoritma
Učni algoritem je implementiran po postopku, opisanem v poglavju 3.2. Vseeno pa so
določene posebnosti pri implementaciji učnega algoritma za različne oblike Kohonenove
mreže. Razlike so v določitvi oddaljenosti nevronov od zmagovalnega nevrona in s tem
določitvi okolice okoli zmagovalnega nevrona, kjer se bodo popravile uteži. Za določitev
zmagovalnega nevrona smo pri obeh oblikah uporabili Evklidsko razdaljo (3.1).
a) Navadna mreža
Pri navadni mreži smo uporabili Evklidsko razdaljo (3.1), in sicer za določitev razdalje med
nevroni in zmagovalnim nevronom. Trenutnemu nevronu se popravi utež, če je njegova
oddaljenost manjša od trenutnega radija, kar je razvidno iz odseka kode na Slika 4.2.
18
Slika 4.2: Del algoritma, ki ga uporabljamo za implementacijo navadne mreže
Metoda GetNeighbourhoodWidth vrne okolico, ki je definirana kot kvadrat trenutnega
radija.
b) Mreža toroidalne oblike
Pri tej obliki pa zaradi povezav med robnimi nevroni ni mogoče določiti oddaljenosti med
nevroni s pomočjo Evklidske razdalje. Zato smo pri vsakem nevronu dodali polje, ki
določa sosede trenutnega nevrona. To smo uporabili pri samem algoritmu tako, da
popravljamo uteži nevronom toliko časa, dokler ne pridemo do oddaljenosti, ki je večja od
trenutnega radija. Implementacija tega dela algoritma je v rekurzivni metodi
AdjustWeightsAroundWinningNeuron. Del kode s to metodo je prikazan na Slika
4.3.
19
Slika 4.3: Metoda za popravljanje uteži za mrežo toroidalne oblike
4.2 Enačbe likov in teles ter generiranje vhodnih podatkov
Vhodne podatke, s katerimi učimo Kohonenovo nevronsko mrežo, dobimo iz enačbe lika
ali telesa. Končni rezultat naj bi bila Kohonenova nevronska mreža, kjer dobimo obliko
izbranega lika ali telesa, če izrišemo njene uteži. Enačba generira točke, ki se nahajajo na
obrisu likov oz. na površini teles. Za generiranje teh točk smo uporabili parametrične
enačbe, kjer s parametri določimo velikost in pri nekaterih enačbah tudi obliko lika oz.
telesa.
Enačbo lahko izberemo pod zavihkom »Enačba«, uporabniški vmesnik tega zavihka je
prikazan na Slika 4.4.
20
Slika 4.4: Prikaz uporabniškega vmesnika zavihka »Enačba«
Po izbiri se izbrana enačba shrani v objekt razreda SharedPreferences in se pozneje
uporabi za učenje Kohonenove mreže.
Implementirali smo enačbe naslednjih likov in teles:
Krog, kjer je polmer kroga (4.1) [21].
(4.1)
Srčnica ali kardioida, kjer je polmer stalnega kroga in polmer krogov, ki se
premikajo okoli njega, ter tako naredijo krivuljo (4.2) [22].
(4.2)
21
Krogla, kjer je polmer krogle (4.3)[23].
(4.3)
Stožec, kjer je polmer osnovne ploskve in višina stožca (4.4)[24].
(4.4)
Toroid, kjer je polmer cevi in polmer kroga na sredini toroida (4.5) [25].
,
(4.5)
V enačbah smo parametre , in izbirali naključno iz njihovega območja ter tako
zagotovili enakomerno razporejenost točk po površini.
4.3 Vizualizacija v 3D-prostoru
V operacijskem sistemu Android je za potrebe risanja v 3D implementiran standard
OpenGL ES. Android je do verzije 2.2 podpiral le standarde OpenGL ES 1.0 in 1.1, zdaj
pa podpira še OpenGL ES 2.0[26]. Za potrebe vizualizacije Kohonenove nevronske mreže
smo uporabili Androidovo programsko knjižnico za OpenGL ES 1.1, in to zaradi dveh
razlogov. Prvi je, da aplikacijo razvijamo za Android 2.1, ki podpira le to verzijo, drugi pa,
da je ta verzija implementirana tako, da je lažje razumljiva za začetnika v OpenGL in
primerna za enostavno 3D-izrisovanje.
Vizualizacija je osrednji del aplikacije, zato je zavihek »Vizualizacija« izbran, ko odpremo
aplikacijo. Uporabniški vmesnik tega zavihka je na Slika 4.5.
22
Slika 4.5: Prikaz zavihka »Vizualizacija« med učenjem Kohonenove mreže
Učenje Kohonenove nevronske mreže lahko začnemo z dotikom na prvi gumb z leve,
začasno zaustavimo pa ga lahko s pritiskom na isti gumb. S pritiskom na gumb v sredini
zaustavimo učenje, ki se mora nato začeti znova. S pritiskom na tretji gumb z leve se
aplikacija razširi čez cel ekran, s ponovnim pritiskom pa se vrne v prejšnje stanje. Učenje
se začne glede na trenutno določene nastavitve enačbe in Kohonenove mreže. Če
spreminjamo te nastavitve, se trenutno učenje Kohonenove mreže prekine in ga moramo
začeti znova, v veljavi pa so nove nastavitve.
Pri vizualizaciji smo implementirali izrisovanje več stvari:
Izrisovanje stanja Kohonenove mreže med učenjem. Pri tem izrisujemo daljice
med trenutnim nevronom in njegovimi sosedi (ti so različni, odvisno je od oblike in
topologije Kohonenove mreže), tako da nastane povezana Kohonenova mreža.
Točko, ki določa položaj nevrona v prostoru, določajo njene uteži. Nevronu med
učenjem določimo tudi njegovo stanje med učenjem, to je lahko:
23
o Neaktiven: nevronu se niso popravile uteži (povezave so označene z modro
barvo).
o Aktiven: nevronu so se popravile uteži (povezave so označene z zeleno
barvo).
o Zmagovalec: zmagovalni nevron, okoli katerega se bodo popravile uteži
(označen je z vijolično barvo).
Tako lahko med učenjem spremljamo, na katerem področju nevronske mreže se
bodo popravile uteži, vidimo pa tudi, kako se zmanjšuje radij oz. območje
popravljanja uteži.
Izrisovanje vhodnih podatkov oz. točk, s katerimi učimo Kohonenovo mrežo
(označeni so z rdečo barvo).
Rotacija objektov v 3D-prostoru med učenjem in po njem.
Med učenjem se zgoraj desno izpisuje trenutna številka iteracije učnega algoritma, v
kateri se nahaja Kohonenova mreža in število vseh iteracij.
Risanje v 3D na Androidu
Android ima za risanje v 3D pripravljene določene razrede, ki olajšajo samo
implementacijo. Te razrede bomo opisali v naslednjih odstavkih.
a) GLSurfaceView
Je kontrola, ki omogoča izrisovanje na površino in upravljanje z objekti na površini preko
knjižnice OpenGL. Privzeto poteka v posebni niti, da ne obremenjuje niti z uporabniškim
vmesnikom. V naši aplikaciji je implementirana v razredu KohonenMapView.
Implementirali smo njeno metodo onTouchEvent(MotionEvent event), ki se odzove
na dogodek, ko se uporabnik dotakne zaslona. Tako smo lahko implementirali rotacijo
Kohonenove mreže.
b) GLSurfaceView.Renderer
Je razred, kjer definiramo, kaj se izrisuje na GLSurfaceView. Zato je treba
GLSurfaceView ob inicializaciji določiti ta razred z metodo
setRenderer(GLSurfaceView.Renderer renderer). V naši aplikaciji je
implementiran v razredu KohonenMapRenderer. Razred GLSurfaceView.Renderer
vsebuje tri ključne metode, ki jih je treba implementirati:
onSurfaceCreated(): ta metoda se kliče le enkrat, ko se ustvari
GLSurfaceView. Tukaj opravimo nastavljanje okolja OpenGL.
24
onSurfaceChanged(): ta metoda se kliče, ko se spremeni velikost kontrole ali
ko se spremeni orientacija zaslona naprave. V tej metodi smo poskrbeli, da se
GLSurfaceView prilagodi na novo velikost.
onDrawFrame(): ta metoda se kliče vsakič, ko je izražena potreba po risanju. V
tej funkciji določimo vse objekte, ki jih želimo izrisati. V naši aplikaciji smo izbrali
možnost, da izrisujemo le takrat, ko to zahtevamo sami. To dosežemo tako, da pri
inicializaciji GLSurfaceView kličemo funkcijo setRenderMode() z argumentom
GLSurfaceView.RENDERMODE_WHEN_DIRTY. Izrisovanje lahko nato sprožimo s
klicem funkcije requestRender(). V nasprotnem primeru je privzeto omogočeno
stalno izrisovanje z določenim številom okvirjev na sekundo. Slika 4.6 prikazuje del
kode s funkcijo onDrawFrame().
Slika 4.6: Metoda onDrawFrame(), kjer se izrisujejo objekti
Izrisovanje Kohonenove mreže poteka v metodi draw() razreda
DrawKohonenNetwork, kjer uporabimo medpomnilnike (angl. buffer) podatkov,
potrebnih za izrisovanje Kohonenove mreže.
25
Slika 4.7: Del metode draw(), ki izriše neaktivni del Kohonenove mreže
4.4 Rezultati
Aplikacijo smo testirali na pametnem telefonu Sony Xperia X8 z naslednjimi značilnostmi:
320 x 480 pikslov velik na dotik občutljiv zaslon,
600 MHz ARM 11 procesor in
grafična kartica Adreno 200.
Po testiranju Kohonenove mreže z različnimi parametri smo dobili rezultate, predstavljene
v Tabela 4.1.
Tabela 4.1: Vpliv različnih parametrov na rezultate
Parametri Kohonenove mreže
Vpliv parametrov na rezultat
Oblika mreže
Liki: vseeno katera mreža.
Telesa: boljša toroidalna oblika mreže, lepše prilagajanje pri telesih, čeprav ima vedno luknjo, medtem ko se navadna
mreža težko preoblikuje v zaključeno celoto.
Velikost mreže
Večja, kot je mreža, bolje se prilagaja vhodnim podatkom in
lepša je oblika telesa oz. lika. V splošnem je dobro, da je velikost vsaj okoli 10 x 10 nevronov. Pri velikem številu
nevronov (npr. 40 x 40) je potrebno veliko število iteracij, pri tem pridobimo na prilagajanju enačbi, ne pa vedno na obliki.
Število iteracij
Večje, kot je število iteracij, boljše je prilagajanje enačbi.
Odvisno je od velikosti mreže, če je premajhna, veliko število iteracij ne pomaga. V splošnem je dobro, da je več tisoč
iteracij. Mi smo testirali z do 10.000 iteracijami.
26
Funkcija hitrosti učenja
Nima vidnega vpliva na rezultat.
Funkcija sosednosti
Boljša je Gaussova funkcija, saj mehurčna preostro zmanjšuje
radij.
Preostale parametre, kot sta začetna hitrost učenja in začetni radij, je treba nastaviti, kot
smo predlagali v poglavju 3.3. Rezultati so odvisni tudi od enačbe, s katero smo učili
Kohonenovo mrežo. Vsaka enačba ima določene posebnosti, kar je predstavljeno v
Tabela 4.2.
Tabela 4.2: Vpliv različnih enačb na rezultat
Enačba Vpliv enačbe na rezultat
Krog (Slika 4.8)
Se lepo prilagaja že pri manjših mrežah in številu iteracij.
Srčnica (Slika 4.8)
Se lepo prilagaja. Problematična je točka, kjer se začnejo
premikati premikajoči krogi, ki naredijo obliko srca. V tej točki se ne prilagaja v redu ne glede na število iteracij in velikost.
Krogla (Slika 4.9)
Pomembno je, da je mreža velika in da je število iteracij
veliko. Pri navadni mreži je težava, ker se težko preoblikuje v zaključeno celoto, pri mreži toroidalne oblike pa, ker ima
obliko toroida in je vedno nekje luknja.
Stožec (Slika 4.9)
Lažje se prilagodi kot krogla, potrebna je manjša mreža in
manj iteracij. Zelo lepo se prilagodi pri vrhu, saj je tam veliko točk. Težje se prilagodi na spodnji krog, saj enačba da točke
le na površini plašča.
Toroid (Slika 4.10)
Najlepše se pričakovano prilagaja toroidalna oblika mreže,
predvsem na luknjo v sredini. Bolje je, če je mreža manjša, v tem primeru se vedno prilagodi na luknjo v sredini, če je večja, se pa ne. Veliko težav z njo ima navadna mreža zaradi luknje
v sredini.
27
Treba je tudi omeniti, da se rezultati lahko razlikujejo ob izbranih enakih parametrih
Kohonenove mreže in enačbe. To se zgodi zaradi različnih naključno generiranih
podatkov, vendar z večjo velikostjo mreže in številom iteracij ta vpliv zmanjšamo.
Po testiranju aplikacije smo vzeli tudi slike z zaslona pametnega telefona, da lahko vidimo
rezultate. Dobljene slike so bile narejene po učenju s toroidalno obliko Kohonenove
mreže, Gaussovo funkcijo sosednosti in funkcijo učenja inverz časa. Velikost mreže se
razlikuje in jo lahko razberemo ob opisu slike, medtem ko je podatek o številu iteracij na
sliki.
Slika 4.8: Srčnica pri velikosti mreže 12 x 12 in krog pri velikosti 12 x 12
28
Slika 4.9: Krogla pri velikosti 25 x 25 in stožec pri enaki velikosti
Slika 4.10: Toroid pri velikosti 15 x 15 in isti toroid z vidno luknjo
29
5 SKLEP
Cilj diplomske naloge je bil implementacija Kohonenovih nevronskih mrež na
operacijskem sistemu Android. Najprej smo implementirali Kohonenovo mrežo, nato pa
poskrbeli za vizualizacijo rezultatov v 3D-prostoru. Za učenje smo uporabili enačbe likov
in teles, ki se jim je Kohonenova mreža poskušala prilagoditi. Poskrbeli smo tudi za
animacijo učenja in interaktivnost uporabniškega vmesnika ter s tem izkoristili eno glavnih
značilnosti operacijskega sistema Android. Za implementacijo smo se odločili zaradi
priljubljenosti operacijskega sistema Android in preizkušanja dejstva, da imajo mobilne
naprave omejeno procesorsko moč.
V drugem poglavju smo povzeli glavne značilnosti operacijskega sistema Android in
spoznali, da se njegova zgradba razlikuje od operacijskih sistemov za namizne
računalnike, ker je prilagojena za mobilne naprave. Primerjali smo ga tudi s
konkurenčnimi operacijskimi sistemi za mobilne naprave in ugotovili, da je trenutno
vodilen na področju pametnih telefonov in da je edini operacijski sistem za mobilne
naprave, ki je odprtokoden. Spoznali smo tudi, kakšno razvojno opremo potrebujemo za
razvoj programov na Androidu in da je najprimernejše razvojno okolje Eclipse, ki nam z
vtičnikom ADT olajša razvijanje programov.
V tretjem poglavju smo opisali Kohonenove nevronske mreže, ki se razlikujejo od drugih
umetnih nevronskih mrež. Spoznali smo tudi več različnih struktur Kohonenovih mrež. V
naslednjih dveh podpoglavjih smo opisali učenje Kohonenovih nevronskih mrež in različne
parametre, ki vplivajo na učenje. Ugotovili smo, da obstaja veliko različnih parametrov in
da lahko izbiramo med različnimi funkcijami, ki različno vplivajo na učenje in s tem
uspešno implementacijo Kohonenove nevronske mreže. Prav tako se učenje nevronske
mreže zelo razlikuje od učenja drugih umetnih nevronskih mrež, ki so predstavnice
nadzorovanega učenja. Razlikujejo se v tem, da nimamo pravilnih rezultatov in ne
moremo računati napake oz. uspešnosti nevronske mreže.
V četrtem poglavju smo opisali našo implementacijo Kohonenove nevronske mreže, in
katere enačbe smo izbrali za njeno učenje, ter predstavili delovanje vizualizacije izhodnih
podatkov na operacijskem sistemu Android. Predstavili smo tudi rezultate našega dela.
30
VIRI
[1] Android (operating system) - Wikipedia, the free encyclopedia. Dostopno na:
http://en.wikipedia.org/wiki/Android_%28operating_system%29 [6. 9. 2012].
[2] Android: The Developer's Guide. Dostopno na :
http://www.scribd.com/doc/14757121/Android-The-Developers-Guide [6. 9. 2012].
[3] Dashboards | Android Developers. Dostopno na :
http://developer.android.com/about/dashboards/index.html [6. 9. 2012].
[4] AT&T. AT&T Developer Program Developing Applications for Android. AT&T, 2009.
[5] iOS - Wikipedia, the free encyclopedia. Dostopno na: http://en.wikipedia.org/wiki/Ios
[6. 9. 2012].
[6] BlackBerry OS - Wikipedia, the free encyclopedia. Dostopno na:
http://en.wikipedia.org/wiki/BlackBerry_OS [6. 9. 2012].
[7] Comparison of Android devices - Wikipedia, the free encyclopedia. Dostopno na:
http://en.wikipedia.org/wiki/Comparison_of_Android_devices [6. 9. 2012].
[8] Windows Phone - Wikipedia, the free encyclopedia. Dostopno na:
http://en.wikipedia.org/wiki/Windows_phone [6. 9, 2012].
[9] Symbian - Wikipedia, the free encyclopedia. Dostopno na:
http://en.wikipedia.org/wiki/Symbian_os [6. 9. 2012].
[10] Android, iOS Crush BlackBerry Market Share - Mobility - Smartphones -
Informationweek. Dostopno na: http://www.informationweek.com/mobility/smart-
phones/android-ios-crush-blackberry-market-shar/240001008 [6. 9. 2012].
[11] Adding Platforms and Packages | Android Developers. Dostopno na:
http://developer.android.com/sdk/installing/adding-packages.html [6. 9. 2012].
[12] Introduction | Android Developers. Dostopno na:
http://developer.android.com/guide/developing/index.html [6. 9. 2012].
[13] Supporting Multiple Screens | Android Developers. Dostopno na:
http://developer.android.com/guide/practices/screens_support.html#support [6. 9.
2012].
[14] Supporting Different Platform Versions | Android Developers. Dostopno na:
http://developer.android.com/training/basics/supporting-devices/platforms.html [6. 9.
31
2012].
[15] Haykin, S. Neural Networks - A Comprehensive Foundation, Second Edition. Pearson
Prentice Hall, 1999.
[16] Vesanto, J. SOM Toolbox: implementation of the algorithm. Dostopno na:
http://www.cis.hut.fi/somtoolbox/documentation/somalg.shtml [6. 9. 2012].
[17] Data Mining Algorithms In R/Clustering/Self-Organizing Maps (SOM) - Wikibooks,
open books for an open world. Dostopno na:
http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/Self-
Organizing_Maps_%28SOM%29 [6. 9. 2012].
[18] Kokol, P., Hleb Babič, Š., Podgorelec V., Zorman, M. Inteligentni sistemi. Maribor:
Fakulteta za elektrotehniko, računalništvo in informacijske tehnologije, 2001.
[19] Eclipse - The Eclipse Foundation open source community website. Dostopno na:
http://www.eclipse.org/ [6. 9. 2012].
[20] Installing the SDK | Android Developers. Dostopno na:
http://developer.android.com/sdk/installing/index.html [6. 9. 2012].
[21] circle - Wolfram|Alpha. Dostopno na: http://www.wolframalpha.com/input/?i=circle [6.
9. 2012].
[22] cardioid - Wolfram|Alpha. Dostopno na:
http://www.wolframalpha.com/input/?i=cardioid [6. 9. 2012].
[23] sphere - Wolfram|Alpha. Dostopno na: http://www.wolframalpha.com/input/?i=sphere
[6. 9. 2012].
[24] cone - Wolfram|Alpha. Dostopno na: http://www.wolframalpha.com/input/?i=cone [6.
9. 2012].
[25] torus surface - Wolfram|Alpha. Dostopno na:
http://www.wolframalpha.com/input/?i=torus+surface&lk=4&num=3 [6. 9. 2012].
[26] OpenGL | Android Developers. Dostopno na:
http://developer.android.com/guide/topics/graphics/opengl.html#compatibility [6. 9.
2012].
[27] Android (operating system) - Wikipedia, the free encyclopedia. Dostopno na:
http://en.wikipedia.org/wiki/Android_%28operating_system%29#Market_share [6. 9.
2012].
32
33
34