1. Übersicht
In diesem Lab lernen Sie, wie Sie einen Keras-Klassifikator erstellen. Anstatt zu versuchen, die perfekte Kombination von Schichten für ein neuronales Netzwerk zur Erkennung von Blumen zu finden, verwenden wir zuerst eine Methode namens Transferlernen, um ein leistungsstarkes vorab trainiertes Modell an unseren Datensatz anzupassen.
Dieses Lab enthält die notwendigen theoretischen Erläuterungen zu neuronalen Netzwerken und ist ein guter Ausgangspunkt für Entwickler, die sich mit Deep Learning vertraut machen.
Dieses Lab ist Teil 2 der Serie „Keras auf TPU“. Sie können sie in der folgenden Reihenfolge oder einzeln durchführen.
- Datenpipelines mit TPU-Geschwindigkeit: tf.data.Dataset und TFRecords
- [THIS LAB] Ihr erstes Keras-Modell mit Lerntransfer
- Convolutional Neural Networks mit Keras und TPUs
- Moderne ConvNets, SqueezeNet, Xception, mit Keras und TPUs
Lerninhalte
- Erstellen eines eigenen Keras-Bildklassifikators mit einer Softmax-Schicht und Kreuzentropieverlust
- Um 😈 zu betrügen, indem du Lerntransfers nutzt, anstatt eigene Modelle zu entwickeln.
Feedback
Bitte teilen Sie uns mit, wenn Sie in diesem Code-Lab etwas nicht erkennen. Feedback kann über GitHub-Probleme [Feedback-Link] gegeben werden.
2. Kurzanleitung für Google Colaboratory
Für dieses Lab wird Google Collaboratory verwendet. Sie müssen nichts einrichten. Colaboratory ist eine Online-Notebook-Plattform für Bildungszwecke. Sie bietet kostenloses CPU-, GPU- und TPU-Training.
Sie können dieses Beispielnotebook öffnen und einige Zellen durchgehen, um sich mit Colaboratory vertraut zu machen.
TPU-Back-End auswählen
Wählen Sie im Colab-Menü Laufzeit > Laufzeittyp ändern und dann TPU aus. In diesem Code-Lab verwenden Sie eine leistungsstarke TPU (Tensor Processing Unit), die für hardwarebeschleunigtes Training unterstützt wird. Die Verbindung zur Laufzeit wird bei der ersten Ausführung automatisch hergestellt. Sie können auch die Schaltfläche „Verbinden“ rechts oben verwenden.
Notebook-Ausführung
Führen Sie die Zellen einzeln aus, indem Sie auf eine Zelle klicken und die Umschalttaste und die Eingabetaste drücken. Mit Laufzeit > Alle ausführen können Sie auch das gesamte Notebook ausführen.
Inhaltsverzeichnis
Alle Notizenbücher haben ein Inhaltsverzeichnis. Sie können ihn mit dem schwarzen Pfeil auf der linken Seite öffnen.
Ausgeblendete Zellen
Bei einigen Zellen wird nur der Titel angezeigt. Dies ist eine Colab-spezifische Notebookfunktion. Sie können darauf doppelklicken, um den Code zu sehen, der aber in der Regel nicht sehr interessant ist. Sie unterstützen in der Regel Funktionen für die Visualisierung. Sie müssen diese Zellen trotzdem ausführen, damit die darin enthaltenen Funktionen definiert werden.
Authentifizierung
Colab kann auf Ihre privaten Google Cloud Storage-Buckets zugreifen, sofern Sie sich mit einem autorisierten Konto authentifizieren. Das obige Code-Snippet löst einen Authentifizierungsprozess aus.
3. [INFO] Klassifikator für neuronale Netzwerke – erste Schritte
Kurz und bündig
Wenn Ihnen alle Begriffe im nächsten Abschnitt, die fett hervorgehoben sind, bereits bekannt sind, können Sie mit der nächsten Übung fortfahren. Wenn Sie gerade erst mit Deep Learning beginnen, lesen Sie weiter.
Für Modelle, die als Folge von Ebenen erstellt wurden, bietet Keras die Sequential API an. Ein Bildklassifikator mit drei dichten Schichten kann beispielsweise in Keras so geschrieben werden:
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
tf.keras.layers.Dense(500, activation="relu"),
tf.keras.layers.Dense(50, activation="relu"),
tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])
# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
optimizer='adam',
loss= 'categorical_crossentropy',
metrics=['accuracy']) # % of correct answers
# train the model
model.fit(dataset, ... )
Kompaktes neuronales Netzwerk
Dies ist das einfachste neuronale Netzwerk zum Klassifizieren von Bildern. Es besteht aus „Neuronen“, die in Schichten angeordnet sind. Die erste Ebene verarbeitet Eingabedaten und speist ihre Ausgaben in andere Ebenen ein. Sie wird als „dicht“ bezeichnet, weil jedes Neuron mit allen Neuronen aus der vorherigen Schicht verbunden ist.
Sie können ein Bild in ein solches Netzwerk einspeisen, indem Sie die RGB-Werte aller seiner Pixel zu einem langen Vektor zusammenfassen und als Eingabe verwenden. Es ist nicht die beste Technik für die Bilderkennung, aber wir werden sie später verbessern.
Neuronen, Aktivierungen, RELU
Ein „Neuron“ berechnet eine gewichtete Summe aller seiner Eingaben, fügt einen Wert namens „Bias“ hinzu und leitet das Ergebnis durch eine sogenannte „Aktivierungsfunktion“ weiter. Die Gewichtungen und Verzerrungen sind zunächst unbekannt. Sie werden zufällig initialisiert und durch Training des neuronalen Netzwerks mit vielen bekannten Daten „erlernt“.
Die gängigste Aktivierungsfunktion heißt RELU (Rectified Linear Unit). Wie Sie in der Grafik oben sehen können, ist dies eine sehr einfache Funktion.
Softmax-Aktivierung
Das obige Netzwerk endet mit einer Schicht mit 5 Neuronen, da wir Blumen in fünf Kategorien unterteilen: Rose, Tulpe, Löwenzahn, Gänseblümchen, Sonnenblume. Neuronen in Zwischenschichten werden mit der klassischen RELU-Aktivierungsfunktion aktiviert. In der letzten Ebene möchten wir jedoch Zahlen zwischen 0 und 1 berechnen, die die Wahrscheinlichkeit darstellen, dass diese Blume eine Rose, eine Tulpe usw. ist. Dazu verwenden wir eine Aktivierungsfunktion namens „Softmax“.
Um die Softmax-Funktion auf einen Vektor anzuwenden, wird die Exponentialfunktion auf jedes Element angewendet und der Vektor dann normalisiert. Normalerweise wird dabei die L1-Norm (Summe der Absolutwerte) verwendet, damit sich die Werte auf 1 summieren und als Wahrscheinlichkeiten interpretiert werden können.
Kreuzentropieverlust
Jetzt, da unser neuronales Netzwerk Vorhersagen aus Eingabebildern generiert, müssen wir messen, wie gut sie sind, d. h. den Abstand zwischen den Angaben des Netzwerks und den richtigen Antworten, die oft als „Labels“ bezeichnet werden. Denken Sie daran, dass wir für alle Bilder im Datensatz korrekte Labels haben.
Jede Entfernung würde funktionieren, aber für Klassifizierungsprobleme ist die sogenannte Kreuzentropie-Distanz am effektivsten. Wir nennen dies unsere Fehler- oder „Verlust“-Funktion:
Gradientenabstieg
Das „Trainieren“ des neuronalen Netzwerks bedeutet eigentlich, Bilder und Labels zu trainieren, um Gewichtungen und Verzerrungen so anzupassen, dass die Kreuzentropie-Verlustfunktion minimiert wird. Und so funktioniert es:
Die Kreuzentropie ist eine Funktion von Gewichten, Voreingenommenheiten, Pixeln des Trainingsbilds und seiner bekannten Klasse.
Wenn wir die partiellen Ableitungen der Kreuzentropie relativ zu allen Gewichten und Voreingenommenheiten berechnen, erhalten wir einen „Gradienten“, der für ein bestimmtes Bild, Label und den aktuellen Wert der Gewichte und Voreingenommenheiten berechnet wird. Denken Sie daran, dass wir Millionen von Gewichtungen und Verzerrungen haben können. Die Berechnung des Farbverlaufs klingt also wie eine Menge Arbeit. Glücklicherweise erledigt Tensorflow das für uns. Die mathematische Eigenschaft eines Farbverlaufs besteht darin, dass er nach oben zeigt. Da wir hingehen möchten, wo die Kreuzentropie gering ist, gehen wir in die entgegengesetzte Richtung. Wir aktualisieren die Gewichte und Voreingenommenheiten um einen Bruchteil des Gradienten. Anschließend wiederholen wir immer wieder die gleiche Aufgabe mit den nächsten Batches von Trainingsbildern und ‐labels in einer Trainingsschleife. Hoffentlich konvergiert dies zu einem Punkt, an dem die Kreuzentropie minimal ist, obwohl es keine Garantie dafür gibt, dass dieses Minimum eindeutig ist.
Mini-Batching und Impuls
Sie können Ihren Gradienten nur für ein Beispielbild berechnen und die Gewichtungen und Gewichtungen sofort aktualisieren. Bei einem Batch von beispielsweise 128 Bildern ergibt sich jedoch ein Farbverlauf, der die Einschränkungen durch verschiedene Beispielbilder besser darstellt und daher wahrscheinlich schneller der Lösung näherkommt. Die Größe des Mini-Batches ist ein anpassbarer Parameter.
Diese Methode, die manchmal als „stochastischer Gradientenabstieg“ bezeichnet wird, hat einen weiteren, pragmatischeren Vorteil: Die Arbeit mit Batches bedeutet auch, mit größeren Matrizen zu arbeiten, und diese lassen sich in der Regel für GPUs und TPUs einfacher optimieren.
Die Konvergenz kann jedoch immer noch etwas chaotisch sein und sogar aufhören, wenn der Gradientenvektor nur Nullen enthält. Bedeutet das, dass wir ein Minimum gefunden haben? Nimmt immer. Eine Farbverlaufskomponente kann bei einem Minimum oder Maximum null sein. Bei einem Gradientenvektor mit Millionen von Elementen ist die Wahrscheinlichkeit, dass jede Null einem Minimum und keines von ihnen einem Höchstpunkt entspricht, ziemlich gering, wenn alle Nullen sind. In einem Raum mit vielen Dimensionen kommen Sattelpunkte häufig vor, sodass wir nicht bei ihnen anhalten möchten.
Abbildung: Sattelpunkt. Der Farbverlauf ist 0, aber kein Mindestwert in alle Richtungen. (Bildzuordnung Wikimedia: By Nicoguaro – Own work, CC BY 3.0)
Die Lösung besteht darin, dem Optimierungsalgorithmus etwas Schwung zu verleihen, damit er die Sattelpunkte überwinden kann, ohne anzuhalten.
Glossar
batch oder mini-batch: Das Training wird immer mit Batches von Trainingsdaten und Labels durchgeführt. Dies trägt dazu bei, dass der Algorithmus konvergiert. Die Dimension „Batch“ ist in der Regel die erste Dimension von Datentensoren. Beispiel: Ein Tensor der Form [100, 192, 192, 3] enthält 100 Bilder mit 192 × 192 Pixeln mit drei Werten pro Pixel (RGB).
Kreuzentropieverlust: Eine spezielle Verlustfunktion, die häufig in Klassifikatoren verwendet wird.
Ganze Schicht: Eine Schicht von Neuronen, in der jedes Neuron mit allen Neuronen der vorherigen Schicht verbunden ist.
features: Die Eingaben eines neuronalen Netzwerks werden manchmal als „Features“ bezeichnet. Die Kunst, herauszufinden, welche Teile eines Datasets (oder Kombinationen von Teilen) in ein neuronales Netzwerk eingespeist werden sollen, um gute Vorhersagen zu erhalten, wird als „Feature Engineering“ bezeichnet.
Labels: Ein anderer Name für „Klassen“ oder richtige Antworten bei einem Klassifizierungsproblem mit beaufsichtigtem Lernen
Lernrate: Bruchteil des Gradienten, mit dem Gewichte und Voreingenommenheiten bei jeder Iteration der Trainingsschleife aktualisiert werden.
Logits: Die Ausgaben einer Neuronenschicht vor Anwendung der Aktivierungsfunktion werden als „Logits“ bezeichnet. Der Begriff leitet sich von der „Logistischen Funktion“ bzw. „Sigmoidfunktion“ ab, die früher die beliebteste Aktivierungsfunktion war. „Neuron-Ausgaben vor der logistischen Funktion“ wurde zu „Logits“ verkürzt.
loss: die Fehlerfunktion, die die Ausgaben neuronaler Netzwerke mit den richtigen Antworten vergleicht
neuron: berechnet die gewichtete Summe der Eingaben, fügt eine Verzerrung hinzu und speist das Ergebnis über eine Aktivierungsfunktion ein.
One-Hot-Codierung: Die Klasse 3 von 5 wird als Vektor mit 5 Elementen codiert, wobei alle Elemente null sind, mit Ausnahme des 3. Elements, das 1 ist.
relu: korrigierte lineare Einheit. Eine beliebte Aktivierungsfunktion für Neuronen.
Sigmoid: Eine weitere Aktivierungsfunktion, die früher beliebt war und in bestimmten Fällen immer noch nützlich ist.
Softmax: Eine spezielle Aktivierungsfunktion, die auf einen Vektor wirkt, den Unterschied zwischen der größten Komponente und allen anderen erhöht und den Vektor so normalisiert, dass er eine Summe von 1 hat, sodass er als Vektor von Wahrscheinlichkeiten interpretiert werden kann. Wird als letzter Schritt in Klassifikatoren verwendet.
Tensor: Ein Tensor ist wie eine Matrix, hat aber eine beliebige Anzahl von Dimensionen. Ein eindimensionaler Tensor ist ein Vektor. Ein zweidimensionaler Tensor ist eine Matrix. Es gibt auch Tensoren mit 3, 4, 5 oder mehr Dimensionen.
4. Transfer Learning
Für ein Bildklassifizierungsproblem genügen dichte Schichten wahrscheinlich nicht. Wir müssen etwas über Faltungsebenen und die vielen Möglichkeiten lernen, sie anzuordnen.
Wir können aber auch einen Umweg gehen. Es gibt vollständig trainierte Convolutional Neural Networks, die zum Download verfügbar sind. Sie können die letzte Schicht, den Softmax-Klassifizierungskopf, abschneiden und durch einen eigenen ersetzen. Alle trainierten Gewichte und Vorurteile bleiben unverändert. Sie trainieren nur die hinzugefügte Softmax-Schicht neu. Diese Technik wird als Transferlernen bezeichnet und funktioniert erstaunlicherweise, solange der Datensatz, auf dem das neuronale Netzwerk vorab trainiert wurde, „nahe genug“ an Ihrem liegt.
Praxisorientiert
Öffnen Sie das folgende Notebook, führen Sie die Zellen aus (Umschalttaste + Eingabetaste) und folgen Sie den Anweisungen, wenn das Label „ARBEITSERFORDERLICH“ angezeigt wird.
Keras Flowers transfer learning (playground).ipynb
Weitere Informationen
Mit Lerntransfers profitieren Sie sowohl von fortschrittlichen, von Top-Forschern entwickelten Convolutional Neural Network-Architekturen als auch vom Vorabtraining mit einem riesigen Dataset von Bildern. In unserem Fall verwenden wir das Transfer-Lernen aus einem Netzwerk, das auf ImageNet trainiert wurde, einer Datenbank mit Bildern vieler Pflanzen und Außenszenen, die Blumen sehr ähnlich sind.
Illustration: Mithilfe eines komplexen Convolutional Neural Network, das bereits als Blackbox trainiert wurde, wird nur der Klassifizierungskopf neu trainiert. Das ist der Lerntransfer. Wir werden später sehen, wie diese komplizierten Anordnungen von Faltungsebenen funktionieren. Im Moment ist es das Problem einer anderen Person.
Lerntransfer in Keras
In Keras können Sie ein vortrainiertes Modell aus der Sammlung tf.keras.applications.*
instanziieren. MobileNet V2 ist beispielsweise eine sehr gute Convolutional-Architektur, die eine angemessene Größe hält. Wenn Sie include_top=False
auswählen, erhalten Sie das vortrainierte Modell ohne seine letzte Softmax-Ebene, sodass Sie Ihre eigene hinzufügen können:
pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False
model = tf.keras.Sequential([
pretrained_model,
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(5, activation='softmax')
])
Beachten Sie auch die Einstellung pretrained_model.trainable = False
. Es friert die Gewichtungen und Verzerrungen des vortrainierten Modells ein, sodass Sie nur Ihre Softmax-Ebene trainieren. Dies erfordert in der Regel relativ wenige Gewichtungen und kann schnell durchgeführt werden, ohne dass ein sehr großes Dataset erforderlich ist. Wenn Sie jedoch viele Daten haben, kann die Lerntransferfunktion mit pretrained_model.trainable = True
noch besser funktionieren. Die vortrainierten Gewichtungen liefern dann hervorragende Anfangswerte und können im Rahmen des Trainings dennoch an Ihr Problem angepasst werden.
Beachten Sie auch die Flatten()
-Ebene, die vor der dichten Softmax-Ebene eingefügt wurde. Dichte Ebenen funktionieren auf flachen Datenvektoren, aber wir wissen nicht, ob das vortrainierte Modell diese Ergebnisse zurückgibt. Deshalb müssen wir die Ebenen zusammenführen. Im nächsten Kapitel, in dem wir uns mit Convolutional Neural Networks befassen, erklären wir das Datenformat, das von Convolutional-Schichten zurückgegeben wird.
Bei diesem Ansatz sollten Sie eine Genauigkeit von fast 75% erreichen.
Lösung
Hier ist das Lösungs-Notebook. Sie können sie verwenden, wenn Sie nicht weiterkommen.
Keras Flowers transfer learning (solution).ipynb
Behandelte Themen
- 🤔 So schreibt man einen Klassifikator in Keras
- 🤓 konfiguriert mit einem letzten Softmax-Layer und Kreuzentropieverlust
- 😈 Lerntransfer
- 🤔 Erstes Modell trainieren
- 🧐 Verlust und Genauigkeit während des Trainings verfolgen
Bitte nehmen Sie sich einen Moment Zeit und gehen Sie diese Checkliste durch.
5. Glückwunsch!
Sie können jetzt ein Keras-Modell erstellen. Im nächsten Lab erfahren Sie, wie Sie Faltebenen zusammensetzen.
- Datenpipelines mit TPU-Geschwindigkeit: tf.data.Dataset und TFRecords
- [THIS LAB] Ihr erstes Keras-Modell mit Lerntransfer
- Convolutional Neural Networks, mit Keras und TPUs
- Moderne ConvNets, SqueezeNet, Xception, mit Keras und TPUs
TPUs in der Praxis
TPUs und GPUs sind auf der Cloud AI Platform verfügbar:
- Auf Deep Learning-VMs
- Rufen Sie AI Platform Notebooks auf.
- In AI Platform Training-Jobs
Wir freuen uns über Feedback. Bitte teilen Sie uns mit, wenn Ihnen in diesem Lab etwas fehlt oder Sie der Meinung sind, dass es verbessert werden sollte. Feedback kann über GitHub-Probleme [Feedback-Link] gegeben werden.
|