Deep Learning mit Keras: Training neuronaler Netze mit Keras [mit Code]
Veröffentlicht: 2020-12-24Keras ist eine Python-Bibliothek, die eine API für die Arbeit mit neuronalen Netzwerken und Deep-Learning-Frameworks bereitstellt. Keras bietet Funktionen und Module, die beim Umgang mit verschiedenen Deep-Learning-Anwendungen in Python äußerst praktisch sind.
Am Ende dieses Tutorials verfügen Sie über folgende Kenntnisse:
- Was ist Keras?
- Keras-APIs
- Training eines neuronalen Netzwerks in Keras
Inhaltsverzeichnis
Was ist Keras?
Für Deep Learning war die früher am häufigsten verwendete Bibliothek Tensorflow 1.x, die für Anfänger schwierig zu handhaben war. Es war viel Codierung erforderlich, um nur ein einfaches 1-Schicht-Netzwerk zu erstellen. Mit Keras wurde der gesamte Prozess der Erstellung der Struktur eines neuronalen Netzwerks und des anschließenden Trainings und Trackings jedoch extrem einfach.
Keras ist eine High-Level-API, die auf Tensorflow-, Theano- und CNTK-Backend ausgeführt werden kann. Es gibt uns die Möglichkeit, Experimente mit neuronalen Netzen unter Verwendung einer hochrangigen und benutzerfreundlichen API durchzuführen. Es kann auch auf CPUs und GPUs ausgeführt werden.
Keras-APIs
Keras verfügt über 10 verschiedene API-Module, die für die Modellierung und das Training der neuronalen Netze vorgesehen sind. Lassen Sie uns jeden von ihnen durchgehen, um zu verstehen, was alle Keras zu bieten haben.
Modelle
Die Modell-API bietet die Funktionalität zum Erstellen komplexer neuronaler Netze durch Hinzufügen/Entfernen von Schichten. Das Modell kann entweder sequentiell sein, was bedeutet, dass die Schichten nacheinander mit einer einzigen Eingabe und Ausgabe gestapelt werden. Das Modell kann auch funktional sein, dh mit vollständig anpassbaren Modellen. Dies wird hauptsächlich in der Industrie verwendet.

