Quelle est la différence entre categorical_accuracy
et sparse_categorical_accuracy
à Keras? Il n'y a pas d'indice dans le documentation de ces mesures , et en demandant au Dr Google, je n'ai pas trouvé de réponse à cela non plus.
Le code source peut être trouvé ici :
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
def sparse_categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.max(y_true, axis=-1),
K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
K.floatx())
En regardant le source
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
def sparse_categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.max(y_true, axis=-1),
K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
K.floatx())
categorical_accuracy
vérifie si index de la valeur vraie maximale est égale à index de la valeur prédite maximale.
sparse_categorical_accuracy
vérifie si la valeur vraie maximale est égale à index de la valeur prédite maximale.
De la réponse de Marcin au-dessus du categorical_accuracy
correspond à un one-hot
vecteur codé pour y_true
.
Donc dans categorical_accuracy
vous devez spécifier votre cible (y
) en tant que vecteur codé à une seule étape (par exemple, dans le cas de 3 classes, lorsqu'une vraie classe est une seconde classe, y
devrait être (0, 1, 0)
. Dans sparse_categorical_accuracy
vous n’avez besoin que de fournir un entier de la vraie classe (dans le cas de l’exemple précédent, ce serait 1
comme index des classes est 0
-basé).