[PYTHON] Fordern Sie die Bildklassifizierung durch TensorFlow2 + Keras 1-Move vorerst heraus.

Einführung

Dies ist ein Studienmemo (zuerst) zur Bildklassifizierung (Google Colaboratory-Umgebung) mit TensorFlow2 + Keras. Das Thema ist die Klassifizierung von handgeschriebenen numerischen Bildern (** MNIST **), die ein Standardelement ist.

Insbesondere für die folgenden ** Bilder ** (28 x 28 Pixel), die handgeschriebene Zeichen von "0" bis "9" erfassen. MNIST-1.png Welche von ** "0" bis "9" kann jedes Bild klassifiziert werden? Der Inhalt besteht darin, das Problem ** (= Mehrklassenklassifizierungsproblem) mit Deep Learning (Deep Learning) von TensorFlow2 + Keras anzugehen.

Verwenden Sie Google Colabo., Das für die Entwicklungs- und Ausführungsumgebung einfach, bequem und kostenlos ist. Informationen zur Einführung von Google Colabo finden Sie unter hier.

In diesem Artikel habe ich den auf TensorFlows Official HP veröffentlichten Beispielcode kopiert und in die Codezelle von Google Colab eingefügt. Stellen Sie sicher, dass Sie darauf verzichten können.

Darüber hinaus erklärt er lose und vage "** was jeder Teil des Codes tut " und " was der zur Laufzeit angezeigte Text vermittelt **".

Was ist TensorFlow?

Keras

--Lesen Sie "Kerasu".

Probieren Sie den Beispielcode aus

Klassenklassifizierung für handgeschriebenen numerischen Bilddatensatz (MINIST) in "Einführung in TensorFlow 2.0 für Anfänger" auf der offiziellen Website von TensorFlow. Es gibt Beispielcode (nur ein Dutzend Zeilen) (klassifiziert in Kategorien von "0" bis "9"). Fügen Sie dies in Google Colab ein und führen Sie es aus.

Wechseln Sie die TF-Version von 1.x auf 2.x.

Um TensorFlow2 zu verwenden, führen Sie den folgenden ** magischen Befehl ** in der Codezelle aus (fügen Sie ihn in die Codezelle ein und führen Sie ihn mit \ [Strg ] + \ [Enter ] aus). Der Grund dafür ist, dass Google Colab ab dem 27. Dezember 2019 TensorFlow ** 1.x ** als Standard festgelegt und auf ** 2.x ** umgeschaltet hat. Es ist die Verarbeitung von.

GoogleColab.Vorbereitung bei


%tensorflow_version 2.x

Wenn es kein Problem gibt, wird es als " TensorFlow 2.x selected. "angezeigt.

Wenn Sie TF (TensorFlow) von 1.x ausführen, wird die Meldung " Die Standardversion von TensorFlow in Colab wechselt bald zu TensorFlow 2.x. </ Font>" angezeigt, sodass sie geschlossen ist. Ich denke nicht, dass dieses Verfahren in Zukunft notwendig sein wird (TF 2.x wird die Standardeinstellung sein).

Beispielcode und Ausführung

Ich habe dem Beispielcode auf der offiziellen Website einige Kommentare hinzugefügt.

import tensorflow as tf

# (1)Laden Sie den handschriftlichen numerischen Bilddatensatz (MNIST) herunter und speichern Sie ihn in einer Variablen
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# (2)Datennormalisierung (Vorverarbeitung für Eingabedaten)
x_train, x_test = x_train / 255.0, x_test / 255.0

# (3)Erstellen eines NN-Modells
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

# (4)Modellzusammenstellung (einschließlich Trainingseinstellungen)
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

# (5)Modelltraining (Lernen / Training)
model.fit(x_train, y_train, epochs=5)

# (6)Modellbewertung
model.evaluate(x_test,  y_test, verbose=2)

