wake-up-neo.com

Keras - Unterschied zwischen kategorialer Genauigkeit und spärlicher kategorialer Genauigkeit

Was ist der Unterschied zwischen categorical_accuracy und sparse_categorical_accuracy in Keras? Es gibt keinen Hinweis in der Dokumentation für diese Metriken , und als ich Dr. Google fragte, fand ich auch keine Antworten dafür.

Den Quellcode finden Sie hier :

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

Betrachtet man die Quelle

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 prüft, ob der Index des maximalen wahren Werts gleich dem Index des maximalen vorhergesagten Werts ist.

sparse_categorical_accuracy prüft, ob der maximale wahre Wert gleich dem Index des maximalen vorhergesagten Werts ist.

Aus Marcins Antwort über dem categorical_accuracy entspricht einem one-hot codierter Vektor für y_true.

28
Matti Lyra

Also in categorical_accuracy Sie müssen Ihr Ziel (y) als one-hot-codierten Vektor angeben (z. B. bei 3 Klassen, wenn eine echte Klasse die zweite Klasse ist, sollte y(0, 1, 0). Im sparse_categorical_accuracy Sie müssen nur eine Ganzzahl der wahren Klasse angeben (im Fall des vorherigen Beispiels wäre dies 1 als Klassenindizierung ist 0-basierend).

45
Marcin Możejko