Zum Inhalt springen

Convolutional Neural Network in TensorFlow mit CIFAR10 Bildern

Mit der Python Bibliothek TensorFlow können wir schnell und einfach ein Convolutional Neural Network aufbauen, das wir beispielsweise dazu nutzen können, Bilder zu klassifizieren. In einem früheren Artikel hatten wir uns in der Theorie angeschaut, wie ein solches Convolutional Neural Network funktioniert. Jetzt wollen wir es erstellen und trainieren.

Welchen Datensatz nutzen wir?

TensorFlow verfügt über verschiedenste Datensätze, die wir mit wenigen Codezeilen downloaden und nutzen können. Das ist besonders dann hilfreich, wenn man neue Modelle und deren Umsetzung testen will und deshalb nicht lange nach Daten suchen will. Darüber hinaus bietet auch Google eine Datensatz Recherche an, mit welcher man innerhalb weniger Klicks einen passenden Datensatz findet.

Für unser beispielhaftes Convolutional Neural Network nutzen wir den CIFAR10 Datensatz, welcher über TensorFlow verfügbar ist. Der Datensatz enthält insgesamt 60.000 Bilder in Farbe, die in zehn verschiedene Bildklassen aufgeteilt sind. Wir merken, dass es sich dabei um einen perfekten Trainingsdatensatz handelt, da jede Klasse exakt 6.000 Bilder beinhaltet. Bei Klassifizierungsmodellen müssen wir immer darauf achten, dass jede Klasse nach Möglichkeit gleich oft im Datensatz enthalten ist. Für den Testdatensatz nehmen wir insgesamt 10.000 Bilder und somit 50.000 Bilder für den Trainingsdatensatz.

Jedes dieser Bilder ist 32×32 Pixel groß. Die Pixel wiederum haben einen Wert zwischen 0 und 255, wobei jede Zahl einen Farbcode repräsentiert. Deshalb teilen wir jeden Pixelwert durch 255, sodass wir die Pixelwerte auf den Bereich zwischen 0 und 1 normalisieren.

Convolutional Neural Network

Um zu prüfen, dass alle Bilder richtig dargestellt werden, lassen wir uns die ersten zehn Bilder printen inklusive der Klasse zu der sie gehören. Da es sich dabei lediglich um 32×32 Bilder handelt sind die Bilder zwar relativ unscharf, man erkennt jedoch trotzdem, um welche Klasse es sich handelt.

Convolutional Neural Network

Wie bauen wir das Convolutional Neural Network auf?

In TensorFlow können wir nun das Convolutional Neural Network bauen, indem wir die Abfolge der einzelnen Schichten definieren. Da es sich um relativ kleine Bilder handelt werden wir zweimal den Stapel aus Convolutional Layer und Max Pooling Layer nutzen. Die Bilder haben, wie wir es bereits kennen, 32 Höhen-, 32 Breitendimensionen und 3 Farbkanäle (Rot, Grün, Blau).

Die Convolutional Layer nutzen erst 32 und dann 64 Filter mit einem 3×3 Kernel als Filter und die Max Pooling Layer sucht den maximalen Wert innerhalb einer 2×2 Matrix. Wem diese Vorgehensweise noch fremd ist, der kann gerne den theoretischen Beitrag zu Convolutional Neural Networks nochmal nachlesen.

Convolutional Neural Network

Nach diesen zwei Stapeln haben wir die Dimensionen der Bilder schon deutlich herabgesetzt, auf 6 Höhenpixel, 6 Breitenpixel und insgesamt 64 Filter. Mit einer dritten und letzten Convolutional Layer reduzieren wir diese Dimensionen weiter auf 4x4x64. Bevor wir daraus nun ein vollvermaschtes Netzwerk aufbauen, ersetzen wir die 3×3 Matrix pro Bild, durch einen Vektor aus 1024 Elemente (4*4*64), ohne dabei Informationen zu verlieren.

Nun haben wir die Dimensionen der Bilder ausreichend reduziert und können noch eine Hidden Layer mit insgesamt 64 Neuronen einfügen, bevor das Modell in der Ausgabeschicht mit den zehn Neuronen für die zehn verschiedenen Klassen endet.

Convolutional Neural Network

Das Modell mit insgesamt 122.570 Parametern ist nun fertig aufgebaut und kann trainiert werden.

Modell kompilieren und trainieren

Bevor wir mit dem Training des Convolutional Neural Networks beginnen können, müssen wir das Modell noch kompilieren. Darin definieren, nach welcher Verlustfunktion das Modell trainiert werden soll, den Optimizer, also nach welchem Algorithmus sich die Parameter ändern, und welche Metrik wir gezeigt bekommen wollen, um den Trainingsverlauf überwachen zu können.

Convolutional Neural Network

Wie bewertet man das Modell?

Nachdem wir das Convolutional Nerual Network für insgesamt 10 Epochen trainiert haben, können wir uns den Verlauf der Genauigkeit des Modells anschauen, um festzustellen, ob wir mit dem Training zufrieden sind.

Convolutional Neural Network
Der Graph zeigt die Trainings- und Validationgenauigkeit eines CNN Modells nach 10 Epochen Trainingszeit.
CNN Training- und Validation-Genauigkeit

Unsere Vorhersage der Bildklasse ist in etwa 80 % der Fällen richtig. Dies ist kein schlechter Wert, aber auch kein besonders guter. Wenn wir diesen noch weiter erhöhen wollen, könnten wir das Convolutional Neural Network für mehr Epochen trainieren lassen oder möglicherweise auch die Dense Layer noch anders konfigurieren.

Das solltest Du mitnehmen

  • Convolutional Neural Networks lassen sich mithilfe von TensorFlow in nur wenigen Schritten selbst programmieren.
  • Wichtig ist die Anordnung der Convolutional und Max Pooling Layer auf den Use Case abzustimmen.

Danke an Deepnote für die Unterstützung bei diesem Artikel! Deepnote bietet mir die Möglichkeit Python Code einfach und schnell auf der Website einzubinden und außerdem die dazugehörigen Notebooks in der Cloud zu hosten.

Andere Beiträge zum Thema Convolutional Neural Network in TensorFlow

  • Dieser Beitrag orientiert sich vor allem an dem Beispiel von TensorFlow.
Cookie Consent mit Real Cookie Banner