Rozpoznávání číslic v Pythonu
Rozpoznávání rukou psaných číslic
Před časem se mě někdo ptal, jak se "takové věci dělají?" Nuže, dělají se takhle.
V příloze jsou ke stažení zdrojové soubory, které využívají logistickou regresi a strategii jeden proti všem pro rozpoznávání číslic ze známé datové sady MNIST.
MNIST obsahuje 60.000 rukou psaných číslic pro trénink algoritmu a dalších 10.000 číslic pro testování kvality.
Co program dělá?
Program nejprve nahraje do paměti tréninková a testovací data. Poté zahájí proces učení na tréninkových datech a po jeho skončení zobrazí statistiku rozpoznávání na testovacích datech.
Pří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čátku zkusí algoritmus rozpoznat číslice z obou datových sad. Protože ještě neproběhl trénink, jedná se o ekvivalent náhodného tipování. Tomu by také měla odpovídat statistika úspěšnosti cca 10%. Program se na testovací sadě splete v 9.020 případech z 10.000, čemuž odpovídá očekávaná úspěšnost 9.8%. Podobný výsledek získáme i na tréninkové sadě.
Po tréninku už je výsledek jiný. Algoritmus korektně rozpozná 9.115 číslic z 10.000 na testovací sadě, což je úspěšnost 91.1%!
Nutno dodat, že logistiká regrese nepatří mezi favority a jedná se o velice jednoduchý přístup. V současné době neexistuje algoritmus, který by korektně rozpoznal všechny číslice. A také člověk se splete přibližně v 50 případech.
Na závěr program zobrazí 50 náhodně vybraných vzorků. U každého pak uvede klasifikaci a do závorky očekávanou hodnotu.
Přílohy
První obrázek obsahuje náhodný vzorek 50 číslic s odpovědí z algoritmu.
Druhý obrázek zobrazuje váhy logistických jednotek. Zde můžete vidět, jak se časem vyvíjí jejich představa o klíčových artefaktech, na základě kterých rozhodují.
Jak program spustit
Budete potřebovat Python 3 a SciPy stack, nejjednodušší je v tomto případě stáhnout si distribuci Anaconda.
Z příkazové řádky pak stačí zadat následující příkaz:
python classifier_one_vs_all.py
Licence
Na zdrojové kódy se vztahuje licence GPL, text licence najdete přiložený. GPL licence se nevztahuje na originální datové soubory MNIST.
Galerie
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 243x (10.98 MB)
Aplikace je včetně zdrojových kódů v jazyce Python