Verwenden benutzerdefinierter Verlustfunktionen und Lernen von Qualitätsmetriken in Keras

Beim Training eines neuronalen Netzwerks auf einem Trainingssatz werden zwei Schlüsselparameter der Lerneffizienz - Fehler und Vorhersagegenauigkeit - am Ausgang des neuronalen Netzwerks berechnet. Hierzu werden die Verlustfunktion und die Genauigkeitsmetrik verwendet. Diese Metriken unterscheiden sich je nach Aufgabe (Klassifizierung oder Bildsegmentierung, Objekterkennung, Regression). Bei Keras können wir unsere eigenen Verlustfunktionen und Genauigkeitsmetriken für unsere spezifische Aufgabe definieren. Solche benutzerdefinierten Funktionen werden im Artikel erläutert. Wen kümmert es bitte unter der Katze.

Benutzerdefinierte Verlustfunktionen in Keras


Angenommen, wir müssen die MAE-Fehlerfunktion (Mean Average Error) implementieren. Die benutzerdefinierte MAE-Verlustfunktion kann wie folgt implementiert werden:

from keras import backend as K def mae(y_true, y_pred): true_value = K.sum(y_true * K.arange(0, 100, dtype="float32"), axis=-1) pred_value = K.sum(y_pred * K.arange(0, 100, dtype="float32"), axis=-1) mae = K.mean(K.abs(true_value - pred_value)) return mae 

Hier verwenden wir die in Keras definierten Funktionen sum, arange, mean und abs.

Auf die gleiche Weise können Sie Ihre Genauigkeitsmetrik definieren. Definieren Sie beispielsweise die Metrik earth_movers_distance, um zwei Histogramme zu vergleichen:

 from keras import backend as K def earth_movers_distance(y_true, y_pred): cdf_true = K.cumsum(y_true, axis=-1) cdf_pred = K.cumsum(y_pred, axis=-1) emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1)) return K.mean(emd) 

Um unsere Metriken mae und earth_movers_distance zu verwenden, importieren wir die entsprechenden Funktionen aus einem separaten Modul und fügen sie beim Kompilieren des Modells den Verlust- und Metrikparametern hinzu:

 from utils.metrics import mae, earth_movers_distance loss = earth_movers_distance model.compile(optimizer=optimizer, loss=loss, metrics=[mae, "accuracy"]) 

Laden eines Keras-Modells mit benutzerdefinierter Verlustfunktion


Wenn Sie ein Modell in Keras trainieren, können Sie die Modellgewichte in einer h5-Datei speichern, um das trainierte Modell in der Vorhersagephase anschließend zu laden. Wenn wir benutzerdefinierte Verlustfunktionen und Qualitätsmetriken verwenden, kann ein Problem auftreten. Wenn wir die trainierten Gewichte mit der load_weights-Methode aus der h5-Datei für das Modell laden, kann der folgende Fehler auftreten:

 ValueError: Unknown loss function:earth_movers_distance 

Dies ist ein berühmter Fehler in Keras ( sie haben darüber im offiziellen Repository auf Github geschrieben).

Um das Problem zu lösen, müssen Sie Keras unsere benutzerdefinierten Verlustfunktionen und Qualitätsmetriken hinzufügen:

 from keras.utils.generic_utils import get_custom_objects get_custom_objects().update({"earth_movers_distance": earth_movers_distance, "age_mae": age_mae}) 

Das ist alles für jetzt. Viel Glück an alle und bis bald!

Source: https://habr.com/ru/post/de467363/


All Articles