PV021
Vícevrstvá neuronová síť pro rozeznávání mikroteček
Matúš Goljer, Maroš Kucbel, Michal Novotný, Karel Štěpka 2011
Úkol sítě
Rozeznávat obrázky obsahující fluorescenční mikrotečky od obrázků s nespecifickým pozadím Síť by pokud možno měla pracovat i v případě, že jsou obrázky degradovány šumem
Zpracovávaná data
3D obrázky mikroteček nebo nespecifického pozadí (buď ploché, nebo náhodný gradient) Testovací data jsou generována simulátorem mikroskopických snímků (využívá údaje naměřené na reálném mikroskopu) K dispozici jsou data v několika stupních kvality (úroveň šumu/kontrast)
Předzpracování a organizace dat
Navzorkováno do rozměru 10 10 20 voxelů (menší rozlišení, než jakého lze reálně dosáhnout; bylo zvoleno s ohledem na velikost sítě) Normalizace intenzit do rozsahu –1 .. 1 Předzpracovaná data jsou uložena v adresářích /data0 .. /data9 (vyšší číslo značí vyšší úroveň šumu) Adresáře jsou dále rozděleny na /pos, /neg (trénovací data) a /test/pos, /test/neg (testovací data)
Zpracovávaná data – ukázka
Nahoře pozitivní příklady, dole negativní Zleva doprava rostoucí úroveň šumu
Použitý model
Vícevrstvá neuronová síť se zpětnou propagací Použita obecná implementace Konkrétní parametry zvolené pro tuto úlohu: dvouvrstvá
síť počty neuronů 2000, 7, 1 aktivační funkce: na vstupních neuronech identita, ve zbytku sítě tanh vstupní neurony odpovídají jednotlivým voxelům vstupu (–1 .. 1), výstupní neuron reprezentuje přítomnost/nepřítomnost tečky (–1 / 1)
Vývojové nástroje
C++ Standard Template Library
(odladěno pro platformy Linux a Windows)
Implementace – 1
Základní třídy: Neuron, Net, DataItem Neuron uchovává
informace o vahách a své aktivační funkci (a dočasné „delta“ údaje při zpětné propagaci) je zodpovědný za dopřednou propagaci své hodnoty
Net organizuje
neurony do vrstev podporuje ukládání/načítání konfigurace sítě zodpovědná za spouštění dopředné a spouštění a organizaci zpětné propagace
Implementace – 2
DataItem třída
zodpovědná za načítání dat a jejich zprostředkování síti obecně reprezentuje libovolný vektor dat použitá specializace Image slouží k popisu 3D obrázků zvoleného typu (v tomto případě float) délka vektoru (v tomto případě počet voxelů jednotlivých obrázků) musí odpovídat počtu vstupních neuronů sítě
Spouštění programu – parametry – 1
Parametry pro spouštění z příkazového řádku: -c,
--createnet <x0>:
,<x1>:,<x2>:,...
Vytvoří novou síť s <xi> neurony v i-té vrstvě. Neuronům v dané vrstvě je přiřazena aktivační funkce s názvem . Pro nultou vrstvu by měla být specifikována identická akt. funkce („id“). V současné verzi jsou implementované funkce „id“, „tanh“. Vzhledem k aplikaci je očekáván právě 1 výstupní neuron.
-l,
--loadnet
-s,
Nahraje síť ze souboru . Parametry -c, -l se navzájem vylučují.
--savenet Po skončení uloží síť do souboru .
Spouštění programu – parametry – 2 -t,
--train Natrénuje síť na datech v adresáři . Adresář musí obsahovat dva podadresáře: „/pos“ (s pozitivními obrázky) a „/neg“ (s negativními). Trénink je možné ovlivnit parametry -i, -x
-i,
--iters <x>
-x,
Udává počet tréninkových průchodů vstupními daty. Integer, přednastavená hodnota je 1.
--rate <x> Rychlost učení, dále konstantní po celou dobu tréninku. Float, přednastavená hodnota je 0,05.
Spouštění programu – parametry – 3 -r,
-h,
--run Spustí síť na obrázcích v adresáři a vypíše výsledky na standardní výstup. Výsledky jsou řádky ve tvaru: :
--help Vytiskne nápovědu.
Spouštění programu – příklady
./main -c 2000:id,7:tanh,1:tanh -t traindata -i 100 -x 0.1 -s bar.net Vytvoří síť s 2000, 7 a 1 neurony, natrénuje ji ve 100 iteracích s rychlostí učení 0,1 na datech z adresáře „traindata“ a výslednou konfiguraci sítě uloží do souboru „bar.net“ ./main -l bar.net -r traindata Načte síť ze souboru „bar.net“ a spustí ji na data v adresáři „traindata“. ./main -c 2000:id,7:tanh,1:tanh -t traindata -i 10 -x 0.01 -s bar.net -r rundata/pos Vytvoří, natrénuje, uloží a spustí síť. Pomocí skriptů pak lze vytvářet komplikovanější chování, např. učení až do dosažení optimální úspěšnosti
Vliv počtu skrytých neuronů a rychlosti
Rychlost učení
Počet skrytých neuronů F1 skóre = 2 (precision
recall) / (precision + recall)
Vliv počtu skrytých neuronů a rychlosti
(raw data jsou k dispozici v souboru „/raw/results.txt“, popis jejich struktury v „raw/_readme.txt“)