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.
Der Quellcode lautet https://github.com/yukoba/CnnJapaneseCharacter.
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.
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.
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).
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.
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.
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.
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.
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.
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