Was ist Keras? Die Deep Neural Network API erklärt

Während tiefe neuronale Netze der letzte Schrei sind, war die Komplexität der wichtigsten Frameworks ein Hindernis für deren Verwendung für Entwickler, die neu im maschinellen Lernen sind. Es gab mehrere Vorschläge für verbesserte und vereinfachte APIs auf hoher Ebene zum Erstellen neuronaler Netzwerkmodelle, die alle aus der Ferne ähnlich aussehen, bei näherer Betrachtung jedoch Unterschiede aufweisen.

Keras ist eine der führenden High-Level-APIs für neuronale Netze. Es ist in Python geschrieben und unterstützt mehrere Back-End-Berechnungsmodule für neuronale Netzwerke.

Keras und TensorFlow

Angesichts der Tatsache, dass das TensorFlow-Projekt Keras als High-Level-API für die kommende TensorFlow 2.0-Version übernommen hat, scheint Keras ein Gewinner zu sein, wenn nicht unbedingt der Gewinner. In diesem Artikel werden wir die Prinzipien und die Implementierung von Keras untersuchen, um zu verstehen, warum dies eine Verbesserung gegenüber Deep-Learning-APIs auf niedriger Ebene darstellt.

Selbst in TensorFlow 1.12 verwendet das offizielle Tutorial Erste Schritte mit TensorFlow die in TensorFlow eingebettete Keras-API auf hoher Ebene, tf.keras . Im Gegensatz dazu erfordert die TensorFlow Core-API die Arbeit mit TensorFlow-Berechnungsgraphen, Tensoren, Operationen und Sitzungen, von denen einige schwer zu verstehen sein können, wenn Sie gerade erst mit TensorFlow arbeiten. Die Verwendung der Low-Level-TensorFlow-Core-API bietet einige Vorteile, vor allem beim Debuggen. Glücklicherweise können Sie die High-Level- und Low-Level-TensorFlow-APIs nach Bedarf mischen.

Keras Prinzipien

Keras wurde entwickelt, um benutzerfreundlich, modular, einfach zu erweitern und mit Python zu arbeiten. Die API wurde „für Menschen und nicht für Maschinen entwickelt“ und folgt „Best Practices zur Reduzierung der kognitiven Belastung“.

Neuronale Schichten, Kostenfunktionen, Optimierer, Initialisierungsschemata, Aktivierungsfunktionen und Regularisierungsschemata sind eigenständige Module, die Sie kombinieren können, um neue Modelle zu erstellen. Neue Module lassen sich einfach als neue Klassen und Funktionen hinzufügen. Modelle werden im Python-Code definiert, nicht in separaten Modellkonfigurationsdateien.

Warum Keras?

Die Hauptgründe für die Verwendung von Keras liegen in seinen Leitprinzipien, vor allem in der Benutzerfreundlichkeit. Keras ist nicht nur einfach zu erlernen und Modelle zu erstellen, sondern bietet auch die Vorteile einer breiten Akzeptanz, Unterstützung für eine Vielzahl von Optionen für die Produktionsbereitstellung und Integration in mindestens fünf Back-End-Engines (TensorFlow, CNTK, Theano, MXNet und PlaidML). und starke Unterstützung für mehrere GPUs und verteiltes Training. Außerdem wird Keras von Google, Microsoft, Amazon, Apple, Nvidia, Uber und anderen unterstützt.

Keras Backends

Keras selbst führt keine eigenen Operationen auf niedriger Ebene durch, wie z. B. Tensorprodukte und Windungen. Dafür ist ein Back-End-Motor erforderlich. Obwohl Keras mehrere Back-End-Engines unterstützt, ist sein primäres (und standardmäßiges) Back-End TensorFlow und sein primärer Unterstützer Google. Die Keras-API wird in TensorFlow as geliefert tf.keras, das, wie bereits erwähnt, ab TensorFlow 2.0 zur primären TensorFlow-API wird.

