Ansicht auf TensorFlow.org In Google Colab ausführen Quelle auf GitHub anzeigen Notebook herunterladen

Dieses Tutorial zeigt das Training eines einfachen faltungsneuronalen Netzwerks (CNN) zur Klassifizierung von CIFAR-Bildern. Da dieses Tutorial die Keras Sequential API verwendet, dauert das Erstellen und Trainieren unseres Modells nur wenige Codezeilen.,

TensorFlow importieren

import tensorflow as tffrom tensorflow.keras import datasets, layers, modelsimport matplotlib.pyplot as plt

Herunterladen und Vorbereiten des CIFAR10-Datensatzes

Der CIFAR10-Datensatz enthält 60.000 Farbbilder in 10 Klassen mit 6.000 Bildern in jeder Klasse. Der Datensatz ist in 50.000 Trainingsbilder und 10.000 Testbilder unterteilt. Die Klassen schließen sich gegenseitig aus, und es gibt keine überlappung zwischen Ihnen.

Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz170500096/170498071 - 11s 0us/step

Überprüfen Sie die Daten

Um sicherzustellen, dass der Datensatz korrekt aussieht, zeichnen wir die ersten 25 Bilder aus dem Trainingssatz und zeigen den Klassennamen unter jedem Bild an.,

Erstellen Sie die Faltungsbasis

Die 6 folgenden Codezeilen definieren die Faltungsbasis anhand eines gemeinsamen Musters: eines Stapels von Conv2D-und MaxPooling2D-Ebenen.

Als Eingabe nimmt ein CNN Tensoren der Form (image_height, image_width, color_channels) an und ignoriert die Stapelgröße. Wenn Sie neu in diesen Dimensionen sind, bezieht sich color_channels auf (R, G, B). In diesem Beispiel konfigurieren Sie unseren CNN für die Verarbeitung von Shape-Eingaben (32, 32, 3), dem Format von CIFAR-Bildern. Sie können dies tun, indem Sie das Argument input_shape an unsere erste Ebene übergeben.,

Lassen Sie uns die Architektur unseres bisherigen Modells anzeigen.

model.summary()

Oben können Sie sehen, dass die Ausgabe jeder Conv2D und MaxPooling2D Schicht ist ein 3D-tensor der Form (Höhe, Breite, Kanäle). Die Breite und Höhe Abmessungen neigen dazu, zu schrumpfen, wie Sie tiefer im Netzwerk gehen. Die Anzahl der Ausgabekanäle für jede Conv2D-Schicht wird durch das erste Argument (z. B. 32 oder 64) gesteuert. Wenn Breite und Höhe schrumpfen, können Sie es sich normalerweise (rechnerisch) leisten, mehr Ausgabekanäle in jeder Conv2D-Ebene hinzuzufügen.,

Fügen Sie dichte Schichten hinzu

Um unser Modell zu vervollständigen, führen Sie den letzten Ausgabetensor von der Faltungsbasis (der Form (4, 4, 64)) in eine oder mehrere dichte Schichten ein, um eine Klassifizierung durchzuführen. Dichte Schichten nehmen Vektoren als Eingabe (die 1D sind), während der aktuelle Ausgang ein 3D-Tensor ist. Zuerst glätten (oder entrollen) Sie die 3D-Ausgabe auf 1D und fügen dann eine oder mehrere dichte Ebenen hinzu. CIFAR verfügt über 10 Ausgabeklassen, sodass Sie eine letzte dichte Ebene mit 10 Ausgängen verwenden.

model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10))

Hier ist die komplette Architektur des Modells.,

model.summary()

Wie Sie sehen, wurden unsere (4, 4, 64) Ausgänge in Formvektoren (1024) abgeflacht, bevor Sie zwei dichte Schichten durchliefen.

Kompilieren und trainieren Sie das Modell

Bewerten Sie das Modell

313/313 - 1s - loss: 0.8840 - accuracy: 0.7157

print(test_acc)