En problemas de clasificación en los que hay muchísimos clases a clasificar , se puede usar otra métrica llamada Top-N Accuracy. Veamos en que consiste.
El problema de clasificación de ImageNet hay 1000 posibles clases a clasificar. En ese caso cuando decimos que un "gato" es un "gato" es que la clase gato tiene la mayor probabilidad. Veamos un ejemplo con 10 objetos.
Clase | Probabilidad |
---|---|
Casa | 0.06 |
Botella | 0,04 |
Farola | 0,15 |
Gato | 0,34 |
Perro | 0,28 |
Niño | 0,04 |
Adulto | 0,02 |
Bicicleta | 0,03 |
Semáforo | 0,001 |
Puente | 0,039 |
Si la imagen es de un gato, en este caso diríamos que ha acertado ya que la probabilidad de ser gato es del 34% y es la mayor de todas. Y con eso calcularíamos el valor de Accuracy
.
Sin embargo veamos este otro ejemplo:
Clase | Probabilidad |
---|---|
Casa | 0.06 |
Botella | 0,04 |
Farola | 0,15 |
Gato | 0,28 |
Perro | 0,34 |
Niño | 0,04 |
Adulto | 0,02 |
Bicicleta | 0,03 |
Semáforo | 0,001 |
Puente | 0,039 |
En este nuevo ejemplo, también le hemos pasado una imagen de una gato pero la probabilidad de ser gato es del 28% mientras que la de ser perro es del 34%. Por ello diríamos que no ha acertado.
Sin embargo usando la métrica de Top-2 Accuracy
, diríamos que ha acertado si el gato está entre las 2 que tiene mayor probabilidad. Y en este caso si que diríamos que ha acertado.
Esta métrica tiene sentido cuando hay muchísimas clases (En ImageNet hay 1000 clases). Y aunque la predicción correcta no sea la mejor al menos está entre las 2 primeras Top-2-Accuracy
.
En el siguiente artículo Image classification with Vision Transformer se ve como se usa la métrica de Top-5-Accuracy
.
en keras se puede usar esta métrica con tf.keras.metrics.SparseTopKCategoricalAccuracy.
Por defecto esta métrica calcula es top-5-Accuracy
.Pero se puede cambiar con el parámetro k
.
model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseTopKCategoricalAccuracy()])
model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseTopKCategoricalAccuracy(k=5, name='top-5-accuracy')])
Más información: