web-dev-qa-db-fra.com

Qu'est-ce que les «métriques» dans Keras?

Il n'est pas encore clair pour moi ce que sont metrics (comme indiqué dans le code ci-dessous). Qu'évaluent-ils exactement? Pourquoi devons-nous les définir dans le model? Pourquoi nous pouvons avoir plusieurs métriques dans un modèle? Et plus important encore, quelle est la mécanique derrière tout cela? Toute référence scientifique est également appréciée.

model.compile(loss='mean_squared_error',
              optimizer='sgd',
              metrics=['mae', 'acc'])
16
DragonKnight

Donc, pour comprendre ce que sont metrics, il est bon de commencer par comprendre ce qu'est une fonction loss. Les réseaux de neurones sont principalement formés à l'aide de méthodes de gradient par un processus itératif de diminution d'une fonction loss. Un loss est conçu pour avoir deux propriétés cruciales - que moins sa valeur est - meilleure est la compatibilité de votre modèle avec vos données et il doit être différenciable. Donc, sachant cela, nous pourrions définir complètement ce qu'est un metric: c'est une fonction qui, compte tenu des valeurs prédites et des valeurs de vérité au sol d'exemples, vous fournit une mesure scalaire de l'adéquation de votre modèle aux données que vous avez. Donc, comme vous pouvez le voir, une fonction loss est métrique mais l'inverse ne tient pas toujours. Pour comprendre ces différences, voyons les exemples les plus courants d'utilisation de metrics:

  1. Mesurez les performances de votre réseau à l'aide de fonctions non différenciables: par ex. la précision n'est pas différenciable (pas même continue), vous ne pouvez donc pas optimiser directement votre réseau avec. à elle. Cependant, vous pouvez l'utiliser pour choisir le modèle avec la meilleure précision.

  2. Obtenez des valeurs de différentes fonctions de perte lorsque votre perte finale est une combinaison de quelques-unes d'entre elles: Supposons que votre perte ait un terme de régularisation qui mesure comment votre les poids diffèrent de 0 et un terme qui mesure l'aptitude de votre modèle. Dans ce cas, vous pouvez utiliser metrics afin d'avoir une piste distincte de la façon dont l'adéquation de vos modèles change à travers les époques.

  3. Suivez une mesure par rapport à laquelle vous ne voulez pas optimiser directement votre modèle: donc - supposons que vous résolvez un problème de régression multidimensionnelle où vous sont principalement préoccupés par mse mais en même temps, vous êtes intéressé par la façon dont un cosine-distance de votre solution évolue dans le temps. Ensuite, il est préférable d'utiliser metrics.

J'espère que l'explication présentée ci-dessus a mis en évidence à quoi servent les mesures et pourquoi vous pouvez utiliser plusieurs mesures dans un même modèle. Alors maintenant - disons quelques mots sur la mécanique de leur utilisation dans keras. Il existe deux façons de les calculer pendant l'entraînement:

  1. Utilisation de metrics défini lors de la compilation : c'est ce que vous avez directement demandé. Dans ce cas, keras définit un tenseur distinct pour chaque métrique que vous avez définie pour le faire calculer pendant l'entraînement. Cela rend généralement le calcul plus rapide, mais cela se fait au détriment de la compilation supplémentaire et du fait que les mesures doivent être définies en termes de keras.backend les fonctions.

  2. Utilisation de keras.callback: qu'est-ce que Nice que vous pourriez utiliser Callbacks pour calculer vos métriques. Étant donné que chaque rappel a un attribut par défaut de model, vous pouvez calculer diverses métriques à l'aide de model.predict ou paramètres du modèle pendant l'entraînement. De plus, il permet de le calculer non seulement par époque mais aussi par lot ou par entraînement. Cela se fait au détriment de calculs plus lents et d'une logique plus compliquée - car vous devez définir vous-même les mesures.

Ici vous pouvez trouver une liste de métriques disponibles ainsi qu'un exemple sur la façon dont vous pouvez définir la vôtre.

25
Marcin Możejko

Comme dans métriques keras page décrite:

Une métrique est une fonction utilisée pour évaluer les performances de votre modèle

Les métriques sont fréquemment utilisées avec un rappel d'arrêt précoce pour mettre fin à la formation et éviter le surapprentissage

4
Ioannis Nasios

Référence: Keras Metrics Documentation

Comme indiqué dans la page de documentation de keras metrics, a metric juge les performances de votre modèle. L'argument metrics dans la méthode compile contient la liste des métriques qui doivent être évaluées par le modèle pendant ses phases de formation et de test. Des mesures telles que:

  • binary_accuracy

  • categorical_accuracy

  • sparse_categorical_accuracy

  • top_k_categorical_accuracy et

  • sparse_top_k_categorical_accuracy

sont les fonctions métriques disponibles qui sont fournies dans le paramètre metrics lors de la compilation du modèle.

Les fonctions métriques sont également personnalisables. Lorsque plusieurs mesures doivent être évaluées, elles sont transmises sous la forme d'un dictionary ou d'un list.

Une ressource importante à consulter pour plonger dans les métriques peut être trouvée ici

2

Du point de vue de l'implémentation, les pertes et les métriques sont en fait des fonctions identiques dans Keras:

Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow.keras as Keras
>>> print(Keras.losses.mean_squared_error == Keras.metrics.mean_squared_error)
True
>>> print(Keras.losses.poisson == Keras.metrics.poisson)
True
1
bers