OCR - od teorii do praktyki
OCR , ICR . | OCR w mojej głowie? | Budowa neuron biologicznego | Modele sztucznego neuronu | |||
Sztuczna sieć neuronowa | Architektura sieci | Praktyczny mini-projekt OCR | Bibliografia , przydatne linki AI |
Najprostsze tłumaczenie
terminu OCR z języka angielskiego brzmi : Optyczne Rozpoznawanie
Znaków (ang. Optical Character Recognition) i Inteligentne
Rozpoznawanie Znaków (ang. ICR = Intelligent Character Recognition)
Czy wyjaśnienie takie jest wystarczające ? Dla kogoś kto
pierwszy raz spotkał się z tym terminem lub widział ten skrót
przy okazji lektury np. reklamówki do skanera wyjaśnienie takie
może być niewystarczające.
Czym naprawdę jest ten tajemniczy OCR ? Może programem ,
który przeczyta a może nawet zrozumie wszystkie dokumenty które
mu dostarczymy skanując obraz za pomocą skanera , cyfrowego
aparatu fotograficznego lub kamery połączonej z kartą PC tzw.
frame grabberem.
Gdyby tak było , tłumaczom,
sekretarkom i wielu osobom , których praca polega głównie na
przetwarzaniu tekstu , groziłoby bezrobocie w niedalekiej
perspektywie. Historia OCR liczy sobie już ponad 30 lat Pierwsze
prace nad systemami rozpoznawania pisma drukowanego zainicjowała
firma XEROX (znana z
kserokopiarek) w okolicach 1975 roku. Początkowo był to
stosunkowo prosty, sprzętowy (optyczny) mechanizm polegający na
porównywaniu ściśle wydzielonych obrazów pojedynczych liter z
ich odpowiednikami na liście wzorców. (W połowie lat sześćdziesiątych
) Wprowadzone zostały w tym celu dwa znormalizowane zestawy znaków:
OCR-A i OCR-B. Jeszcze dzisiaj tego typu czcionki są stosowane w
polach kodowych np. czeków bankowych.
Od tego czasu dokonał się duży
postęp w dziedzinie systemów OCR , szczególnie od czasu
szerszego zastosowania sieci neuronowych , które zresztą okazały
się bardzo przydatne a niekiedy niezastąpione w oprogramowaniu
wkraczającym w obszary sztucznej inteligencji (termin angielski
AI - Artifical Intelligence). Oprogramowanie syntetyzujące i rozpoznające mowę , niektóre systemy
rekonstrukcji dźwięku np.
z nagrań archiwalnych , oprogramowanie diagnostyczne w
kardiologii i neurologii nie mogły by się obyć bez programowych
realizacji sieci neuronowych. We współczesnych systemach
ICR architektura sieci neuronowej do rozpoznawania pisma często
wzorowana jest na strukturze połączeń występujących w części
mózgu (człowieka), odpowiedzialnej za przetwarzanie informacji
wizualnej (Visual Cortex). Sieć nie tylko klasyfikuje cechy, ale
także sama je wykrywa - specjalnie połączone warstwy neuronów
(tzw. połączenia funkcjonalne) są w stanie, w trakcie uczenia,
"wyłuskać" z pikselowego obrazu znaku cechy odróżniające
go od innych liter. Ważnym zadaniem jest też
detekcja i wydzielenie obszarów grafiki i tekstu na przetwarzanym dokumencie ,
a także korekta – w granicach możliwości algorytmu – zniekształceń
tekstu powstałych np. podczas skanowania. Większość programów ICR , nawet
tych najlepszych , ma pewne wartości krytyczne np. skosu linii (ang. skew) ,
powyżej których przetworzony dokument będzie już praktycznie nieczytelny.
Czy program zawierający w sobie
cyfrową symulację sieci neuronowej to już sztuczna inteligencja czy też bardziej
skomplikowany automat znany elektronikom z teorii układów logicznych ? Ta druga odpowiedź wydaje się być
znacznie bliższa prawdy. Automaty logiczne , znane w historii
techniki cyfrowej jako bramki NAND czy NOR to nic innego jak
najprostsze mini-modele sieci neuronowej z funkcja progową
zamiast łagodnej charakterystyki typu sigmoidy.
Postęp jaki dokonał się w
dziedzinie sprzętu komputerowego , nawet tego popularnego , może
przyprawiać o zawrót głowy. Typowy procesor instalowany we współczesnych
komputerach domowych zawiera ponad 5..50 mln. tranzystorów i ma
moc obliczeniową przewyższająca superkomputery z lat 70-tych.
Miniaturyzacja ścieżek i tranzystorów na krzemowym 'waflu'
procesora zeszła już do fizycznych granic możliwości (0.15
mm
==1.5*10-7) W
dziedzinie oprogramowania nie nastąpiła jednak rewolucja
o porównywalnej skali.
Element , który daje życie i "duszę" komputerom -
czyli oprogramowanie - tworzy człowiek - programista.
25 lat lawinowego rozwoju
elektroniki komputerowej mieści się wewnątrz jednego pokolenia
- to za mało czasu dla
gruntownej zmiany koncepcji i logiki oprogramowania. Ponadto
coraz doskonalsza elektronika rozleniwia - po co optymalizować
algorytmy skoro za chwilę będzie można dysponować setkami
gigabajtów twardego dysku czy pamięci operacyjnej ?
Wzorcem pierwotnym dla sztucznych sieci sieci neuronowych jest centralny system nerwowy żywego organizmu - czyli mózg.W historii ewolucji mózg okazał się najskuteczniejszą bronią w walce o przetrwanie...Zalążki mózgu pojawiły się już u takich kręgowców jak ryby. Na szczycie piramidy rozwoju znalazł się obecnie człowiek. Nasz mózg jest nie tylko jednym z największych (masa do 1,5 kg) ale i najbardziej wyrafinowanym organem nerwowym wyprodukowanym przez ewolucję. Liczbę neuronów szacuje się na 1010 czyli 10 miliardów zaś liczbę aktywnych połączeń na 1015 .Dająca się pomierzyć częstotliwość impulsów nerwowych (EEG) obserwowana jest w zakresie 0.5 -100 Hz (100 drgań na sekundę) typowym czasie trwania 2 ms, napięciu 100 mV i szybkości propagacji do 100 m/s . Gęstość przetwarzanych przez mózg informacji można szacować na 1017 ..1018 operacji na sekundę (sygnał analogowy - co dopowiadałoby operacjom zmiennoprzecinkowym). Taka moc obliczeniowa jest nadal nieosiągalna nawet dla współczesnych superkomputerów. Ponadto większość procesów w mózgu odpowiada przetwarzaniu procesów współbieżnych w czasie rzeczywistym - co zbliża prawdziwy model działania mózgu do superkomputera kwantowego. Nie zdajemy sobie z tego sprawy , ale w szczególnych przypadkach nawet pojedynczy foton który wpadnie do naszego oka potrafi wywołać bodziec wzrokowy - pomimo iż człowiek ma dużo gorszy wzrok od wielu zwierząt. Oszacowanie rzeczywistego wykorzystania komórek mózgu na kilka procent nie powinno dziwić - zapas 'mocy obliczeniowej' jest ogromny nawet gdy intensywnie przetwarzamy informację wzrokową. Człowiek rozróżnia około 3 milionów odcieni kolorów (głównie zielonego) co oznacza słabszą rozdzielczość niż w standarcie RGB-24 dającym 16 milionów kolorów.
W istocie więc wszystkie obecnie znane modele neuronu są
bardzo daleko idącym uproszczeniem. Ciekawostką jest fakt , że
konstruktorzy prostych robotów .najbardziej cenią sobie
emulatory neuronów oparte o najzwyczajniejsze pracujące
analogowo układy tranzystorowe.Producentem specjalizowanych
procesorów neuronowych jest m.in. firma Intel.
Rys. 1 Przykładowa realizacja tranzystorowa (układ typu wzmacniacza różnicowego) pojedynczego neuronu.
Liczba neuronów emulowanych przez taki procesor może sięgać kilkuset tysięcy. Największą trudność stanowi zaprogramowanie i weryfikacja wyników działania tego typu procesora - wymaga to wąsko specjalizowanego oprogramowania , ponadto zjawiska występujące w takim procesorze mogą wykazywać trudny do wyobrażenia stopień komplikacji. W przypadku 'tradycyjnych' procesorów dostępny zestaw assemblerowych rozkazów jest ściśle ograniczony, również możliwość wykonywania kilku czynności (zadań) jednocześnie w czasie rzeczywistym jest z reguły ograniczona do 2..3. W skrajnym przypadku w jednym cyklu rozkazów pojedynczy neuron może wykonywać zadanie odpowiadające całemu podprogramowi zwykłego procesora. Adekwatne więc byłoby porównanie sieci neuronowej do sieci złożonej z milionów 'klasycznych' procesorów. Z drugiej strony w 'zwykłych' obliczeniach numerycznych współczesne komputery nawet te domowe z jednym procesorem są nieporównywalnie szybsze i dokładniejsze w obliczeniach niż człowiek. Zastosowania sztucznych sieci neuronowych mają więc największy sens do zadań wkraczających w obszar sztucznej inteligencji (ang. AI).
Rys. 2. Uproszczony wygląd neuronu
- ciało komórki nazywane somą o średnicy od 5 do 100 mm
(10-6 m)
- wypustki (2 rodzaje) otaczające ciało kkomórki :
- wypustki wprowadzające informację do neeuronu, tzw. dendryty
- wypustka wyprowadzająca informację z neeuronu, tzw. akson.
Każdy neuron ma dokładnie jeden akson, który może wysyłać
impulsy do wielu innych neuronów. Pojedynczy neuron przyjmuje
natomiast pobudzenia od ogromnej liczby neuronów dochodzącej do
tysiąca.
Jak już wspomniano , w mózgu człowieka jest około 1010
neuronów, które oddziałują na siebie poprzez około 1015
połączeń. Jeden neuron przekazuje pobudzenie innym neuronom
przez złącza nerwowe nazwane synapsami. Synapsy pełnią rolę
przekaźników, w wyniku działania których pobudzenie może być
wzmocnione lub osłabione. W efekcie do neuronu dochodzą sygnały,
z których część wywiera wpływ pobudzający, a część hamujący.
Neuron sumuje impulsy pobudzające i hamujące. Jeżeli ich suma
algebraiczna przekracza pewną wartość progową, to sygnał na
wyjściu neuronu jest przesyłany - poprzez akson do innych
neuronów.
W praktyce więc każdy neuron pobiera sygnały od wszystkich połączonych do swojego wejścia neuronów, przemnaża przez odpowiednie wagi (synaptyczne) i w oparciu o bilans (sumę) wartości hamujących i pobudzających wytwarza lub nie sygnał wyjściowy. W przypadku sztucznego neuronu funkcja która odpowiada za końcowy sygnał może być funkcją liniową lub skokową, która wartościom poniżej pewnego progu przydziela 0, a pozostałym 1. Innymi często używanymi funkcjami są funkcje sigmoidalne, oraz tangensoidalne. Wybór funkcji należy do projektanta sieci - głównym kryterium jest przedział argumentów sygnału pobudzającego. Jeżeli sygnału pobudzający jest binarny(0,1) najczęściej stosowana jest sigmoida , w pozostałych przypadkach o doborze funkcji decyduje zadanie , które sieć ma rozwiązywać.
Rys. 3. Model sztucznego neuronu
Najczęściej wykorzystywane funkcje aktywacji neuronu to m.in.:
Podstawową jednostką budowy biologicznego układu nerwowego
jest neuron. Neurony te są połączone ze sobą, tworząc
skomplikowaną strukturę, w której propagują się impulsy
elektryczne o częstotliwościach na ogół z dolnego zakresu
akustycznego (20-100 Hz) . Biologiczna komórka nerwowa składa
się z jądra, wielu dendrytów, których celem jest pobieranie
impulsów z innych neuronów i jednego aksonu, wyprowadzającego
impulsy na zewnątrz.
Sztuczne neurony są raczej przybliżonymi emulatorami
oryginalnych neuronów, niż ich dokładnymi funkcjonalnymi
odpowiednikami,, natomiast sieć zbudowana z takich emulatorów
może zupełnie nieźle radzić sobie z zadaniami wykonywanymi
przez biologiczne oryginały.
Jeżeli potraktujemy neuron jako przetwornik, to będzie to
"czarna skrzynka" który pobiera informacje ze
wszystkich swoich wejść i na ich podstawie emituje sygnał wyjściowy.
W biologicznych układach nerwowych charakterystyka połączeń
między neuronami jest zależna dodatkowo od wielu nie do końca
jeszcze poznanych czynników, m.in od hormonów czy zwykłej równowagi
jonowej elektrolitów. Z tego powodu większość zjawisk w
sieciach biologicznych (np..EEG) jest słabo powtarzalna w
badaniach.. W modelu sztucznego neuronu, każdemu połączeniu między
neuronami przypisuje się wagę , o 'sztywnej" stabilności
numerycznej - daje to całkowitą powtarzalność działania.
Dwie sztuczne sieci neuronowe o jednakowej architekturze i
jednakowych macierzach wag (np. skopiowanych po procesie uczenia) będą
dawały identyczne odpowiedzi na sygnały wejściowe.
W przypadku sztucznych sieci najczęściej stosuje się sieci warstwowe (perceptrony) - neurony pogrupowane są w warstwy. Wejście każdego neuronu w warstwie jest połączone z wyjściami wszystkich neuronów z warstwy poprzedniej. Z reguły ilość wejść powinna odpowiadać ilości neuronów (== ilości wyjść gdyż neuron ma tylko 1 wyjście) warstwy poprzedniej. Przyjęto warstwę pobierającą sygnał określać jako warstwę wejściową , ostatnią , z której otrzymujemy odpowiedź sieci, wyjściową, a wszystkie pomiędzy nimi umownie nazywane są warstwami ukrytymi. W praktyce wystarczająca jest jedna warstwa ukryta. - doborowi podlega tylko ilość neuronów w tej warstwie - zwiększanie (do pewnego progu) może spowodować zwiększenie efektywności sieci. Oprócz sieci warstwowych jednokierunkowych stosowane są sieci rekurencyjne - ze sprzężeniem zwrotnym między warstwą wyjściową a warstwą wejściową. Sygnały wejściowe w takiej sieci zależą zarówno od aktualnego stanu wejścia jak i od sygnałów wyjściowych w poprzednim cyklu. Do bardzo specjalizowanych zadań stosowane są sieci o połączeniach specjalnych bez grupowania w warstwy.- neurony posiadają połączenia np. tylko z najbliższymi sąsiadami -> zobacz projekt CAM-Brain.
Projekt i test sieci neuronowej realizującej rozpoznawanie
znaków można wykonać korzystając z któregoś dostępnego w
Internecie emulatora. Dużą popularnością cieszą się m.in.
takie pakiety jak NeuroSolutions , easyNN czy JavaNNs.
Do potrzeb artykułu skorzystałem z programu NeuroSolutions ver.4,13 ,pobranej z
Internetu , która została również zamieszczona na CD-romie
bieżącego numeru Software,
Najbardziej popularne w zastosowaniach do analizy obrazów są sieci wielowarstwowe ze sprzężeniem zwrotnym nazywane również Madaline (od Multi-layer) lub perceptronem wielowarstwowym.
Rys. 7. Schemat poglądowy sieci neuronowej wielowarstwowej użytej
do projektu.
W opisywanym projekcie dysponujemy wzorcami znaków ASCII w postaci
matryc pikselowych o rozmiarach 8x8 . Pojedynczy wzorzec znaku to kwadrat o boku
8 pikseli. Dla uzyskania dobrej czytelności przykładu wzorce zostały
przetworzone do postaci tekstowej. '1' oznacza tło , zaś '0' widoczny punkt
matrycy w konwencji stosowanej w programie NeroSolutions. Wejście każdego
neuronu warstwy wejściowej jest połączone z binarnymi (0,1) danymi obrazu 8x8
pikseli na wejściu. - każdy neuron połączony jest więc z pojedynczym
pikslem obrazu wejściowego. Ilość
neuronów warstwy wejściowej odpowiada ilości piksli matrycy znaku - w tym
przypadku 64. Ilość warstw warstwy ukrytej rozsądnie jest w tym
przypadku ustalić na 1 , ilość neuronów w warstwie ukrytej też nie powinna
być zbyt wygórowana 15 do 25, można ją ustalić doświadczalnie. Ilość
neuronów warstwy ukrytej jest identyczna z ilością matryc znakowych. Dla zakresu od
'!' do 'Z' będzie to 58. Po podaniu na wejście danych pojedynczej matrycy
znaku ,obliczane są wartości wyjściowe na wszystkich neuronach warstwy wyjściowej
i błąd w stosunku do wartości oczekiwanej. Teoretycznie tylko jeden neuron
wyjściowy powinien być w pełni aktywny - reprezentujący znak na wejściu. Błąd
wartości wyjściowych w stosunku do wartości oczekiwanej (0 lub 1) na poszczególnych
neuronach jest propagowany w odwrotnej kolejności - od warstwy wyjściowej do
wejściowej. Następuje korekcja wartości wag neuronów w poszczególnych
warstwach. Proces przetworzenia całego ciągu uczącego - w tym przypadku
matryc 58 znaków nazywa się epoką. Istotne dla procesu uczenia i wyników końcowych
są wartości współczynników , przez które będą przemnażane wartości błędów
w procesie propagacji wstecznej. W przypadku projektu NeroSolutions używany
jest tzw. momentum , jego wartość przyjmowana jest w zakresie 0.5 -1. Możliwa
jest również zmiana stromości krzywej funkcji aktywacji neuronu.
Budowa prototypowej sieci rozpoznającej
znaki Ascii od '!' do 'Z' z matrycy 8x8 pikseli
1. Uruchamiamy program NeroSolutions.
2. Uaktywniamy dodatkowe belki narzędziowe z menu Tools->Customize
Zalecam zdjęcie ptaszka z opcji 'Cool look' i 'Large Buttons'
aby zwiększyć użyteczną powierzchnię ekranu projektowego. Z
belek narzędziowych będziemy potrzebowali Dialog , Input i
Probe components.
3. Z Menu Tools uruchamiamy program narzędziowy NeuralBuilder który
zautomatyzuje kreację projektu sieci neuronowej.
Pierwszy ekran daje nam zaznaczony domyślny typ sieci neuronowej
jako "multilayer perceptron" który jest najwłaściwszy
do zadania rozpoznawania wzorców , przechodzimy więc do następnego
etapu klawiszem ">>".
Z następnego ekranu wybieramy do projektu przygotowany uprzednio
plik z danymi wzorców (klawisz 'browse") - w najprostszej
postaci jest to zwykły plik tekstowy o rozszerzeniu *.asc ,
gdzie aktywne piksele oznaczane są jako '0' zaś tło w tej
konwencji to '1'. Dane poszczególnych pikseli rozdzielone są
spacjami , zaś koniec linii wyznacza kombinacja powrót karetki/nowa
linia (\r\n). Zalecany typ nagłówka w przypadku matrycy 8x8 to
8 kolumn np. x0 , x1 ...x7. Jest to dodatkowa linia - gdyby jej
było brak w pliku źródłowym , program doda nagłówek domyślny. Pola 'prediction'
i GA nie będą używane - nie zamierzamy korzystać z algorytmów genetycznych.
Podobnie jest z nagłówkiem w pliku danych wyjściowych. Przykładowy
plik wejściowy dołączony do artykułu to ega8x8.asc.Z następnego
ekranu (Training Data) przechodzimy do następnego etapu
klawiszem ">>" bez żadnych zmian (nie zamierzamy
używać algorytmów genetycznych).
Na ekranie "Desired Response" analogicznie pobieramy
plik ega8x8ou.asc z wartościami oczekiwanej odpowiedzi sieci (0
lub 1) na poszczególne matryce znaków na wejściu.
Przez następny ekran "Cross Val. & Test Data" też
przechodzimy dalej (klawisz ">>") bez modyfikacji.
Przedwczesne
zakończenie cyklu uczenia w przypadku błędnego projektu może
utrudnić lokalizację błędu.
.Kolejny ekran "Multilayer Perceptron" ma tylko 1 opcję
- ilość warstw ukrytych, której też nie zzmieniamy - domyślnie
1 warstwa ukryta.
Na kolejnym ekranie "Hidden Layer #1" (warstwa ukryta)
wykonujemy korektę upraszczającą (skracającą) etap testowy -
zmniejszany liczbę neuronów w warstwie ukrytej do 15..20 a także
pole rodzaju funkcji "transfer" z TanhAxon na
SigmoidAxon - argumenty matrycy wejściowej to wartości '0' i '1'
a nie '-1' i '1' jak w przypadku TanhAxon.
Następny ekran "Output Layer" (warstwa wyjściowa)
ekran ma już ustawione wszystkie wartości domyślne, których
nie ma potrzeby modyfikować.
Na przedostatnim ekranie "Supervised Learning Control"
jest kilka opcji , które mają istotny
wpływ na jakość wyników osiąganych przez sieć , należy więc
brać pod uwagę możliwość cofnięcia do tego ekranu w
przypadku błędnych lub niewystarczających efektów.
Opcję "Weight update" dobrze jest ustawić na "On-line"
aby łatwiej zaobserwować ewentualne nieregularności w procesie
uczenia.Jeżeli oczekujemy że globalnie dobre efekty uczenia są
możliwe dopiero po dużej (1000-1500) ilości epok
należy zdjąć opcję "MSE" terminacji procesu jak i
wpisać odpowiednią ilość epok (Maximum epochs). Przed zdjęciem "MSE"
można zmniejszyć próg tolerancji obliczeń w procesie uczenia (Threshold) np.
do 0.005 jak w załączonym przykładzie - przyśpieszy to proces dochodzenia do
dobrych wyników.
Na ostatnim etapie "Probe Configuration" wybieramy
najlepszą konfigurację wizualizacji wyników.
W naszym przypadku najlepsze wizualne porównanie da nam opcja
"bar chart" (wykres słupkowy) dla danych oczekiwanych
(Desired) i wyjściowych rzeczywistych (output). Dane wejściowe (matryca
pikselowa 8x8) rozsądnie jest przedstawić jako powiększoną
bitmapę.
Klawisz "build" konstruuje sieć neuronową którą można
uruchamiać , modyfikować i testować pod kontrolą programu NeuroSolutions.
Komunikaty błędów podczas budowania sieci rozsądnie
jest zanotować - nie wszystkie parametry są ustalane prawidłowo
w trybie półautomatycznym.
W konkretnym przypadku konieczna będzie 'ręczna' korekta ilości
kolumn i wierszy przypisanych (8 wierszy x 8 kolumn) do wejściowych
matryc znaków - domyślna ilość kolumn to 1 - należy zmienić na 8 gdyż
matryca znaku wejściowego ma rozmiar 8 wierszy na 8 kolumn. W tym celu należy
kliknąć na symbolu Aksonu wejściowego i wywołać prawym klawiszem myszy menu
z pozycją 'properties' - następnie ją wybrać.
Również pełna i wygodna wizualizacja modelu sieci wymaga ręcznego
ustawienia niektórych parametrów okien "probe". Po zakończonym procesie budowania projektu - jego schemat blokowy pokazuje
się na roboczej powierzchni ekranu - należy zaznaczyć opcję "Auto-Window"
Roboczy plik zawierający projekt sieci (typu NeuroSolutions breadBoard *.nsb) rozsądnie jest zapisać jak i sporządzać jego kopie zapasowe przed kolejnymi modyfikacjami. Do gotowego projektu dobrze jest też dodać przycisk sprzężony z makro pozwalającym na pracę krokową. W celu dostawienia takiego przycisku do projektu należy kliknąć na symbol przycisku na belce z narzędziami (obok przycisku tekstowego "ab"). Jeżeli po przeciągnięciu myszą nad oknem projektu kursor zmieni się w symbol stempla , opcja jest aktywna i wystarczy kliknąć w odpowiednim miejscu aby postawić przycisk. Aby zmienić domyślny napis "button" na właściwy , wchodzimy w tryb edycji napisu przez dwóklik myszą. Następnie należy po uaktywnieniu przycisku prawym klawiszem skojarzyć go z odpowiednim makrem (stepExemplar z podfolderu ..macro) , wybierając odpowiednią opcję z tabliczki 'properties'.
Po skompletowaniu odpowiednich opcji wizualizacyjnych możemy wystartować projekt zielonym przyciskiem typu 'strzałka' . Najpierw jednak powinniśmy zapisać nasz projekt do pliku. W załączonym przykładzie nadano mu nazwę OcrSamp4 (rozszerzenie *.nsb).
W każdej chwili możliwe jest zatrzymanie (klawisz "||" czerwone") na chwilę proces nauczania
w celu sprawdzenia prawidłowości
i dokładności rozpoznawania znaków przez sieć w trybie pracy
krokowej. Rozsądnie jest wykonywać takie sprawdzenie po
przebiegu większej ilości epok (np. 100..200). Może to trwać
kilka - kilkanaście minut w zależności od prędkości
komputera i złożoności (ilość warstw i neuronów) testowanej sieci. Na wykresie "Active Cost" sygnał o wystarczającym
poduczeniu sieci będzie widoczny w postaci spadku "kosztu"
poniżej wartości 0.003..0.002.
Kolory słupków dla sygnałów - oczekiwanego i rzeczywistego na
wyjściu sieci są jednakowe, test poprawności wyników jest więc
łatwy. Na powyższym zdjęciu ekranu widać .że jakość wyników
naszej sieci jest dobra już po 700 epokach nauczania/.Niebieski
słupek reprezentujący odpowiedź sieci na pobudzenie w postaci
matrycy pikselowej cyfry '8' zajmuje całą szerokość wykresu -
jest to wartość bliska 1. Wartości odpowiedzi rzędu 0.9-0.99
dla matrycy wzorcowej dają gwarancję poprawnej (>0.5)
odpowiedzi również dla matrycy zniekształconej lub zaszumionej.
Jeżeli wyniki działania sieci są już zadowalające - można
wyeksportować nasz projekt w postaci bibliotecznego pliku DLL który
można dołączyć jako komponent innej , szerszej aplikacji .napisanej
w VisualC czy VisualNET. Aby opcja ta była dostępna - konieczne
jest wykupienie licencji na program NeuroSolutions i pełna jego
aktywacja. Przykładowy projekt opisany powyżej - do pobrania w
postaci ZIP: ocrsamp4 lub
samorozpakowującego się EXE: ocrsampE
Podsumowanie
Na rynku oprogramowania dostępnych jest obecnie wiele pakietów pozwaląjących na szybkie i wygodne zaprojektowanie i przetestowanie sieci neuronowej wykonującej konkretne zadanie. Sieci neuronowe potrafią przetwarzać niemal każdą nadającą się do obróbki informację, cechuje je szczególnie duża efektywność tam , gdzie wystarczającym rozwiązaniem problemu jest nawet wartość przybliżona czyli rozmyta. W praktyce najwyższą efektywność osiąga się stosując techniki hybrydowe - połączenie tradycyjnych metod obliczeniowych , statystyki (korelacje) i tak popularnych ostatnio sieci neuronowych. Polecam zapoznanie się z przykładami "demo" dołączonymi do pakietu NeuroSolutions - można wśród nich znaleźć m.in "Principial Component Analysis Hybrid Network" służący do analizy pisma odręcznego (kody pocztowe).
Autor: Jarosław Sadło
linki:
NeuroSolutions | easyNN | bogaty zbiór linków OCR | CAM-Brain |
Bibliografia: