[PYTHON] 99,78% Genauigkeit bei tiefem Lernen durch Erkennen von handgeschriebenem Hiragana

Mit der Erkennung von handgeschriebenem Hiragana und dem Faltungs-Neuronalen Netz (Deep Learning) gemäß Lehrbuch wurde eine Genauigkeit von 99,78% erreicht. Es scheint, dass es für diejenigen, die lesen und schreiben, ein Verdienst gibt, dass es dem Lehrbuch entspricht (es ist nicht einzigartig), also werde ich es in Qiita schreiben.

Quellcode

Der Quellcode lautet https://github.com/yukoba/CnnJapaneseCharacter.

Geschichte

Ich unterhielt mich mit einem Freund über die handschriftliche Hiragana-Erkennung auf Facebook, und als ich googelte, fand ich diese beiden.

Beide wurden im März 2016 geschrieben, aber ich denke, die Studenten der Stanford University stehen an erster Stelle.

Nach einem Bericht eines Studenten der Stanford University

Es war.

Nach der Analyse eines anderen Freundes hatte ich erwartet, dass Kanji einfacher sein würde, weil es mehr Hinweise hat. In diesem Artikel werde ich darüber sprechen, das ungenaueste Hiragana auf 99,78% zu erhöhen.

Datensatz

Für die Daten verwendet jeder ETL8G aus der "ETL-Zeichendatenbank" von AIST, und ich verwende es auch. Wenn Sie bestimmte handschriftliche Zeichen sehen möchten, besuchen Sie bitte http://etlcdb.db.aist.go.jp/?page_id=2461.

Die Daten sind 128 x 127 Pixel, ein 4-Bit-Graustufenbild für 160 Personen. Es gibt 72 Arten von Hiragana.

Faltungsneuronales Netzwerk

Unter tawagos http://qiita.com/tawago/items/931bea2ff6d56e32d693 finden Sie die grundlegende Geschichte eines Faltungsnetzwerks (Deep Learning). Auch O'Reilly Japans Buch "Deep Learning von Grund auf neu - Die Theorie und Implementierung von Deep Learning, das mit Python gelernt wurde" ist eine gute Einführung. Es war (es tut mir leid, dass ich nur gebrowst habe).

Bibliothek

Diesmal als Bibliothek neuronaler Netze

Ich benutzte. Ich habe den Code geschrieben, um mit TensorFlow als Low-Layer zu arbeiten.

Die Programmiersprache ist Python 3.

Verbesserungspunkte

Was hat sich also von 95,04% der Tawago und 96,50% der Studenten an der Stanford University geändert? Ich mache nur die Grundlagen.

Anzahl der Iterationen

Als Student an der Stanford University habe ich zunächst die GPU von Amazon EC2 verwendet, da dies mit der CPU zu tun schien und die Anzahl der Berechnungen unzureichend war. Die Anzahl der Epochen (Wiederholungszahl) wurde von 40 auf 400 erhöht.

Maschinelles Lernen ist in Trainingsdaten und Bewertungsdaten unterteilt. Ich trainiere die Trainingsdaten, aber die probabilistische Gradientenabstiegsmethode verwendet Zufallszahlen und im Prinzip nimmt sie fein zu oder ab und ändert sich zu Rasseln, aber als eine andere Geschichte. Wenn das Lernergebnis auf die Bewertungsdaten angewendet wird, verbessert es sich häufig bis zu einem bestimmten Punkt und verschlechtert sich ab einem bestimmten Punkt. Dies wird als Überlernen bezeichnet.

Idealerweise sollte die Anzahl der Wiederholungen (Anzahl der Epochen) bis zum Beginn des Überlernens (frühes Ende) durchgeführt werden, und diesmal scheint das Überlernen etwa 300 bis 400 Mal zu beginnen (ich habe es nicht ernsthaft bestätigt), also 400 Mal Es ist eingestellt auf.

Die Anzahl der Unterteilungen zwischen Trainingsdaten und Bewertungsdaten beträgt 8: 2. Dies folgte einem Studenten an der Stanford University.

Modell-

Das Modell verwendete den sogenannten "VGG-Stil". Es wurde von einer Person an der Universität Oxford im September 2014 als Very Deep Convolutional Networks for Large-Scale Image Recognition angekündigt. Ein darauf basierendes Keras-Beispiel ist https://github.com/fchollet/keras/blob/master/examples/cifar10_cnn.py, und ich ändere es. Studenten der Stanford University sind ebenfalls im VGG-Stil. Tawago ist unbekannt. Ist es VGG-Stil?

Der VGG-Stil ist ein normales neuronales Netzwerk, das "Folding-> Folding-> Max Pooling" wiederholt.

Wenn Sie die Faltung usw. kurz erklären, wird es so sein. Einzelheiten finden Sie im Buch "Deep Learning von Grund auf neu".

--Konvolution: Nehmen Sie die Nähe jedes Punktes (3x3 usw.), konvertieren Sie ihn in einen eindimensionalen Vektor und produzieren Sie ihn mit dem Parameter.

ETL8G enthält nur Daten für 160 Personen, keinen großen Datensatz. Wenn nur wenige Daten vorhanden sind, funktioniert die Verwendung eines komplexen Modells mit einer großen Anzahl von Parametern im Allgemeinen nicht. Daher habe ich das einfache Keras-Beispiel so verwendet, wie es ist. "Folding-> Folding-> Max Pooling" ist zweimal.

Rauschfunktion

Eine Möglichkeit, die Generalisierungsfähigkeit zu verbessern, besteht darin, nur während des Trainings Rauschen hinzuzufügen. Dies sind die beiden, die ich dieses Mal benutzt habe.

Dropout wird auch von Studenten der Stanford University verwendet. Ich habe alle p = 0,5, dh 50% Chance auf Verdoppelung und 50% Chance auf 0.

Ich habe es im Beispielcode von Keras verwendet und damit gelernt, dass das Eingabebild auch dann als Zeichen gedreht / gezoomt werden kann, wenn es gedreht / gezoomt wird. Dies ist auch sehr effektiv. Studenten der Stanford University haben es nicht benutzt.

Der Rest der Details

Fazit

Also habe ich getan, was das Lehrbuch getan hat, und es waren 99,78%. Handschriftliche Zahlen werden im MNIST-Datensatz mit 99,77% angegeben, was ungefähr dem http://yann.lecun.com/exdb/mnist/ entspricht. Ich mache kein Kanji oder sonst etwas, aber Studenten der Stanford University sagen 99,64%, was etwas besser ist.

Tiefes Lernen und handgeschriebene Zeichen sind fast perfekt zu erkennen!

Recommended Posts

99,78% Genauigkeit bei tiefem Lernen durch Erkennen von handgeschriebenem Hiragana
Klassifizieren Sie Anime-Gesichter durch Fortsetzung / Deep Learning mit Keras
Versuchen Sie es mit TensorFlow
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Generiere Pokemon mit Deep Learning
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
Identifikation der Katzenrasse mit Deep Learning
Machen Sie ASCII-Kunst mit tiefem Lernen
Versuchen Sie es mit TensorFlow Part 2
Deep Learning durch Implementierung 1 gelernt (Return Edition)
Überprüfen Sie die Kniebeugenform mit tiefem Lernen
Kategorisieren Sie Nachrichtenartikel mit Deep Learning
Snack-Umsatzprognose mit Deep Learning
Bringen Sie Menschen mit Deep Learning zum Lächeln
Maschinelles Lernen mit Docker (42) Programmieren von PyTorch für Deep Learning Von Ian Pointer
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)
Klassifizieren Sie Anime-Gesichter mit tiefem Lernen mit Chainer
Probieren Sie die Bitcoin-Preisprognose mit Deep Learning aus
Versuchen Sie es mit Chainer Deep Q Learning - Launch
Produzieren Sie wunderschöne Seekühe durch tiefes Lernen
Versuchen Sie mit Kipoi tiefes Erlernen der Genomik
Objekterkennung durch tiefes Lernen, Keras tief zu verstehen
Emotionale Analyse von Tweets mit Deep Learning
Tiefes Lernen
Die Geschichte des tiefen Lernens mit TPU
Chainer und Deep Learning durch Funktionsnäherung gelernt
Tiefes Lernen durch Implementierung gelernt ~ Erkennung von Abnormalitäten (Lernen ohne Lehrer) ~
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Paralleles Lernen von Deep Learning durch Keras und Kubernetes
Tiefes Lernen durch Implementierung (Segmentierung) ~ Implementierung von SegNet ~
Deep Learning Memorandum
Starten Sie Deep Learning
Python Deep Learning
Deep Learning × Python
Erstellen Sie durch tiefes Lernen einen "Bot, der Ihnen AV-Schauspielerinnen mit ähnlichen Gesichtern sagt"
Aktieninvestitionen durch tiefgreifendes Lernen (Policy Gradient Method) (1)
Klassifizieren Sie Mnist-Zahlen nach Keras, ohne dass der Lehrer etwas lernt [Auto Encoder Edition]
Deep Learning Bildanalyse beginnend mit Kaggle und Keras
[Erkennung von Abnormalitäten] Erkennen Sie Bildverzerrungen durch Fernunterricht
Klassifizieren Sie Artikel mit Tags, die von Qiita durch unbeaufsichtigtes Lernen angegeben wurden
Vorhersagen von Tags durch Extrahieren von Musikfunktionen mit Deep Learning
(Deep Learning) Ich habe Bilder von der Flickr-API gesammelt und versucht, durch Transferlernen mit VGG16 zu unterscheiden
Ich habe versucht, Othello AI zu machen, dass ich 7,2 Millionen Hände durch tiefes Lernen mit Chainer gelernt habe