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.json
Datei und geben Sie einen anderen Backend-Namen an, z. B. theano
oder CNTK
. Alternativ können Sie das konfigurierte Back-End überschreiben, indem Sie die Umgebungsvariable KERAS_BACKEND
entweder 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 Sequential
Modell und die Model
Klasse, die mit der funktionalen API verwendet wird.
Keras Sequentielle Modelle
Das Sequential
Modell 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 Sequential
Modell definiert werden:
Keras importierenaus 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, Denseaus 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 Dense
Ebenen 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 Layer
Objekt 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.datasets
Klasse 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.