Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Rozpoznávanie číslic v Pythone

Rozpoznávanie rukou písaných číslic

Pred časom sa ma niekto pýtal, ako sa "takéto veci robia?" Nuž, robia sa takto.

V prílohe sú ku stiahnutiu zdrojové súbory, ktoré využívajú logistickú regresii a stratégiu jeden proti všetkým pre rozpoznávanie číslic zo známej dátovej sady MNIST.

MNIST obsahuje 60.000 rukou napísaných číslic pre tréning algoritmu a ďalších 10.000 číslic pre testovanie kvality.

Čo program robí?

Program najprv nahrá do pamäte tréningové a testovacie dáta. Potom začne proces učenia na tréningových dátach a po jeho skončení zobrazí štatistiku rozpoznávania na testovacích dátach.

Príklad výstupu z programu:

initial training set: incorrect=54077, success=9.9%, cost=6.93147181
initial testing set: incorrect=9020, success=9.8%, cost=6.93147181
Warning: Maximum number of iterations has been exceeded.
         Current function value: 0.724646
         Iterations: 30
         Function evaluations: 53
         Gradient evaluations: 53
final training set: incorrect=5616, success=90.6%, cost=0.72464638
final testing set: incorrect=885, success=91.1%, cost=0.69525994

Na začiatku skúsi algoritmus rozpoznať znaky z oboch dátových sád. Pretože ešte neprebehol tréning, jedná sa o ekvivalent náhodného tipovanie. Tomu by tiež mala zodpovedať štatistika úspešnosti cca 10%. Program sa na testovacej kolekcie pomýli v 9.020 prípadoch z 10.000, čomu zodpovedá očakávaná úspešnosť 9.8%. Podobný výsledok získame aj na tréningové sade.

Po tréningu už je výsledok iný. Algoritmus korektne rozpozná 9.115 číslic z 10.000 na testovacej kolekcie, čo je úspešnosť 91.1%!

Nutné dodať, že logistika regresie nepatrí medzi favoritov a jedná sa o veľmi jednoduchý prístup. V súčasnej dobe neexistuje algoritmus, ktorý by korektne rozpoznal všetky číslice. A tiež človek sa pomýli približne v 50 prípadoch.

Na záver program zobrazí 50 náhodne vybraných vzoriek. Pri každom potom uvedie klasifikáciu a do zátvorky očakávanú hodnotu.

Prílohy

Prvý obrázok obsahuje náhodný vzorka 50 číslic s odpoveďou z algoritmu.

Druhý obrázok zobrazuje váhy logistických jednotiek. Tu môžete vidieť, ako sa časom vyvíja ich predstava o kľúčových artefaktoch, na základe ktorých rozhodujú.

Ako program spustiť

Budete potrebovať Python 3 a SCIP stack, najjednoduchšie je v tomto prípade stiahnuť si distribúciu Anaconda.

Z príkazového riadku potom stačí zadať nasledujúci príkaz:

python classifier_one_vs_all.py

Licencie

Na zdrojové kódy sa vzťahuje licencie GPL, text licencie nájdete priložený. GPL licencie sa nevzťahuje na originálne dátové súbory MNIST.


Galéria


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 243x (10.98 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Všetky články v sekcii
Zdrojákoviště Python - Základná konštrukcia
Program pre vás napísal coells
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity