IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Program byl vytvořen v roce 2015.

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 238x (10.98 MB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Všechny články v sekci
Zdrojákoviště Python - Základní konstrukce
Program pro vás napsal coells
Avatar
Uživatelské hodnocení:
6 hlasů
Aktivity