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