So ändern Sie die Lernrate in TensorFlow

Eine Open-Source-Softwarebibliothek für künstliche Intelligenz und maschinelles Lernen heißt TensorFlow. Obwohl sie auf viele Aufgaben angewendet werden kann, stehen das Training und die Inferenz tiefer neuronaler Netzwerke im Mittelpunkt.

Das Google Brain Team, die Abteilung für künstliche Intelligenz-Forschung des Unternehmens, hat TensorFlow entwickelt. Seit seiner ersten Veröffentlichung im Jahr 2015 hat es sich zu einer der am weitesten verbreiteten maschinellen Lernbibliotheken weltweit entwickelt.

Python, C++ und Java sind nur einige der Programmiersprachen, über die TensorFlow verfügbar ist. Darüber hinaus ist es kompatibel mit verschiedenen Betriebssystemen, einschließlich Linux, macOS, Windows, Android und iOS.

TensorFlow ist ein leistungsfähiges Werkzeug für maschinelles Lernen und künstliche Intelligenz. Es bietet viele Funktionen und ist einfach zu bedienen. Wer sich für maschinelles Lernen interessiert, kann bei TensorFlow einen guten Startpunkt finden.

TensorFlow ist eine flexible Bibliothek, die auf verschiedene Arten von Aufgaben angewendet werden kann, wie z.B.:

  • Bildklassifikation
  • Natürliche Sprachverarbeitung
  • Spracherkennung
  • Empfehlungssysteme
  • Robotik
  • Medizinische Bildgebung
  • Finanzprognosen

Die Lernrate in TensorFlow ist ein Hyperparameter, der regelt, wie häufig die Gewichte des Modells während des Trainings geändert werden. Die beste Zahl variiert je nach den Besonderheiten des zu lösenden Problems, der Architektur des Modells und der Größe des Datensatzes. Sie wird oft als kleiner positiver Wert gewählt, wie z.B. 0,001 oder 0,01, aber das ist nicht immer der Fall.

Wie man die Lernrate von TensorFlow ändert

Man kann die Lernrate in TensorFlow auf verschiedene Weisen und Strategien ändern. Hier sind drei gängige Ansätze:

Manuelle Lernraten-Zuweisung

Indem man manuell einen neuen Wert in die Lernratenvariable eingibt, kann die Lernrate auf die einfachste Weise geändert werden. Dieser Ansatz legt die Lernrate als TensorFlow-Variable oder Python-Variable fest, und ihr Wert wird während des Trainings aktualisiert. Zum Beispiel:

Python

 

import tensorflow as tf

# Definieren Sie die Lernratenvariable
learning_rate = tf.Variable(0.001, trainable=False)

# Während des Trainings die Lernrate bei Bedarf aktualisieren
# Zum Beispiel eine neue Lernrate von 0,0001 setzen
tf.keras.backend.set_value(learning_rate, 0.0001)

Der obige Code erklärt, wie man manuell einen neuen Wert in die Lernratenvariable von TensorFlow eingibt, um die Lernrate zu ändern. Die Schritte sind wie folgt aufgeführt:

Variable für die Lernrate definieren:

Python

 

learning_rate = tf.Variable(0.001, trainable=False)

Diese Zeile erstellt eine TensorFlow-Variable namens learning_rate und initialisiert sie mit einem Anfangswert von 0,001. Der Parameter trainable=False stellt sicher, dass die Lernratenvariable während des Trainings nicht aktualisiert wird.

Lernrate bei Bedarf aktualisieren:

Python

 

tf.keras.backend.set_value(learning_rate, 0.0001)

In diesem Beispiel wird die Funktion set_value aus tf.keras.backend verwendet, um den Wert der Lernrate zu aktualisieren. Das erste Argument ist die zu aktualisierende Variable (learning_rate), und das zweite Argument ist der neue Wert der Lernrate (0.0001 in diesem Fall).

Sie können steuern, wann und wie sich die Lernrate während des Trainings ändert, indem Sie die Lernratenvariable manuell aktualisieren. Sie können mit unterschiedlichen Einstellungen experimentieren, die Lernrate basierend auf bestimmten Umständen ändern oder sogar einen eigenen Lernratenplan erstellen.

Bei dieser Methode haben Sie vollständige Kontrolle über die Lernrate, müssen sie jedoch manuell nach Ihren Bedürfnissen anpassen.

Lernratenpläne

Sie können die Lernrate während des Trainings systematisch verändern, indem Sie Lernratenpläne verwenden. Mehrere integrierte Lernratenpläne stehen in TensorFlow zur Verfügung, einschließlich:

tf.keras.optimizers.schedules.ExponentialDecay, tf.keras.optimizers.schedules.PiecewiseConstantDecay oder tf.keras.optimizers.schedules.CosineDecay. Diese Zeitpläne ändern den Lerntempo nach vorher festgelegten Regeln. Zum Beispiel:

Python

 

import tensorflow as tf

# Definieren Sie einen Lernratenplan
learning_rate_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=0.001,
    decay_steps=10000,
    decay_rate=0.96
)

