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.
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.
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.
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)
Das ist "Zo", nicht wahr? Ich möchte etwas tun (Identifikation / Vorhersage / Erkennung genannt).
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
(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.
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!),
Ein Beispiel ist die Datennormalisierung (Graustufen, Aufhellung, Stapelnormalisierung usw.), die das Problem vereinfacht und die Lerneffizienz verbessert.
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.
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)
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