¿Qué es la “métrica” ​​en Keras?

Aún no está claro qué metrics son (como se indica en el código a continuación). ¿Qué están evaluando exactamente? ¿Por qué necesitamos definirlos en el model ? ¿Por qué podemos tener múltiples métricas en un modelo? Y lo que es más importante, ¿cuál es la mecánica detrás de todo esto? Cualquier referencia científica también es apreciada.

 model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['mae', 'acc']) 

Por lo tanto, para comprender qué son las metrics , es bueno comenzar desde la comprensión de qué es una función de loss . Las redes neuronales se entrenan principalmente usando métodos de gradiente mediante un proceso iterativo de disminución de una función de loss . Una loss está diseñada para tener dos propiedades cruciales: cuanto menos valor tiene, mejor se ajusta su modelo a sus datos y debería ser diferenciable. Entonces, sabiendo esto, podríamos definir completamente qué es una metric : es una función que, dados los valores predichos y los valores reales de los ejemplos, le proporciona una medida escalar de la adecuación de su modelo a los datos que tiene. Entonces, como puede ver, una función de loss es métrica, pero lo contrario no siempre es válido. Para entender estas diferencias, veamos los ejemplos más comunes de uso de metrics :

  1. Mida el rendimiento de su red utilizando funciones no diferenciables: por ejemplo, la precisión no es diferenciable (ni siquiera continua), por lo que no puede optimizar directamente su red. Sin embargo, puede usarlo para elegir el modelo con la mejor precisión.

  2. Obtenga valores de diferentes funciones de pérdida cuando su pérdida final sea una combinación de algunas de ellas: Supongamos que su pérdida tiene un término de regularización que mide cómo sus pesos difieren de 0 y un término que mide la aptitud de su modelo. En este caso, podría usar las metrics para tener un registro separado de cómo cambia la forma física de sus modelos a lo largo de las épocas.

  3. Realice un seguimiento de una medida con respecto a la cual no desea optimizar directamente su modelo: asummos que está resolviendo un problema de regresión multidimensional en el que está más preocupado por mse pero al mismo tiempo está interesado en cómo un cosine-distance de tu solución está cambiando en el tiempo. Entonces, es lo mejor para usar metrics .

Espero que la explicación presentada anteriormente haga evidente para qué son las métricas y por qué podría usar múltiples métricas en un modelo. Así que ahora, digamos algunas palabras sobre la mecánica de su uso en keras . Hay dos formas de computarlos mientras se entrena:

  1. Uso de metrics definidas durante la comstackción : esto es lo que pidió directamente. En este caso, keras está definiendo un tensor separado para cada métrica que definió para calcularla durante el entrenamiento. Por lo general, esto hace que el cálculo sea más rápido, pero keras.backend costo de una comstackción adicional y el hecho de que las métricas deben definirse en términos de funciones keras.backend .

  2. Usando keras.callback : lo que es bueno es que puedas usar Callbacks para calcular tus métricas. Como cada callback tiene un atributo de model predeterminado, puede calcular una variedad de métricas usando el modelo model.predict o los parámetros del modelo durante la capacitación. Además, hace posible calcularlo no solo por época sino también por lotes o por entrenamiento. Esto conlleva el costo de cálculos más lentos y una lógica más complicada, ya que necesita definir métricas por su cuenta.

Aquí puede encontrar una lista de métricas disponibles, así como un ejemplo de cómo puede definir su propia.

Como en keras se describe la página de métricas :

Una métrica es una función que se utiliza para juzgar el rendimiento de su modelo

Las métricas se utilizan con frecuencia con la interrupción temprana de la callback para finalizar la capacitación y evitar el sobreajuste.

Referencia: Keras Metrics Documentation.

Como se indica en la página de documentación de las keras metrics de keras metrics , una metric evalúa el rendimiento de su modelo. El argumento de las metrics en el método de compile contiene la lista de métricas que el modelo debe evaluar durante sus fases de capacitación y prueba. Métricas como:

  • binary_accuracy

  • categorical_accuracy

  • sparse_categorical_accuracy

  • top_k_categorical_accuracy and

  • sparse_top_k_categorical_accuracy

son las funciones métricas disponibles que se suministran en el parámetro de metrics cuando se comstack el modelo.

Las funciones métricas también son personalizables. Cuando se deben evaluar varias métricas, se pasa en forma de un dictionary o una list .

Un recurso importante que debe consultar para profundizar en las métricas se puede encontrar aquí

Desde el punto de vista de la implementación, las pérdidas y las métricas son en realidad funciones idénticas en Keras:

 Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow.keras as Keras >>> print(Keras.losses.mean_squared_error == Keras.metrics.mean_squared_error) True >>> print(Keras.losses.poisson == Keras.metrics.poisson) True