
Übersetzung des Übersichtsleitfadens von Tensorflow.org. In diesem Handbuch erhalten Sie die Grundlagen für den Einstieg in Keras. Das Lesen dauert 10 Minuten.
Import tf.keras
tf.keras
ist eine Implementierung der TensorFlow Keras API-Spezifikation. Dies ist eine High-Level-API zum
tf.data
und Trainieren von Modellen, die erstklassige Unterstützung für TensorFlow-spezifische Funktionen wie
eifrige Ausführung ,
tf.data
Pipelines und
Estimators umfasst .
tf.keras
die Verwendung von TensorFlow ohne Einbußen bei Flexibilität und Leistung.
Importieren Sie zunächst
tf.keras
als Teil Ihres TensorFlow-Setups:
from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf from tensorflow import keras
tf.keras
kann jeden Keras-kompatiblen Code ausführen.
tf.keras
jedoch
tf.keras
:
- Die Version von
tf.keras
in der neuesten TensorFlow-Version unterscheidet sich möglicherweise von der neuesten Version von keras
in PyPI. Schauen Sie sich tf.keras.__version__
. - Wenn Sie Modellgewichte speichern, führt
tf.keras
dies standardmäßig im Prüfpunktformat aus. save_format='h5'
Parameter save_format='h5'
, um HDF5 zu verwenden (oder fügen Sie dem .h5
Erweiterung .h5
).
Erstellen Sie ein einfaches Modell
Sequenzielles Modell
In Keras sammeln Sie
Layer zum Erstellen von
Modellen . Ein Modell ist (normalerweise) ein Layerdiagramm. Der gebräuchlichste Modelltyp ist der Ebenenstapel:
tf.keras.Sequential
model.
Wir konstruieren ein einfaches, vollständig verbundenes Netzwerk (d. H. Ein mehrschichtiges Perzeptron):
from tensorflow.keras import layers model = tf.keras.Sequential()
Ebenen anpassen
Viele verschiedene
tf.keras.layers
Layer sind
tf.keras.layers
. Die meisten von ihnen verwenden einen gemeinsamen Argumentkonstruktor:
activation
: Legt die Aktivierungsfunktion für die Ebene fest. Dieser Parameter gibt den Namen der eingebauten Funktion oder des aufgerufenen Objekts an. Der Parameter hat keinen Standardwert.kernel_initializer
und bias_initializer
: Initialisierungsschemata, die Layer-Gewichte erzeugen (Core und Shift). Dieser Parameter kann der Name oder das aufgerufene Objekt sein. Der Standardinitialisierer ist "Glorot uniform"
.kernel_regularizer
und bias_regularizer
: Regularisierungsschemata, die zu Layer-Gewichten (Core und Shift) hinzugefügt wurden, z. B. L1- oder L2-Regularisierung. Standardmäßig ist die Regularisierung nicht festgelegt.
Die folgenden Beispiele für Instanzen der Ebenen `tf.keras.layers.Dense` verwenden Konstruktorargumente:
Schulung und Bewertung
Trainingsaufbau
Konfigurieren Sie nach dem
compile
des Modells den Lernprozess, indem Sie die
compile
aufrufen:
model = tf.keras.Sequential([
tf.keras.Model.compile
akzeptiert drei wichtige Argumente:
optimizer
: Dieses Objekt definiert den Trainingsablauf. tf.keras.optimizers
Optimiererinstanzen aus dem Modul tf.keras.optimizers
, z. B. tf.keras.optimizers.Adam
oder tf.keras.optimizers.SGD
. Wenn Sie nur die Standardoptionen verwenden möchten, können Sie auch Optimierer mit Schlüsselwörtern wie 'adam'
oder 'sgd'
.loss
: Dies ist eine Funktion, die im Lernprozess minimiert wird. Zu den gebräuchlichen Varianten gehören der Standardfehler ( mse
), categorical_crossentropy
und binary_crossentropy
. Verlustfunktionen werden durch den Namen oder die Übergabe des aufgerufenen Objekts aus dem Modul tf.keras.losses
.metrics
: Dient zum Überwachen des Trainings. Dies sind Zeichenfolgenamen oder aufgerufene Objekte aus dem Modul tf.keras.metrics
.run_eagerly=True
Sie außerdem sicher, dass Sie den Parameter run_eagerly=True
an den Compiler übergeben, um sicherzustellen, dass das Modell run_eagerly=True
trainiert und ausgewertet wird
Als Nächstes sehen wir einige Beispiele für die Modellkonfiguration für das Training:
Aus NumPy-Daten lernen
Verwenden Sie für kleinere Datensätze die Speicher-Arrays von NumPy, um das Modell zu trainieren und auszuwerten. Das Modell wird auf Trainingsdaten mit der "Fit" -Methode "trainiert":
import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) model.fit(data, labels, epochs=10, batch_size=32)
tf.keras.Model.fit
hat drei wichtige Argumente:
epochs
: Lernen gliedert sich in * Epochen *. Die Ära ist eine Iteration über alle Eingabedaten (dies erfolgt in kleinen Stapeln).batch_size
: Beim Übertragen von NumPy-Daten zerlegt das Modell die Daten in kleinere Blöcke (Batches) und iteriert während des Trainings über diese Blöcke. Diese Nummer gibt die Größe jedes Datenblocks an. Beachten Sie, dass der letzte Block möglicherweise kleiner ist, wenn die Gesamtzahl der Datensätze nicht durch die Stapelgröße geteilt wird.validation_data
: Beim Prototyping eines Modells möchten Sie dessen Leistung anhand von Validierungsdaten auf einfache Weise verfolgen. Durch Übergeben eines Tupels von Eingabedaten und Bezeichnungen mit diesem Argument kann das Modell die Werte der Verlustfunktion und der Metriken im Ausgabemodus für die Daten anzeigen, die am Ende jeder Ära übertragen werden.
Hier ist ein Beispiel mit
validation_data
:
import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) val_data = np.random.random((100, 32)) val_labels = np.random.random((100, 10)) model.fit(data, labels, epochs=10, batch_size=32, validation_data=(val_data, val_labels))
Schulung mit tf.data-Datensätzen
Verwenden Sie die Datasets-API, um große Datenbanken oder Schulungen auf mehreren Geräten zu skalieren. Übergeben Sie die Instanz von "tf.data.Dataset" an die
fit
Methode:
Da
Dataset
Daten in
batch_size
bereitstellt, ist für diesen Code das Argument
batch_size
nicht erforderlich.
Datensätze können auch verwendet werden, um Folgendes zu überprüfen:
dataset = tf.data.Dataset.from_tensor_slices((data, labels)) dataset = dataset.batch(32) val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels)) val_dataset = val_dataset.batch(32) model.fit(dataset, epochs=10, validation_data=val_dataset)
Einschätzung und Vorhersage
Die
tf.keras.Model.predict
tf.keras.Model.evaluate
und
tf.keras.Model.predict
können die
tf.data.Dataset
NumPy und
tf.data.Dataset
.
So können Sie
die Verluste im Ausgabemodus und die Messdaten für die bereitgestellten Daten
abschätzen :
Und so
können Sie die Ausgabe der letzten Ebene im Ausgabemodus für die bereitgestellten Daten in Form eines NumPy-Arrays
vorhersagen :
Komplexe Modelle erstellen
Die funktionale API
Das
tf.keras.Sequential
Modell ist ein einfacher Ebenenstapel, mit dem Sie sich kein beliebiges Modell vorstellen können. Verwenden Sie die Keras-Funktions-API, um komplexe Modelltopologien zu erstellen, z.
- Modelle mit mehreren Eingängen
- Modelle mit mehreren Ausgängen,
- Modelle mit gemeinsamen Ebenen (dieselbe Ebene wird mehrmals aufgerufen),
- Modelle mit inkonsistenten Datenströmen (z. B. Restbeziehungen).
Das Erstellen eines Modells mit einer funktionalen API funktioniert wie folgt:
- Die Ebeneninstanz ist aufrufbar und gibt einen Tensor zurück.
- Eingabe- und Ausgabetensoren werden verwendet, um die Instanz von
tf.keras.Model
zu bestimmen - Dieses Modell wird genau wie das 'Sequential'-Modell trainiert.
Im folgenden Beispiel wird mithilfe der funktionalen API ein einfaches, vollständig verbundenes Netzwerk erstellt:
inputs = tf.keras.Input(shape=(32,))
Erstellen Sie mit diesen Ein- und Ausgängen eine Instanz des Modells.
model = tf.keras.Model(inputs=inputs, outputs=predictions)
Unterklassen von Modellen
Erstellen Sie ein vollständig anpassbares Modell, indem Sie die Unterklasse
tf.keras.Model
und Ihre eigene direkte Verteilung definieren. Erstellen Sie Ebenen in der Methode
__init__
und legen Sie sie als Attribute der Klasseninstanz fest. Definieren Sie die direkte Weitergabe in der
call
.
Die Unterklassifizierung eines Modells ist besonders nützlich, wenn die Eager-Ausführung aktiviert ist, da Sie die direkte Verteilung zwingend schreiben können.
Hinweis: Wenn Ihr Modell
immer zwingend ausgeführt werden soll, können Sie
dynamic=True
wenn Sie den
super
aufrufen.
Schlüsselpunkt: Verwenden Sie die richtige API, um zu arbeiten. Die Unterklassifizierung eines Modells bietet zwar Flexibilität, Sie müssen jedoch dafür mit einer höheren Komplexität und einem höheren Potenzial für benutzerdefinierte Fehler bezahlen. Wenn möglich, wählen Sie die funktionale API.
Das folgende Beispiel zeigt ein untergeordnetes tf.keras.Model-Modell mit benutzerdefinierter Direktverteilung, die nicht unbedingt erforderlich ist:
class MyModel(tf.keras.Model): def __init__(self, num_classes=10): super(MyModel, self).__init__(name='my_model') self.num_classes = num_classes
Erstellen Sie eine Instanz der neuen Modellklasse:
model = MyModel(num_classes=10)
Benutzerdefinierte Ebenen
Erstellen Sie eine benutzerdefinierte Ebene, indem Sie
tf.keras.layers.Layer
unterklassifizieren und die folgenden Methoden implementieren:
__init__
: __init__
optional die Sublayer an, die in dieser Ebene verwendet werden sollen.- *
build
: Lagengewichte erstellen. Fügen Sie Gewichte mit der Methode add_weight
call
: Direktverteilung definieren.- Optional kann der Layer durch Implementieren der
get_config
Methode und der from_config
Klassenmethode from_config
.
Unten sehen Sie ein Beispiel für eine Benutzerebene, die die Matrix (
matmul
), die der Eingabe zugeführt wird, mit der
matmul
multipliziert:
class MyLayer(layers.Layer): def __init__(self, output_dim, **kwargs): self.output_dim = output_dim super(MyLayer, self).__init__(**kwargs) def build(self, input_shape):
Erstellen Sie ein Modell mit Ihrer benutzerdefinierten Ebene:
model = tf.keras.Sequential([ MyLayer(10), layers.Activation('softmax')])
Kolbeki
Kolbek ist ein Objekt, das auf das Modell übertragen wird, um sein Verhalten während des Trainings anzupassen und zu erweitern. Sie können Ihren eigenen benutzerdefinierten Rückruf schreiben oder die integrierten
tf.keras.callbacks
die
tf.keras.callbacks
umfassen:
tf.keras.callbacks.ModelCheckpoint
: Speichern von Modell-Haltepunkten in regelmäßigen Abständen.
tf.keras.callbacks.LearningRateScheduler
:
tf.keras.callbacks.LearningRateScheduler
dynamisch ändern.
tf.keras.callbacks.EarlyStopping
:
tf.keras.callbacks.EarlyStopping
Trainings, wenn sich das Ergebnis der Validierung nicht mehr verbessert.
tf.keras.callbacks.TensorBoard:
Überwachen des Modellverhaltens mit
Tensorboard
Um
tf.keras.callbacks.Callback
, übergeben Sie es an die Methode
fit
model:
callbacks = [
Speichern und Wiederherstellen
Nur Gewichtswerte speichern
Speichern und Laden von Modellgewichten mit
tf.keras.Model.save_weights
:
model = tf.keras.Sequential([ layers.Dense(64, activation='relu', input_shape=(32,)), layers.Dense(10, activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
Standardmäßig werden Modellgewichte im TensorFlow-Prüfpunktformat gespeichert. Gewichte können auch im Keras HDF5-Format gespeichert werden (Standardwert für die universelle Keras-Implementierung):
Nur Modellkonfiguration speichern
Die Konfiguration des Modells kann gespeichert werden - dies serialisiert die Architektur des Modells ohne Gewichte. Eine gespeicherte Konfiguration kann dasselbe Modell wiederherstellen und initialisieren, auch ohne Code, der das ursprüngliche Modell definiert. Keras unterstützt die Serialisierungsformate JSON und YAML:
import json import pprint pprint.pprint(json.loads(json_string))
Modell aus JSON wiederherstellen (neu initialisieren):
fresh_model = tf.keras.models.model_from_json(json_string)
Um das Modell in YAML zu serialisieren, muss
vor dem Import von TensorFlow `pyyaml` installiert werden:
yaml_string = model.to_yaml() print(yaml_string)
Wiederherstellen eines Modells aus YAML:
fresh_model = tf.keras.models.model_from_yaml(yaml_string)
Hinweis: Modelle mit Unterklassen können nicht serialisiert werden, da ihre Architektur durch Python-Code im Hauptteil der Methode `call` definiert wird.
Speichern des gesamten Modells in einer Datei
Das gesamte Modell kann in einer Datei gespeichert werden, die die Werte der Gewichte, die Konfiguration des Modells und sogar die Konfiguration des Optimierers enthält. Auf diese Weise können Sie einen Modell-Haltepunkt festlegen und später von genau derselben Position aus weiter trainieren, auch ohne Zugriff auf den Quellcode.
# model = tf.keras.Sequential([ layers.Dense(10, activation='softmax', input_shape=(32,)), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(data, labels, batch_size=32, epochs=5) # HDF5 model.save('my_model.h5') # . model = tf.keras.models.load_model('my_model.h5')
Eifrige Ausführung
Eager Execution ist eine zwingende Programmierumgebung, die Operationen sofort ausführt. Dies ist für Keras nicht erforderlich, wird jedoch von
tf.keras
und ist nützlich, um Ihr Programm und das Debuggen zu überprüfen.
Alle Gebäudemodelle der `tf.keras` API sind mit Eiferausführung kompatibel. Obwohl die sequentiellen und funktionalen APIs verwendet werden können, ist eine eifrige Ausführung besonders nützlich, wenn Sie
ein Modell in
Unterklassen unterteilen und
benutzerdefinierte Layer erstellen. Bei diesen APIs müssen Sie die direkte Verteilung in Form von Code schreiben (anstelle der APIs, die Modelle durch Zusammenstellen vorhandener Layer erstellen).
Verteilung
Mehrere GPUs
tf.keras
Modelle können mit
tf.distribute.Strategy
auf mehreren GPUs
tf.distribute.Strategy
. Diese API bietet verteiltes Lernen über mehrere GPUs mit nur geringen oder keinen Änderungen an vorhandenem Code.
Derzeit ist
tf.distribute.MirroredStrategy
einzige unterstützte Verteilungsstrategie.
MirroredStrategy
repliziert Diagramme mit
Synchrones Lernen mit All-Reduce auf einer Maschine. Um `
distribute.Strategy
, verschachteln Sie die Installation, den Entwurf und die Kompilierung des Optimierers des Modells
.scope()
Strategy
.scope()
`und trainieren Sie dann das Modell.
Im folgenden Beispiel wird
tf.keras.Model
mehrere GPUs auf demselben Computer verteilt.
Zunächst definieren wir ein Modell im Bereich einer verteilten Strategie:
strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = tf.keras.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10,))) model.add(layers.Dense(1, activation='sigmoid')) optimizer = tf.keras.optimizers.SGD(0.2) model.compile(loss='binary_crossentropy', optimizer=optimizer) model.summary()
Dann trainieren wir das Modell wie gewohnt an den Daten:
x = np.random.random((1024, 10)) y = np.random.randint(2, size=(1024, 1)) x = tf.cast(x, tf.float32) dataset = tf.data.Dataset.from_tensor_slices((x, y)) dataset = dataset.shuffle(buffer_size=1024).batch(32) model.fit(dataset, epochs=1)
Nach der Überprüfung wird die Übersetzung auch auf Tensorflow.org angezeigt. Wenn Sie an der Übersetzung der Dokumentation der Tensorflow.org-Website ins Russische teilnehmen möchten, wenden Sie sich bitte an eine Person oder einen Kommentar. Korrekturen oder Kommentare sind willkommen.