web-dev-qa-db-fra.com

Keras - Différence entre categorical_accuracy et sparse_categorical_accuracy

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())
30
reindeer

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.

28
Matti Lyra

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é).

45
Marcin Możejko