Rozpoznávání číslic v Pythonu

Python 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ženo 38x (10.98 MB)
Aplikace je včetně zdrojových kódů v jazyce python

 

  Aktivity (1)

Program pro vás napsal coells
Avatar

Jak se ti líbí článek?
Celkem (5 hlasů) :
55555


 


Miniatura
Předchozí článek
Pygame
Miniatura
Všechny články v sekci
Python
Miniatura
Následující článek
Python

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!