Im obigen Kurzprogramm machen wir Folgendes:

  • Laden Sie den Datensatz handgeschriebener numerischer Bilder herunter und speichern Sie sie in jeder Variablen (Vorbereitung der Daten). -- * _ train: Daten für das Training (zum Lernen, Training) -- * _ test: Testdaten (Auswertungsdaten)
    Einzelheiten zu diesen Daten finden Sie im zweiten Abschnitt "~ Schauen wir uns die Eingabedaten genauer an ~. / items / 2c969ca4675d5a3691ef) ”. --Datennormalisierung (Vorverarbeitung für Eingabedaten)
  • Konvertieren Sie ganzzahlige Werte im Bereich von 0 bis 255 in reelle Werte im Bereich von 0,0 bis 1,0
  • Aufbau eines neuronalen Netzwerkmodells für maschinelles Lernen --Details hier werden in Teil 7 "~ Grundlegendes zu Layertypen / Aktivierungsfunktionen ~" erläutert. --Kompilieren des Modells (einschließlich Einstellungen für das Lernen)
  • Details hier werden in Teil 8 "~ Auswahl eines Optimierungsalgorithmus und einer Verlustfunktion ~" erläutert.
  • Modellschulung mit Trainingsdaten (* _ train) (→ ** trainiertes Modell ** abgeschlossen)
  • Modellbewertung unter Verwendung von Testdaten (* _test) (Ausführung der Bildklassifizierung durch trainiertes Modell und Antwortabgleich (Bewertung))

Das Ergebnis der Ausführung des Programms ist wie folgt.

Ausführungsergebnis


Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 5s 82us/sample - loss: 0.2992 - accuracy: 0.9134
Epoch 2/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.1457 - accuracy: 0.9561
Epoch 3/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.1096 - accuracy: 0.9659
Epoch 4/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.0876 - accuracy: 0.9730
Epoch 5/5
60000/60000 [==============================] - 5s 80us/sample - loss: 0.0757 - accuracy: 0.9765
10000/10000 - 0s - loss: 0.0766 - accuracy: 0.9762
[0.07658648554566316, 0.9762]

In Bezug auf die Bedeutung ...

  • "60000 Muster trainieren": Wir werden mit 60.000 handgeschriebenen Textbildern trainieren. --Epoch x / 5: Dies ist das x-te Lernen von insgesamt 5 Mal. --5s 82us / sample --loss: 0.2992 - Genauigkeit: 0.9134: Es dauerte 82 $ \ mu $ Sekunden pro Bild und ungefähr 5 Sekunden für das Ganze (60.000 Bilder). Die Leistung des auf diese Weise trainierten Modells (bewertet anhand von Trainingsdaten) betrug 0,2992 für den Verlustfunktionswert (Verlust) und 0,9134 für die korrekte Antwortrate (Genauigkeit).
  • Die korrekte Antwortrate von 0,9134 bedeutet, dass $ 60.000 \ times0,9134 = 54.804 $ Bilder korrekt von 0 bis 9 klassifiziert werden können und die verbleibenden $ 60.000-54.804 = 5.196 $ Bilder falsch klassifiziert werden. Interpretieren. --10000 / 10000 --0s - Verlust: 0,0766 - Genauigkeit: 0,9762: Ich habe die Klassifizierungsvorhersage mit 10.000 Bildern zum Testen getestet (getrennt von dem für das Training verwendeten). Der Test dauerte 0 Sekunden mit einer Verlustfunktionsbewertung von 0,0766 und einer korrekten Antwortrate von 0,9762.

Was ist die richtige Antwortrate (Genauigkeit)?

Wird auch als "Genauigkeit" oder "richtige Antwortrate" bezeichnet. Zeigt den Prozentsatz der Bilder an, die korrekt klassifiziert wurden. Wenn beispielsweise 98 von 100 Bildern korrekt klassifiziert werden können, beträgt die richtige Antwortrate 98/100 $ = 0,98 $ (= 98%).

Der Prozentsatz der richtigen Antworten liegt zwischen 0,0 und 1,0. Je größer der ** -Wert (näher an 1,0) ist, desto besser ist das Modell ** (bei Auswertung anhand von Daten, die nicht für das Training verwendet wurden).

Was ist der Verlustfunktionswert (Verlust)?

Es gibt einen Teil, in dem die Überlegenheit oder Unterlegenheit des Modells (Klassifikators) nicht nur unter dem Gesichtspunkt der richtigen Antwortrate gemessen werden kann. Angenommen, Sie möchten ein Bild (richtige Antwort ist "3") mit zwei verschiedenen Modellen wie folgt klassifizieren (vorhersagen).

ダウンロード.png

Für dieses Bild sagt Modell A "3" voraus und Modell B sagt auch "3" voraus. Da die richtige Antwort "3" ist, beträgt die richtige Antwortrate für beide Modelle 1,0 **. Betrachtet man nur diesen ** korrekten Antwortratenindex **, so sind die beiden Modelle gleich gut.

