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'])
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
:
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.
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.
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:
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.
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.
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
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
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