Um Backends zu ändern, bearbeiten Sie einfach Ihre $HOME/.keras/keras.jsonDatei und geben Sie einen anderen Backend-Namen an, z. B. theanooder CNTK. Alternativ können Sie das konfigurierte Back-End überschreiben, indem Sie die Umgebungsvariable KERAS_BACKENDentweder in Ihrer Shell oder in Ihrem Python-Code mithilfe der os.environ["KERAS_BACKEND"]Eigenschaft definieren.

Keras-Modelle

Das Modell ist die Kerndatenstruktur von Keras. In Keras stehen zwei Hauptmodelltypen zur Verfügung: das SequentialModell und die ModelKlasse, die mit der funktionalen API verwendet wird.

Keras Sequentielle Modelle

Das SequentialModell ist ein linearer Stapel von Schichten, und die Schichten können sehr einfach beschrieben werden. Hier ist ein Beispiel aus der Keras-Dokumentation, mit model.add()der zwei dichte Ebenen in einem SequentialModell definiert werden:

Keras importieren

aus keras.models importieren Sequential

aus keras.layers importieren Dense

#Erstellen Sie ein sequentielles Modell mit dichten Ebenen mit der Methode add

#Dense implementiert die Operation:

# output = Aktivierung (Punkt (Eingabe, Kernel) + Bias)

#Einheiten sind die Dimensionalität des Ausgaberaums für die Ebene.

#, was der Anzahl der versteckten Einheiten entspricht

#Aktivierungs- und Verlustfunktionen können durch Zeichenfolgen oder Klassen angegeben werden

model.add (dicht (Einheiten = 10, Aktivierung = "softmax"))

#Die Kompilierungsmethode konfiguriert den Lernprozess des Modells

              Optimierer = "sgd",

              Metriken = ['Genauigkeit'])

#Die Anpassungsmethode führt das Training in Stapeln durch

# x_train und y_train sind Numpy-Arrays - genau wie in der Scikit-Learn-API.

#Die Bewertungsmethode berechnet die Verluste und Metriken

# für das trainierte Modell

#Die Vorhersagemethode wendet das trainierte Modell auf Eingaben an

#, um Ausgaben zu generieren

classes = model.predict (x_test, batch_size = 128)

Die Kommentare im obigen Code sind lesenswert. Es ist auch erwähnenswert, wie wenig Cruft im eigentlichen Code enthalten ist, verglichen mit beispielsweise den TensorFlow-APIs auf niedriger Ebene. Jede Schichtdefinition erfordert eine Codezeile, die Kompilierung (Lernprozessdefinition) eine Codezeile und das Anpassen (Training), Auswerten (Berechnen der Verluste und Metriken) und Vorhersagen der Ergebnisse des trainierten Modells jeweils eine Codezeile .

Keras funktionale API

Das Keras Sequential-Modell ist einfach, aber in der Modelltopologie begrenzt. Die Keras-Funktions-API ist nützlich zum Erstellen komplexer Modelle, z. B. Multi-Input / Multi-Output-Modelle, gerichtete azyklische Diagramme (DAGs) und Modelle mit gemeinsam genutzten Ebenen.

Die funktionale API verwendet dieselben Ebenen wie das sequentielle Modell, bietet jedoch mehr Flexibilität beim Zusammenstellen. In der funktionalen API definieren Sie zuerst die Ebenen und erstellen dann das Modell, kompilieren es und passen es an (trainieren). Auswertung und Vorhersage sind im Wesentlichen die gleichen wie in einem sequentiellen Modell, wurden also im folgenden Beispielcode weggelassen.

aus keras.layers importieren Input, Dense

aus keras.models Modell importieren

# Dies gibt einen Tensor zurück

# Eine Layer-Instanz kann auf einem Tensor aufgerufen werden und gibt einen Tensor zurück

x = dicht (64, Aktivierung = "relu") (x)

Vorhersagen = dicht (10, Aktivierung = "softmax") (x)

# Dadurch wird ein Modell erstellt, das Folgendes enthält

# die Eingabeebene und drei dichte Ebenen

