[Resumen completo] Función de evaluación de métricas en el método model.compile

Un resumen de la función de evaluación de métricas en el método model.compile

Introducción al problema

  Verá que en el proceso de hacer experimentos, a menudo encontramos que necesitamos escribir un parámetro en el proceso de Model.compile, como: metrics = ['precisión'], entonces generalmente hay pocos artículos o comentarios de código en este momento. Se mencionará la razón o la importancia de esta selección de parámetros, especialmente el autor era un novato en la etapa inicial. Al principio, hice varios experimentos de redes neuronales de dos clases. Incluso pensé que mientras siguiera escribiendo métricas = ['precisión'] Qué error se informará. Pero esta idea es realmente errónea y absurda, este parámetro en realidad tiene diferentes opciones y funciones cuando se enfrenta a diferentes conjuntos de datos y problemas.

Simplemente explique la función de mérito

  En primer lugar, el significado de este parámetro es definir la función de evaluación. ¿Qué es la función de evaluación? Los estudiantes que han ejecutado el modelo deben saber que al imprimir los resultados, verán el acc y la pérdida de cada época. Los acc y val_acc están definidos por Se obtiene la función de evaluación En resumen, la elección de la función de evaluación determina directamente la expresión de precisión que se obtiene.

Tipos de funciones de evaluación (ejemplos razonables para ayudar a la comprensión)

  Por lo tanto, el tipo de función de evaluación que elija utilizar para las diferentes preguntas determinará la puntuación del conjunto de entrenamiento final, que sigue siendo muy importante, y en el proceso de ajuste, a algunos amigos no les gusta ver la pérdida, pero les gusta ver la puntuación del conjunto de validación. val_acc Entonces también necesita comprender la clasificación de la función de evaluación.

  De hecho, Keras define 6 precisiones diferentes para nosotros. La más utilizada es la precisión que acabo de dar. Ahora, demos un ejemplo más preciso:

  La precisión de la etiqueta real y la predicción del modelo son escalares. Si la secuencia de la etiqueta real es [1, 1, 3, 0, 2, 5] y la secuencia de predicción es [1, 2 , 3, 1 , 2, 5], puede ver Cuando hay cuatro aciertos, [precisión] = 4/6 = 0,6667.

  Otra función de evaluación común es binary_accuracy, que es adecuada para el procesamiento de problemas de clasificación binaria. Primero, el conjunto de muestra debe tener una secuencia de etiqueta real, como [0, 1, 1, 0], y el modelo la predice como una secuencia de probabilidad, como [0.6, 0.7, 0.6, 0.9], pero ahora solo tenemos una secuencia de probabilidad, ¿cómo deberíamos compararla con la secuencia de etiqueta? , La función de evaluación tiene un parámetro de umbral, el valor predeterminado del parámetro es 0.5. En la secuencia de predicción, el umbral de probabilidad> se establece en 1 y el umbral de probabilidad <= se establece en 0. Por lo tanto, la predicción del modelo se convertirá de [0.3, 0.7, 0.6, 0.9] a [0, 1, 1, 1 ], y luego el primer método de cálculo de precisión (presione 3/4, entonces precisión = 3/4 = 0.7500) .

  Cuando se enfrenta a un problema de clasificación múltiple o una tarea de etiquetas múltiples, la función de evaluación generalmente puede usar dos funciones categórica_actitud y esparcida_categoría_actitud.

  El primero es categórica_accuracy. Primero, el valor verdadero y el valor predicho son ambos un vector de un solo valor. La estrategia de esta función de evaluación es comparar si el valor del índice del elemento más grande en los dos vectores es consistente. Tenga en cuenta que aquí solo se compara un valor, es decir, el más grande. Índice de valor, que es adecuado para tareas de una sola etiqueta de clases múltiples, pero no adecuado para tareas de etiquetas múltiples. Por ejemplo, es como si el valor verdadero fuera [0, 0, 3 , 1] y el valor predicho fuera [0,2, 0,1, 0,9 , 0,5], la predicción se considera precisa.

  El valor verdadero en sparse_categorical_accuracy ya es un índice de subíndice, y el valor predicho sigue siendo un vector. Compare si el valor en la secuencia de predicción correspondiente al valor del subíndice del valor verdadero es el mayor en toda la secuencia, si lo es, se considera exacto. . Por ejemplo, el valor verdadero es 2 (tenga en cuenta que el subíndice comienza desde 0), la secuencia de predicción es [0.1, 0.38, 0.79 , 0.5] y el resultado de la evaluación se considera exacto.

  Dos funciones evaluadas a continuación para tener una buena comprensión de ambas, la idea central es en realidad: El índice de elemento de secuencia predicho de k superior puede contener el valor verdadero de las funciones de puntuación de índice de secuencia máxima . Esta oración es muy abstracta después de escucharla, por lo que no importa si damos ejemplos lentamente.

  Primero observe top_k_categorical_accuracy, que es equivalente a agregar top_k a categórica_accuracy, que ya no es una comparación de subíndice de secuencia única. Categorical_accuracy requiere que la puntuación prevista de la muestra en la categoría de valor real sea el valor máximo de las puntuaciones previstas en todas las categorías antes de que se considere un par predicho. El top_k_categorical_accuracy solo requiere puntajes pronosticados de muestra en el valor verdadero clasificado en la categoría superior de sus puntajes pronosticados en todas las categorías k nombre en la línea .

  Dé un ejemplo detallado: Por ejemplo, hay 5 muestras y sus valores verdaderos son [[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 1, 0], [ 1, 0, 0]], la secuencia de predicción es [[0.8, 0.2, 0.1], [0.3, 0.6, 0.1], [0.5, 0.4, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1 ]], según el conocimiento previo podemos calcular su categórica_accuracy = 40%, pero si la función de evaluación que eliges es top_k_categorical_accuracy, la respuesta es completamente diferente. Se puede decir que top_k tiene una restricción más relajada, porque equivale a permitir solo el valor máximo Necesita clasificarse entre los primeros k incluso si la predicción es correcta. Por supuesto, esto también significa que la precisión de la predicción está estrechamente relacionada con el valor de k. Por ejemplo, en el ejemplo anterior, si el valor de k> = 3, top_k_categorical_accuracy es 100%, porque hay 3 categorías en cada vector, y el valor máximo debe estar dentro de las 3 principales, lo que significa que es 100% exacto. Por lo tanto, tiene sentido establecer el valor de k para que sea menor que la longitud del elemento vectorial 3. Por ejemplo, si establecemos k = 2, entonces top_k_ precision = 75%. El método de cálculo específico es: 1) Primero, convierta la secuencia de valor verdadero a una forma no única, es decir, [1, 2, 1, 1, 0] (es decir, tome el índice de subíndice del valor máximo para formar un nuevo vector) 2) Calcule la predicción La etiqueta del valor de top_k, por ejemplo, cuando k = 2, la secuencia de valores predichos se puede transformar en = [[0, 1], [0, 1], [0, 1], [0, 1], [0, 2] ] (Es decir, encuentre el índice de subíndice correspondiente a los dos primeros valores más grandes en la secuencia de predicción) 3) Calcule la tasa de precisión según si la etiqueta verdadera de cada muestra está dentro del top_k de la etiqueta predicha. Tome las 5 muestras anteriores como ejemplo, 1 En [0, 1], 2 no está en [0, 1], 1 está en [0, 1], 1 está en [0, 1], 0 está en [0, 2], se predice un total de 5 muestras 4, entonces top_k_categorical_accuracy = 80% cuando k = 2. Tenga en cuenta que el valor predeterminado de k en Keras es 5 durante el uso, por lo que si usa el valor predeterminado al llamar, debe asegurarse de que el número de clasificaciones>

  sparse_top_k_categorical_accuracy y top_k_categorical_accurac tienen la misma idea, excepto que el verdadero valor de sparse_top_k no está en forma onehot. (Será útil comprender la diferencia entre las dos funciones de puntuación en la clasificación más en este momento)

  Suponga que dadas 4 muestras, la secuencia de valor real es [2, 1, 2, 2] y la secuencia de predicción es [[0.2, 0.5, 0.15], [0.5, 0.3, 0.1], [0.3, 0.7, 0.2], [0,9, 0,05, 0,4]]. La tasa de aciertos de sparse_top_k_categorical_accuracy debe calcularse de acuerdo con el siguiente método: Primero, suponga que se selecciona k = 2, luego la secuencia de predicción se convierte primero en [[0, 1], [0, 1], [0, 1], [0, 2]], Podemos comprobar uno por uno con el método de ahora, 2 no está en [0, 1], 1 está en [0, 1], 2 no está en [0, 1] y 2 está en [0, 2]. Así que 4 muestras dan 2 y la tasa de aciertos es del 50%.

  De hecho, puede encontrar que cuando establece k en 1 en los dos métodos top_k, los métodos top_k_categorical_accuracy y sparse_top_k_categorical_accuracy degenerarán en los dos primeros métodos categórico_accuracy y sparse_categorical_accuracy debido al pequeño valor de k.

