[PYTHON] Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]

Hallo Licht. Folgen Sie hier, Deep Learning Tutorial Kapitel 2 Beschreibt die Erzeugung eines Deep Learning-Vorhersagemodells durch maschinelles Lernen. In einem späteren Kapitel werde ich erklären, wie das neuronale Netz speziell maschinelles Lernen durchführt. Hier stellen wir die praktische Anwendung vor.

Vorbereitung

Laden Sie zunächst den Quellcode von diesem Github herunter und legen Sie alles unter hiraganaNN.py im selben Verzeichnis wie den Bilddatensatz ab. Kapitel 2 verwendet hiraganaNN.py, dataArgs.py, hiragana_unicode.csv.

Lauf

Nach dem Wechseln in das Verzeichnis HIRAGANA_NN im Terminal (Eingabeaufforderung)

python hiraganaNN.py

Beginnen mit.

Dies wird maschinelles Lernen mit Deep Learning beginnen, aber es wird einige Zeit dauern, bis es gelernt ist, also werde ich es ein wenig erklären, während ich warte. Im Verzeichnis HIRAGANA_NN werden Bilder (110 * 110 Pixel), die in Verzeichnisse unterteilt sind, für jede Wohnung und jedes Pseudonym gespeichert. Beispielsweise werden im 305e-Verzeichnis Bilder des flachen Pseudonyms "Zo" in verschiedenen Schriftarten registriert und wie folgt handgeschrieben. zo_directory.png

Was ist der Zweck des maschinellen Lernens im Allgemeinen aus verschiedenen "Zo" -Bildern? Es ist ein Versuch, das zu lernen. Mit anderen Worten, dies sind "zo" (Lernen) zozozo.png

Das ist "Zo", nicht wahr? Ich möchte etwas tun (Identifikation / Vorhersage / Erkennung genannt). 305e_12382_reikofont.png

Es klingt einfach, aber weil die Maschine einfach ist, machen wir Fehler, die Menschen nicht erwarten würden. Zum Beispiel habe ich oben "Zo" gelernt. Der Boden ist also nicht "Zo"! Kippari rotate_zo.png

(Weil es ein wenig geneigt ist) Fehler (Verschlechterung der Vielseitigkeit) aufgrund eines solchen übermäßigen Lernens (außer dem obigen "zo" werden nicht als "zo" erkannt) werden als "Überlernen" bezeichnet. Darüber hinaus ist eine Verschlechterung der Lerneffizienz, die das Lernen an Orten erschwert, die ursprünglich nicht mit dem Erkennen der Farbe und Dichte von Zeichen zusammenhängen, auch eine Ursache für eine Leistungsverschlechterung. colorful_zo.png

Führt eine "Vorverarbeitung" durch, um Leistungseinbußen wie Überlernen und Verschlechterung der Lerneffizienz zu vermeiden. Es gibt verschiedene Vorverarbeitungen, aber Datenerweiterungen (Rotation, Bewegung, elastische Verzerrung, Rauschen usw.) (was auch immer kommt, wenn Sie verschiedene "zo" lernen!), various_zo.png

Ein Beispiel ist die Datennormalisierung (Graustufen, Aufhellung, Stapelnormalisierung usw.), die das Problem vereinfacht und die Lerneffizienz verbessert.

Quellcode-Übersicht

Aus der ersten Zeile

unicode2number = {}
import csv
train_f = open('./hiragana_unicode.csv', 'rb')
train_reader = csv.reader(train_f)
train_row = train_reader
hiragana_unicode_list = []
counter = 0
for row in train_reader:
    for e in row:
        unicode2number[e] = counter
        counter = counter + 1

Hier ist jedes flache Pseudonym nummeriert. Der mit dem Unicode 304a (o) ist die Nummer 0, der mit 304b (oder) ist die Nummer 1 und so weiter. Nächster

files = os.listdir('./')
for file in files:
    if len(file) == 4:
        #Flaches Pseudonymverzeichnis
        _unicode = file
        imgs = os.listdir('./' + _unicode + '/')
        counter = 0
        for img in imgs:
            if img.find('.png') > -1:
                if len(imgs) - counter != 1:
                ...