Die API verfügt auch über das Trainingsmodul, das Methoden zum Kompilieren des Modells zusammen mit dem Optimierer und der Verlustfunktion, eine Methode zum Anpassen des Modells, eine Methode zum Bewerten und Vorhersagen neuer Daten bereitstellt. Darüber hinaus verfügt es auch über Methoden zum Trainieren, Testen und Vorhersagen von Batch-Daten. Models API hat auch das Speichern und Serialisieren der Modelle.
Schichten
Schichten sind die Bausteine jedes neuronalen Netzes. Die Layers-API bietet einen vollständigen Satz von Methoden zum Erstellen der neuronalen Netzarchitektur. Die Layers-API verfügt über die Base Layer-Klasse, die Methoden enthält, die zum Erstellen benutzerdefinierter Layer mit benutzerdefinierten Gewichtungen und Initialisierern erforderlich sind.
Sie enthält die Klasse „Layer Activations“, die aus den verschiedenen Aktivierungsfunktionen wie ReLU, Sigmoid, Tanh, Softmax usw. besteht. Die Klasse „Layer Weight Initializers“ bietet Methoden zum Initialisieren von Gewichten auf unterschiedliche Weise.
Es besteht auch aus der Core Layers-Klasse, die aus Klassen besteht, die zum Hinzufügen von Kernschichten wie Dense Layer, Activation Layer, Embedding Layer usw. erforderlich sind. Die Convolution Layer-Klasse bietet verschiedene Methoden zum Hinzufügen verschiedener Arten von Convolution Layers. Die Pooling Layers-Klasse enthält die Methoden, die für verschiedene Pooling-Typen erforderlich sind, wie z. B. Max Pooling, Average Pooling, Global Max Pooling und Global Average Pooling.
Rückrufe
Rückrufe sind eine Möglichkeit, den Trainingsprozess des Modells zu verfolgen. Bei aktiviertem Callback können verschiedene Aktionen vor oder nach dem Ende einer Epoche oder eines Stapels ausgeführt werden. Mit Rückrufen können Sie:
- Überwachen Sie die Trainingsmetriken, indem Sie die Metriken in TensorFlow Board protokollieren
- Regelmäßiges Speichern des Modells auf der Festplatte
- Vorzeitiges Stoppen, falls der Verlust nach bestimmten Epochen nicht signifikant abnimmt
- Zeigen Sie interne Zustände und Statistiken eines Modells während des Trainings an
Datensatzvorverarbeitung
Die Daten sind normalerweise im Rohformat und liegen in angeordneten Verzeichnissen und müssen vorverarbeitet werden, bevor sie dem Modell zur Anpassung zugeführt werden. Die Bilddaten-Vorverarbeitungsklasse hat viele solche dedizierten Funktionen. Beispielsweise müssen sich die Bilddaten im numerischen Array befinden, für das wir die Funktion img_to_array verwenden können. Oder wenn die Bilder in einem Verzeichnis und Unterordnern vorhanden sind, können wir die Funktion image_dataset_from_directory verwenden.
Die Datenvorverarbeitungs-API verfügt auch über Klassen für Zeitreihendaten und Textdaten.
Optimierer
Optimierer sind das Rückgrat jedes neuronalen Netzwerks. Jedes neuronale Netzwerk arbeitet an der Optimierung einer Verlustfunktion, um die besten Gewichte für die Vorhersage zu finden. Es gibt mehrere Arten von Optimierern, die leicht unterschiedliche Techniken anwenden, um optimale Gewichtungen zu finden. Alle diese Optimierer sind in der Optimierer-API verfügbar – SGD, RMSProp, Adam, Adadelta, Adagrad, Adamax, Nadal, FTRL.
Verluste
Verlustfunktionen müssen beim Kompilieren eines Modells spezifiziert werden. Diese Verlustfunktion würde durch den Optimierer optimiert, der auch als Parameter in der Kompiliermethode übergeben wurde. Die drei Hauptverlustklassen sind: Wahrscheinlichkeitsverluste, Regressionsverluste, Scharnierverluste.
Metriken
Metriken werden in jedem ML-Modell verwendet, um seine Leistung anhand von Testdaten zu quantifizieren. Metriken ähneln Verlustfunktionen, außer dass sie für Testdaten verwendet werden. Es sind viele Genauigkeitsmetriken verfügbar, wie z. B. Genauigkeit, binäre Genauigkeit, kategoriale Genauigkeit usw. Es enthält auch probabilistische Metriken wie z. Präzision, Rückruf usw.
Abgesehen von diesen Klassifizierungsmetriken verfügt es auch über Regressionsmetriken wie Mean Squared Error, Root Mean Squared Error, Mean Absolute Error usw.