Die Vorhersage von Modell A ist jedoch "** 8 ist 10%, das Vertrauen von 3 ist 90% und 3 ist ausgewählt **", während die Vorhersage von Modell B "*" ist. * 8 ist 45%, 3 ist 55% und 3 wird ausgegeben ** "Was wäre wenn?

** Selbst bei der gleichen korrekten Antwortrate von 1,0 ** kann gesagt werden, dass Modell A überlegen ist.

Dies kann jedoch im korrekten Antwortratenindex nicht berücksichtigt werden. Derjenige, der es bewertet, ist die ** Verlustfunktion **, und der von der Verlustfunktion bewertete Wert ist ** Verlust **.

Die hier behandelte handschriftliche Nummernklassifizierung gehört zur Art des "** Mehrklassenklassifizierungsproblems **", und der Index des ** Kreuzentropiefehlers ** (Kreuzentropie) wird häufig für die Verlustfunktion dieses Problems verwendet. Ich werde. Die Crossover-Entropie wird unter Verwendung jedes Werts in der Ausgabeschicht des neuronalen Netzwerks und der richtigen Antwortdaten berechnet. Details werden in Teil 8 "~ Auswahl eines Optimierungsalgorithmus und einer Verlustfunktion ~" erläutert.

Grundsätzlich nimmt der Verlustfunktionswert einen Wert von 0,0 oder mehr an, und ** je kleiner der Verlustfunktionswert (näher an 0,0) ist, desto besser ist das Modell **. Der Wert der Verlustfunktion kann 1,0 überschreiten.

nächstes Mal

  • Beim nächsten Mal möchte ich die Trainingsdaten (x_train, y_train) und Testdaten (x_test, y_test) erklären und mit matplotlib visualisieren.

Recommended Posts

Fordern Sie die Bildklassifizierung durch TensorFlow2 + Keras 1-Move vorerst heraus.
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras CNN 1 heraus ~ Bewegen Sie sich vorerst ~
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 4 heraus. ~ Lassen Sie uns mit dem trainierten Modell ~ vorhersagen
Fordern Sie die Bildklassifizierung durch TensorFlow2 + Keras 5 heraus ~ Beobachten Sie Bilder, die nicht klassifiziert werden können ~
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras heraus. 7 - Grundlegendes zu Layertypen und Aktivierungsfunktionen -
Flow Memo, um LOCUST vorerst zu verschieben
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 3 heraus ~ Visualisieren Sie MNIST-Daten ~
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras heraus. 6-Versuchen Sie, die von Ihnen erstellten Bilder vorzuverarbeiten und zu klassifizieren.
Ich möchte vorerst Selen bewegen [für Mac]
Grundlegendes zur Python-Klasse Kampf (1) Verschieben wir sie vorerst
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 9 heraus. Lernen, Speichern und Laden von Modellen
Ich habe zum ersten Mal Tensorflow ausprobiert
Importieren Sie sie vorerst in jupyter
Machen Sie vorerst ein Histogramm (matplotlib)
Führen Sie yolov4 "vorerst" in Windows aus
Ich habe vorerst mit Floydhub gespielt
Richter Yosakoi Naruko nach Bildklassifikation von Tensorflow.
Versuchen Sie es vorerst mit LINE Notify
virtualenv Das ist vorerst alles!
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
Molekulardynamiksimulation vorerst versuchen
Identifizieren Sie den Namen aus dem Blumenbild mit Keras (Tensorfluss)
Versuchen Sie vorerst, Arch Linux zu installieren.
Neben Excel jupyter Notebook vorerst
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Versuchen Sie vorerst, die Docomo-Chat-Dialog-API zu verwenden
Ich möchte vorerst eine Docker-Datei erstellen.
Erster Kaggle (Kaggle ①)
CNN (1) zur Bildklassifizierung (für Anfänger)
Kaguru zum ersten Mal
Lassen Sie uns vorerst Googles Vision API von Python berühren
Vorerst möchte ich jede Datei mit ffmpeg konvertieren !!
Versuchen Sie vorerst, FireBase Cloud Firestore mit Python zu verwenden
Siehe Python zum ersten Mal
Starten Sie Django zum ersten Mal
[Python] [Maschinelles Lernen] Anfänger ohne Wissen versuchen vorerst maschinelles Lernen