# Erstellen Sie einen Optimierer mit dem Lernratenplan
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_schedule)

Der obige Code-Snippet zeigt, wie der ExponentialDecay Lernratenplan in TensorFlow verwendet wird. Hier ist eine Aufschlüsselung dessen, was jeder Parameter tut:

  • initial_learning_rate: Die anfängliche Lernrate zu Beginn des Trainings.
  • decay_steps: Die Anzahl der Schritte, nach denen die Lernrate abnehmen wird.
  • decay_rate: Das Verhältnis, mit dem die Lernrate abnehmen wird. Zum Beispiel, wenn decay_rate auf 0.96 gesetzt ist, wird die Lernrate für jedes decay_steps Schritt mit 0.96 multipliziert.

Um einen Optimierer mit dem Lernratenplan zu erstellen, würden Sie das learning_rate_schedule Objekt als learning_rate Parameter an den Optimierer übergeben. In Ihrem Code verwenden Sie den Adam Optimierer, aber Sie können diesen Lernratenplan auch mit anderen Optimierern verwenden.

Durch die Verwendung des ExponentialDecay Lernratenplans wird die Lernrate im Laufe der Zeit allmählich verringert, was dem Modell ermöglicht, während des Trainings effektiver zu konvergieren. Passen Sie die Werte von initial_learning_rate, decay_steps und decay_rate entsprechend Ihren spezifischen Anforderungen und den Eigenschaften Ihrer Trainingsdaten an.

Diese Methode beseitigt die Notwendigkeit für manuelles Eingreifen, indem sie die Lernrate automatisch basierend auf dem definierten Zeitplan anpasst.

Callbacks

TensorFlow bietet auch ein Callback-Mechanismus, der es Ihnen ermöglicht, die Lernrate dynamisch basierend auf bestimmten Bedingungen zu ändern. Zum Beispiel können Sie das tf.keras.callbacks.LearningRateScheduler Callback verwenden, um einen benutzerdefinierten Lernratenplan zu definieren oder das tf.keras.callbacks.ReduceLROnPlateau Callback, um die Lernrate zu reduzieren, wenn die Validierungsverluste stagnieren. Hier ist ein Beispiel:

Python

 

import tensorflow as tf

# Definieren Sie einen Callback, um die Lernrate dynamisch zu ändern
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.1,
    patience=5,
    min_lr=0.0001
)

# Übergeben Sie während des Modelltrainings den Callback an die fit()-Funktion
model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

Der obige Code-Snippet demonstriert, wie der ReduceLROnPlateau Callback verwendet wird, um die Lernrate während des Modelltrainings dynamisch zu ändern. Hier ist eine Aufschlüsselung, was jeder Parameter tut:

  • monitor: Die zu überwachende Metrik. In diesem Fall ist sie auf val_loss,‘ gesetzt, was bedeutet, dass der Callback die Validierungsverluste überwacht.
  • factor: Der Faktor, der zu einer Verringerung der Lernrate führt. Wenn die bereitgestellte Bedingung erfüllt ist, zum Beispiel, wenn der Faktor auf 0,1 gesetzt ist, wird die Lernrate mit 0,1 multipliziert.
  • patience: Die Anzahl der Epochen ohne Verbesserung, nach denen die Lernrate reduziert wird. Wenn die Validierungsverluste für die Anzahl der Epochen von patience nicht verbessert werden, wird die Lernrate verringert.
  • min_lr: Der Mindestwert, auf den die Lernrate reduziert werden kann. Sobald die Lernrate diesen Mindestwert erreicht hat, wird sie nicht weiter verringert.

Um diesen Callback zu verwenden, übergeben Sie ihn als Parameter an die fit() Funktion beim Trainieren Ihres Modells. Stellen Sie sicher, dass Sie x_train, y_train, x_val und y_val durch Ihre tatsächlichen Trainings- und Validierungsdaten ersetzen.

Python

 

model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

Während des Trainings überwacht der ReduceLROnPlateauCallback den Validierungsverlust und reduziert, falls sich dieser über die Anzahl der patience Epochen nicht verbessert, den Lernrate um den festgelegten Faktor. Dies ermöglicht eine adaptive Anpassung der Lernrate basierend auf der Leistung des Modells während des Trainings.

Mit Callbacks erhalten Sie zusätzliche Freiheit, die Lernrate in Reaktion auf bestimmte Umstände oder Ereignisse während des Trainings zu modifizieren.

Dies sind einige typische Möglichkeiten, die Lernrate von TensorFlow zu modifizieren. Die verwendete Methode hängt von den Anforderungen und den Anwendungsfällen ab, die Sie haben.

Zusammenfassung

Die beste Lernratenplanung Ihres Modells hängt von den Daten und der Modellarchitektur ab. Sie können mit verschiedenen Planungen experimentieren, um diejenige zu finden, die für Ihr Modell am besten funktioniert.

Source:
https://dzone.com/articles/how-to-change-the-learning-rate-of-tensorflow