Resumen de escenarios de uso

  De acuerdo con los principios que acabamos de presentar, debe tener una buena comprensión de las 6 funciones de evaluación diferentes. De acuerdo con las características de las diferentes funciones de evaluación, aquí se presenta un resumen. Por supuesto, vale la pena mencionar que hay muchos usos de la métrica de precisión en keras. Puede elegir la métrica de precisión adecuada de acuerdo con su situación real. Lo que estamos discutiendo aquí son solo algunos de los métodos más comunes.

  1) Si la etiqueta de valor real y el valor predicho son valores de índice específicos (como la secuencia de valor real = [1, 1, 1], y_pred = [0, 1, 1]), la función de evaluación de precisión se puede utilizar directamente para cumplir con los requisitos. Parte de la situación. (Ese es un escenario de aplicación muy simple, hay una etiqueta de información de clasificación clara en el conjunto de datos)

  2) Si la etiqueta del valor verdadero es un valor de índice específico, y el valor predicho tiene la forma de un vector, y el problema es de varias clases (como el valor verdadero = [1, 1, 1], la secuencia predicha = [[0.2, 0.3, 0.5], [0.45, 0.2, 0.35], [0, 0.24, 0.78]]), use la función de evaluación sparse_categorical_accuracy para resolver el problema.

  3) Si la etiqueta del valor verdadero está en forma de un solo caliente y el valor predicho está en forma vectorial (por ejemplo, valor verdadero = [[0, 1, 0], [0, 0, 1], [1, 0, 0]], predicción Valor = [[0.52, 0.33, 0.15], [0.9, 0.1, 0], [0, 0.4, 0.6]]), use la función de evaluación categórica_accuracy.

  En la actualidad, debido a los limitados experimentos realizados, la comprensión se basa solo en un nivel relativamente superficial. El objetivo principal de este artículo es ayudar a todos a comprender los principios de cada función de evaluación. Espero que pueda ayudar. Por supuesto, el autor también está aprendiendo de los hombros de los gigantes. Para resumir el uso de este artículo, consulte los blogs de tres hermanos mayores:

  https://blog.csdn.net/qq_36588760/article/details/105689736

  https://blog.csdn.net/weixin_44866160/article/details/106437277

  https://blog.csdn.net/qq_20011607/article/details/89213908

       El aprendizaje es interminable, rinda homenaje a los predecesores, espero que todos trabajen juntos duro.

Supongo que te gusta

Origin blog.csdn.net/qq_39381654/article/details/108747701
Recomendado
Clasificación