Evaluando el desempeño de tus modelos de Deep Learning


Muchas de las decisiones tomadas cuando diseñas y configuras un modelo de Deep Learning son resueltas de manera empírica mediante prueba y error y después evaluando el modelo con datos reales.

Debido a lo anterior es importante que tengas una manera robusta de evaluar el desempeño de tu modelo en Keras. En esta sección aprenderás a:

  • Evaluar un modelo en Keras utilizando un dataset de verificación automático.
  • Evaluar un modelo en Keras utilizando un dataset de verificación manual.
  • Evaluar un modelo en Keras utilizando validación k-fold cross.

Durante el diseño de tu red neuronal deberas de tomar multiples decisiones, muchas de estas decisiones pueden ser resueltas utilizando arquitecturas conocidas, o utilizando heurística. La mejor técnica al final es diseñar experimentos pequeños y evaluarlos utilizado datos reales. Esto también incluye decisiones de bajo nivel como: función de perdida, optimización y el número de epochs. Deep Learning normalmente involucra grandes datasets, por consiguiente necesitas una metodología que te ayude a comparar el desempeño entre diferentes configuraciones.

Separación de datos

La gran cantidad de datos y la complejidad de los modelos requieren tiempos de entrenamiento muy largos. Como tal, es típico separar los datos en:

  • Datos de entrenamiento y prueba o entrenamiento
  • Datos de validación.

Keras proporciona dos formas de evaluar los algoritmos de Deep Learning:

  1. Use un conjunto de datos de verificación automática.
  2. Use un conjunto de datos de verificación manual.

Verificación automática

Keras puede separar tus datos de entrenamiento en 2 partes, entrenamiento y el dataset de verificación. Utiliza el argumento validation_split dentro de la función fit(), utiliza un porcentaje razonable. Un valor sugerido podría ser 0.2 o 0.33 para un 20% o 33% de tu training data que seria retenido para validación. El ejemplo siguiente demuestra el uso de la configuración automática en el dataset de los indias de Pima.

Verificación manual

Keras te permite definir manualmente el dataset que deseas utilizar para entrenamiento, y el dataset para verificación. En este ejemplo utilizaremos la función train_test_split() de Python scikit-learn que nos permite separar nuestros datos en entrenamiento y verificación. Vamos a utilizar 67% para entrenamiento y el resto 33% para verificación. El dataset de validación se puede especificar a la función fit() en Keras por el argumento de datos de validación. Se necesita una tupla de los conjuntos de datos de entrada y salida.

Verificación utilizando k-fold cross

El estándar para la evaluación del modelo de aprendizaje automático es la validación k-fold cross. Este método proporciona una estimación robusta del rendimiento de un modelo para realizar predicciones. Lo hace dividiendo el conjunto de datos de entrenamiento en k subconjuntos y alterna los modelos de entrenamiento en todos los subconjuntos, excepto uno que se mantiene, y evaluando el rendimiento del modelo en el conjunto de datos de validación retenido. El proceso se repite hasta que todos los subconjuntos tengan la oportunidad de ser el conjunto de validación extendido. La medida de rendimiento luego se promedia en todos los modelos que se crean.

La validación cruzada no se usa generalmente para evaluar modelos de Deep Learning debido al mayor gasto computacional. Por ejemplo, la validación cruzada de k veces se usa a menudo con 5 o 10 folds. Como tal, se deben construir y evaluar 5 o 10 modelos, lo que aumenta en gran medida el tiempo de evaluación de un modelo. Sin embargo, cuando el problema es lo suficientemente pequeño o si tiene recursos informáticos suficientes, la validación cruzada k-fold puede darle una estimación menos sesgada del rendimiento de su modelo.
En el siguiente ejemplo, utilizamos la útil clase StratifiedKFold de scikit-learn para dividir el conjunto de datos de entrenamiento en 10 folds. Los folds están estratificados, lo que significa que el algoritmo intenta equilibrar el número de instancias de cada clase en cada fold. El ejemplo crea y evalúa 10 modelos utilizando las 10 divisiones de los datos y recopila todos los puntajes. La salida detallada de cada época se desactiva al pasar verbose=0 a las funciones fit() y evaluate() en el modelo. El rendimiento se imprime para cada modelo y se almacena. La media y la desviación estándar del rendimiento del modelo se imprimen al final de la ejecución para proporcionar una estimación robusta de la precisión del modelo.

Observa que se tuvo que recrear el modelo en cada ciclo y después entrenar y evaluar los datos. En el siguiente post te enseñare a utilizar Keras de manera nativa con scikit-learn.

Source: Deep Learning on Medium