Lesen Sie auch: Was ist was von Keras und TensorFlow
Keras-Anwendungen
Die Keras-Anwendungsklasse besteht aus einigen vorgefertigten Modellen zusammen mit vortrainierten Gewichten. Diese vortrainierten Modelle werden für den Prozess des Transfer Learning verwendet. Diese vortrainierten Modelle unterscheiden sich je nach Architektur, Anzahl der Schichten, trainierbaren Gewichtungen usw. Einige davon sind Xception, VGG16, Resnet50, MobileNet usw.
Training eines neuronalen Netzes mit Keras
Betrachten wir einen einfachen Datensatz wie MNIST, der in der Datensatzklasse von Keras verfügbar ist. Wir werden ein einfaches sequentielles Convolutional Neural Network zum Klassifizieren der handschriftlichen Bilder der Ziffern 0-9 erstellen.
#Laden des Datensatzes aus keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() |
Normalisieren des Datensatzes durch Dividieren jedes Pixels durch 255. Außerdem müssen die Bilder in 4 Dimensionen transformiert werden, bevor sie einem CNN-Modell zugeführt werden.
x_train = x_train.astype( 'float32' ) x_test = x_test.astype( 'float32' ) x_Zug /= 255 x_test /= 255 x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 ) x_test = X_test.reshape(X_test.form[ 0 ], 28 , 28 , 1 ) |
Wir müssen die Klassen kennzeichnen, bevor wir sie dem Modell zuführen. Dazu verwenden wir die Utils-Klasse von Keras.
aus keras.utils import to_categorical
|
Jetzt können wir mit der Erstellung des Modells mit der Sequential API beginnen.
aus keras.models import Sequential aus keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), activation= 'relu' , input_shape=x_train.shape[ 1 :))) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add (Dropout (Rate = 0,25 )) model.add(Conv2D(filters= 64 , kernel_size=( 3 , 3 ), activation= 'relu' )) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add (Dropout (Rate = 0,25 )) model.add (Abflachen ()) model.add(Dense( 256 , activation= 'relu' )) model.add (Dropout (Rate = 0,5 )) model.add(Dense( 10 , activation= 'softmax' )) |
Im obigen Code deklarieren wir ein sequentielles Modell und fügen ihm dann mehrere Ebenen hinzu. Die Faltungsschicht, gefolgt von einer Max-Pooling-Schicht und dann einer Dropout-Schicht zur Regularisierung. Später glätten wir die Ausgabe mit dem Flatten-Layer und der letzte Layer ist ein vollständig verbundener dichter Layer mit 10 Knoten.
Als nächstes müssen wir es kompilieren, indem wir die Verlustfunktion, den Optimierer und die Metrik übergeben.
modell.compile( loss= 'categorical_crossentropy' , optimizer= 'adam' , Metriken=[ 'Genauigkeit' ] ) |
Jetzt müssten wir erweiterte Bilder aus den Originalbildern hinzufügen, um den Trainingssatz und die Genauigkeit des Modells zu erhöhen. Wir werden dies mit der ImageDataGenerator-Funktion tun.
aus keras.preprocessing.image import ImageDataGenerator datagen = Bilddatengenerator ( rotation_range= 10 , zoom_range= 0,1 , width_shift_range= 0,1 , height_shift_range = 0,1 ) |
Nachdem das Modell kompiliert und die Bilder erweitert wurden, können wir mit dem Training beginnen. Da wir oben einen Bilddatengenerator verwendet haben, verwenden wir die Methode fit_generator und nicht nur fit.

Epochen = 3 batch_size = 32 history = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epochen=epochen, validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size ) |
Die Ausgabe des Trainingsprozesses sieht wie folgt aus:
3Jetzt ist das Modell trainiert und kann evaluiert werden, indem es mit unsichtbaren Testdaten ausgeführt wird.
Related Read: Deep Learning & neuronale Netze mit Keras
Bevor du gehst
In diesem Tutorial haben wir gesehen, wie gut Keras strukturiert ist und es einfach macht, ein komplexes neuronales Netzwerk aufzubauen. Keras ist jetzt unter Tensorflow 2.x verpackt, was ihm noch mehr Funktionen verleiht. Probieren Sie weitere solcher Beispiele aus und erkunden Sie die Funktionen und Features von Keras.
Wenn Sie mehr über maschinelles Lernen erfahren möchten, sehen Sie sich das PG-Diplom in maschinellem Lernen und KI von IIIT-B & upGrad an, das für Berufstätige konzipiert ist und mehr als 450 Stunden strenge Schulungen, mehr als 30 Fallstudien und Aufgaben bietet, IIIT- B-Alumni-Status, mehr als 5 praktische, praktische Abschlussprojekte und Jobunterstützung bei Top-Unternehmen.