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?
Le problème réside dans le fait que chaque métrique dans Keras
est évaluée de la manière suivante:
batch
, une valeur métrique est évaluée.k
lots est égale à une valeur moyenne de votre métrique sur les lots k
calculés).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.
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
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.