model.compile (optimizer = 'rmsprop',

              loss = "kategoriale_kreuzentropie",

              Metriken = ['Genauigkeit'])

model.fit (Daten, Labels)  # beginnt mit dem Training

Keras-Schichten

In den vorherigen Beispielen haben wir nur DenseEbenen verwendet. Keras bietet eine große Auswahl an vordefinierten Ebenentypen und unterstützt auch das Schreiben eigener Ebenen.

Zu den Kernschichten gehören Dense(Punktprodukt plus Bias), Activation(Übertragungsfunktion oder Neuronenform), Dropout(bei jedem Trainingsupdate zufällig einen Bruchteil der Eingabeeinheiten auf 0 setzen, um eine Überanpassung zu vermeiden), Lambda(einen beliebigen Ausdruck als LayerObjekt umschließen) und mehrere andere . Faltungsschichten (die Verwendung eines Filters zum Erstellen einer Feature-Map) laufen von 1D bis 3D und umfassen die gängigsten Varianten, z. B. Zuschneiden und transponierte Faltungsschichten für jede Dimension. Die 2D-Faltung, die von der Funktionalität des visuellen Kortex inspiriert wurde, wird üblicherweise zur Bilderkennung verwendet.

Pooling-Ebenen (Downscaling) reichen von 1D bis 3D und enthalten die gängigsten Varianten, z. B. maximales und durchschnittliches Pooling. Lokal verbundene Schichten wirken wie Faltungsschichten, außer dass die Gewichte nicht geteilt werden. Wiederkehrende Schichten umfassen einfache (vollständig verbundene Wiederholung), Gated, LSTM und andere; Diese sind unter anderem für die Sprachverarbeitung nützlich. Rauschschichten helfen, eine Überanpassung zu vermeiden.

Keras-Datensätze

Keras liefert über die keras.datasetsKlasse sieben der gängigen Deep-Learning-Beispieldatensätze . Dazu gehören kleine Farbbilder von cifar10 und cifar100, IMDB-Filmkritiken, Reuters-Newswire-Themen, handgeschriebene MNIST-Ziffern, MNIST-Modebilder und Immobilienpreise in Boston.

Keras-Anwendungen und Beispiele

Keras bietet auch zehn bekannte Modelle an, die als Keras-Anwendungen bezeichnet werden und für ImageNet vorab trainiert wurden: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Sie können diese verwenden, um die Klassifizierung von Bildern vorherzusagen, Features daraus zu extrahieren und die Modelle für eine andere Gruppe von Klassen zu optimieren.

Die Feinabstimmung vorhandener Modelle ist übrigens eine gute Möglichkeit, das Training zu beschleunigen. Sie können beispielsweise nach Belieben Ebenen hinzufügen, die Basisebenen einfrieren, um die neuen Ebenen zu trainieren, und dann einige der Basisebenen freigeben, um das Training zu optimieren. Sie können eine Ebene mit durch Einfrieren einfrieren layer.trainable = False.

Das Keras-Beispiel-Repository enthält mehr als 40 Beispielmodelle. Sie umfassen Visionsmodelle, Text und Sequenzen sowie generative Modelle.

Keras bereitstellen

Keras-Modelle können auf einer Vielzahl von Plattformen bereitgestellt werden, möglicherweise mehr als jedes andere Deep-Learning-Framework. Dazu gehört iOS über CoreML (von Apple unterstützt). Android über die TensorFlow Android-Laufzeit; in einem Browser über Keras.js und WebDNN; in Google Cloud über TensorFlow-Serving; in einem Python-Webapp-Backend; auf der JVM über DL4J-Modellimport; und auf Raspberry Pi.

Um mit Keras zu beginnen, lesen Sie die Dokumentation, überprüfen Sie das Code-Repository, installieren Sie TensorFlow (oder eine andere Backend-Engine) und Keras und probieren Sie das Tutorial Erste Schritte für das Keras Sequential-Modell aus. Von dort aus können Sie zu anderen Tutorials übergehen und schließlich die Keras-Beispiele erkunden.