web-dev-qa-db-fra.com

Quelle est la différence entre Keras model.evaluate () et model.predict ()?

J'ai utilisé la segmentation biomédicale d'images Keras pour segmenter les neurones du cerveau. J'ai utilisé model.evaluate() cela m'a donné le coefficient de dés: 0,916. Cependant, lorsque j'ai utilisé model.predict(), puis parcouru les images prédites en calculant le coefficient de dés, le coefficient de dés est de 0,82. Pourquoi ces deux valeurs sont-elles différentes?

11
Saeed Alahmari

Le problème réside dans le fait que chaque métrique dans Keras est évaluée de la manière suivante:

  1. Pour chaque batch, une valeur métrique est évaluée.
  2. Une valeur actuelle de perte (après k lots est égale à une valeur moyenne de votre métrique sur les lots k calculés).
  3. Le résultat final est obtenu en moyenne de toutes les pertes calculées pour tous les lots.

La plupart des métriques les plus populaires (comme mse, categorical_crossentropy, mae), etc. - en tant que moyenne de la valeur de perte de chaque exemple - ont une propriété qui finit par une telle évaluation avec un résultat correct. Mais dans le cas du coefficient de dés - une moyenne de sa valeur sur tous les lots n'est pas égale à la valeur réelle calculée sur un ensemble de données entier et comme model.evaluate() utilise un tel mode de calcul - c'est la cause directe de votre problème.

9
Marcin Możejko

Le model.evaluate la fonction prédit la sortie pour l'entrée donnée, puis calcule la fonction de métrique spécifiée dans le model.compile et basé sur y_true et y_pred et renvoie la valeur métrique calculée en sortie.

Le model.predict renvoie simplement le y_pred

Donc, si vous utilisez model.predict puis calculez vous-même les métriques, la valeur de métrique calculée devrait se révéler être la même que model.evaluate

Par exemple, on utiliserait model.predict au lieu de model.evaluate dans l'évaluation d'un modèle basé sur RNN/LSTM où la sortie doit être alimentée en entrée au pas de temps suivant

8
javac

La fonction keras.evaluate() vous donnera la valeur de perte pour chaque lot. La fonction keras.predict() vous donnera les prévisions réelles pour tous les échantillons d'un lot, pour tous les lots. Ainsi, même si vous utilisez les mêmes données, les différences seront présentes car la valeur d'une fonction de perte sera presque toujours différente des valeurs prévues. Ce sont deux choses différentes.

6