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. 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 **".
Keras
--Lesen Sie "Kerasu".
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.
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).
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:
* _ train
: Daten für das Training (zum Lernen, Training)
-- * _ test
: Testdaten (Auswertungsdaten) * _ train
) (→ ** trainiertes Modell ** abgeschlossen)* _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 ...
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).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.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).
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).
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.
x_train
, y_train
) und Testdaten (x_test
, y_test
) erklären und mit matplotlib visualisieren.Recommended Posts