Lors de la formation d'un réseau neuronal sur un échantillon d'apprentissage, deux paramètres clés de l'efficacité d'apprentissage - erreur et précision de la prédiction - sont calculés à la sortie du réseau neuronal. Pour cela, la fonction de perte et la métrique de précision sont utilisées. Ces métriques diffèrent selon la tâche (classification ou segmentation d'image, détection d'objet, régression). Chez Keras, nous pouvons définir notre propre fonction de perte et nos métriques de précision pour notre tâche spécifique. Ces fonctions personnalisées seront discutées dans l'article. Peu importe, s'il vous plaît, sous le chat.
Fonctions de perte personnalisées dans Keras
Par exemple, supposons que nous devons implémenter la fonction d'erreur Mean Average Error (MAE). La fonction de perte MAE personnalisée peut être implémentée comme suit:
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
Nous utilisons ici les fonctions somme, arange, moyenne et abs définies dans Keras.
De la même manière, vous pouvez définir votre métrique de précision. Par exemple, définissez la métrique earth_movers_distance pour comparer deux histogrammes:
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)
Pour utiliser nos métriques mae et earth_movers_distance, nous importons les fonctions correspondantes d'un module distinct et les ajoutons aux paramètres de perte et de métriques lors de la compilation du modèle:
from utils.metrics import mae, earth_movers_distance loss = earth_movers_distance model.compile(optimizer=optimizer, loss=loss, metrics=[mae, "accuracy"])
Chargement d'un modèle Keras avec fonction de perte personnalisée
Lors de la formation d'un modèle dans Keras, vous pouvez enregistrer le poids du modèle dans un fichier h5 pour le chargement ultérieur du modèle formé au stade de la prédiction. Si nous utilisons des fonctions de perte personnalisées et des mesures de qualité, nous pouvons rencontrer un problème. Lorsque nous chargeons les poids formés à partir du fichier h5 pour le modèle à l'aide de la méthode load_weights, nous pouvons obtenir l'erreur suivante:
ValueError: Unknown loss function:earth_movers_distance
Il s'agit d'un bogue célèbre dans Keras (
ils ont écrit à ce sujet dans le référentiel officiel sur github).
Pour résoudre le problème, vous devez ajouter nos fonctions de perte personnalisées et nos mesures de qualité à Keras:
from keras.utils.generic_utils import get_custom_objects get_custom_objects().update({"earth_movers_distance": earth_movers_distance, "age_mae": age_mae})
C'est tout pour l'instant. Bonne chance à tous et à bientôt!