Hier wird das Bild als Eingabedaten (Lerndaten) gelesen. Laden Sie zum Testen nur das letzte Bild in jedes Verzeichnis. Beim Lesen

x_train.append(src)
y_train.append(unicode2number[_unicode])

Bilddaten werden in x_train (x_test) gespeichert, und das richtige Antwortetikett (0-83) wird in y_train (y_test) gespeichert. Der folgende Teil dient zum Vergrößern der Daten für ein Eingabedatenbild

for x in xrange(1, 10):
    dst = dargs.argumentation([2, 3])
    ret, dst = cv2.threshold(
        dst, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    x_train.append(dst)
    y_train.append(unicode2number[_unicode])

Hier wird es zufällig verschoben und gedreht, um es auf 10 Blatt zu erweitern. Einige der dargs.argumentation ([2, 3]) sind furchtbar schwer zu verstehen, aber in der Reihenfolge 2: Rotation (Rotation mit dreidimensionaler Tiefe) und 3: Bewegung wird der Bewegungsprozess nach dem Rotationsprozess ausgeführt. Es ist gegeben. Von jedem Verzeichnis

Nächster

x_train = np.array(x_train).astype(np.float32).reshape(
    (len(x_train), 1, IMGSIZE, IMGSIZE)) / 255
y_train = np.array(y_train).astype(np.int32)

Das Graustufenbild hat einen Pixelwert von 0 bis 255, wird jedoch durch Teilen durch 255 auf einen Wert von 0 bis 1 normiert. Dieser Prozess verbessert die Lerneffizienz.

Das Obige ist die Vorbereitung für Trainingsdaten (x_train, y_train), aber die Vorbereitung für den Test (x_test, y_test) erfolgt auf die gleiche Weise. Hier lesen wir den letzten in jedem Verzeichnis zum Testen und überprüfen die Genauigkeit des maschinell trainierten Modells. Das Testbild wird ebenfalls vergrößert und gelesen, der Grund dafür ist jedoch in Kapitel 7 beschrieben.

Da das Folgende die spezifische Struktur von Deep Learning ist, werde ich die Erklärung in einem späteren Kapitel zusammenfassen.

Lernergebnis

Dabei wurde der Fortschritt des maschinellen Lernens im Terminal deutlich.

('epoch', 1)
COMPUTING...
train mean loss=3.53368299341, accuracy=0.161205981514
test mean loss=1.92266467359, accuracy=0.506097565337
('epoch', 2)
COMPUTING...
train mean loss=1.66657279936, accuracy=0.518463188454
test mean loss=1.0855880198, accuracy=0.701219529277
.
.(Eine Warnung wird angezeigt, die Sie jedoch vorerst ignorieren können.)
('epoch', 16)
COMPUTING...
train mean loss=0.198548029516, accuracy=0.932177149753
test mean loss=0.526535278777, accuracy=0.844512195849
.
.
('epoch', 23)
COMPUTING...
train mean loss=0.135178960405, accuracy=0.954375654268
test mean loss=0.686121761981, accuracy=0.814024389154

Stellen Sie sich Verlust als den Fehler zwischen der von Deep Learning vorhergesagten Ausgabe und der richtigen Antwort vor. Genauigkeit ist der Prozentsatz der richtigen Antworten Beim maschinellen Lernen besteht das Ziel darin, den Verlust von Testdaten zu reduzieren.

Mit fortschreitendem Lernen nimmt der Zug- und Testverlust ab, der Zugverlust jedoch nach der Epoche16. Es besteht die Tendenz zum Überlernen, um den Testverlust zu erhöhen. Wenn dies geschieht, endet das Lernen, weil es die Grenze ist. Derzeit ergibt der Testverlust = 0,526 der Epoche 16 das beste Ergebnis in diesem Modell. (Bemühungen zur Verbesserung dieser Genauigkeit werden in einem späteren Kapitel erörtert.)

Da das Lernergebnis von Deep Learning für jede Epoche im selben Verzeichnis wie der Quellcode gespeichert ist, Speichern Sie eine Datei mit dem Namen "model16", die die besten Ergebnisse liefert. (Sie können andere Modelldateien löschen) models.png

Im nächsten Kapitel 3 werden wir anhand dieses Modells tatsächliche Vorhersagen treffen.

Kapitel Titel
Kapitel 1 Aufbau einer Deep-Learning-Umgebung basierend auf Chainer
Kapitel 2 Erstellen eines Deep Learning-Vorhersagemodells durch maschinelles Lernen
Kapitel 3 Zeichenerkennung anhand eines Modells
Kapitel 4 Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten
Kapitel 5 Einführung in das neuronale Netz und Erklärung des Quellcodes
Kapitel 6 Verbesserung der Lerneffizienz durch Auswahl von Optimizer
Kapitel 7 TTA,Verbesserung der Lerneffizienz durch Chargennormalisierung

Recommended Posts

Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 3 [Zeichenerkennung anhand eines Modells]
Einführung in Deep Learning zum ersten Mal (Chainer) Erkennung japanischer Zeichen Kapitel 1 [Umgebungskonstruktion]
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 4 [Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten]
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer aus Kapitel 2
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 7 Regressionsanalyse
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Vor der Einführung in das maschinelle Lernen. ~ Techniken, die für anderes maschinelles Lernen als maschinelles Lernen erforderlich sind ~
Eine Einführung in OpenCV für maschinelles Lernen
Eine Einführung in Python für maschinelles Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 13 Training für neuronale Netze ~ Chainer abgeschlossen
[Einführung in das maschinelle Lernen] Bis Sie den Beispielcode mit Chainer ausführen
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 13 Grundlagen des neuronalen Netzwerks
Über den kürzesten Weg, um ein Bilderkennungsmodell durch maschinelles Lernen zu erstellen und eine Android-Anwendung zu implementieren
Einführung in Deep Learning (1) --Chainer wird Anfängern leicht verständlich erklärt.
Eine Einführung in maschinelles Lernen für Bot-Entwickler
So verwenden Sie MkDocs zum ersten Mal
Rückblick auf den Wettbewerb für maschinelles Lernen, an dem ich zum ersten Mal gearbeitet habe
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Implementierung eines Deep Learning-Modells zur Bilderkennung
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 11 und 12 Einführung in Pandas Matplotlib
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Versuchen Sie zum ersten Mal, in Qiita zu posten
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 1 und 2
Einführung in das maschinelle Lernen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Wenn Sie zum ersten Mal Linux lernen, tun Sie dies!
Erster Kaggle (Kaggle ①)
Japanische Vorverarbeitung für maschinelles Lernen
Kapitel 7 [Deep Learning für neuronale Netze] P252 ~ 275 (erste Hälfte) [Lernen Sie, indem Sie sich mit Python bewegen! Neues Lehrbuch für maschinelles Lernen]
Eine Einführung in das maschinelle Lernen
Kaguru zum ersten Mal
Einführung in Deep Learning ~ Lernregeln ~
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Super Einführung in das maschinelle Lernen
Einführung in Deep Learning ~ Backpropagation ~
Unterschiede, die C # -Ingenieure beim ersten Erlernen von Python verspürten
Maschinelles Lernen mit Docker (42) Programmieren von PyTorch für Deep Learning Von Ian Pointer
[Maschinelles Lernen] Ich werde es erklären, während ich das Deep Learning Framework Chainer ausprobiere.
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Einführung in Deep Learning (2) - Versuchen Sie Ihre eigene nichtlineare Regression mit Chainer-
Management von Modellen für maschinelles Lernen, um Streitigkeiten mit der Unternehmensseite zu vermeiden
Zusammenfassung der Seiten, die zum Studium des Deep Learning Framework Chainer nützlich sind
Geben Sie das Know-how bekannt, das einen ähnlichen Bildsuchdienst für AV-Schauspielerinnen durch tiefes Lernen durch Chainer geschaffen hat
"Einführung in das maschinelle Lernen durch Bayes'sche Inferenz" Ungefähre Inferenz eines Poisson-Mischmodells, das nur mit Python-Numpy implementiert wurde
Einführung in das maschinelle Lernen Schreiben von Notizen
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Einführung in die Bibliothek für maschinelles Lernen SHOGUN
Siehe Python zum ersten Mal
Deep Learning Bilderkennung 2 Modellimplementierung
Starten Sie Django zum ersten Mal
Einführung in Deep Learning ~ Dropout Edition ~