Saltar al contenido

Desarrollar una red neuronal para la autenticación de billetes

16 de marzo de 2021

Puede resultar complicado desarrollar un modelo predictivo de red neuronal para un nuevo conjunto de datos.

Un enfoque es inspeccionar primero el conjunto de datos y desarrollar ideas sobre qué modelos podrían funcionar, luego explorar la dinámica de aprendizaje de modelos simples en el conjunto de datos y, finalmente, desarrollar y ajustar un modelo para el conjunto de datos con un arnés de prueba robusto.

Este proceso se puede utilizar para desarrollar modelos de redes neuronales eficaces para problemas de modelado predictivo de clasificación y regresión.

En este tutorial, descubrirá cómo desarrollar un modelo de red neuronal de perceptrón multicapa para el conjunto de datos de clasificación binaria de billetes.

Después de completar este tutorial, sabrá:

  • Cómo cargar y resumir el conjunto de datos de billetes y usar los resultados para sugerir preparaciones de datos y configuraciones de modelos a utilizar.
  • Cómo explorar la dinámica de aprendizaje de modelos MLP simples en el conjunto de datos.
  • Cómo desarrollar estimaciones sólidas del rendimiento del modelo, ajustar el rendimiento del modelo y hacer predicciones sobre nuevos datos.

Empecemos.

Desarrollar una red neuronal para la autenticación de billetes

Desarrollar una red neuronal para la autenticación de billetes
Foto de Lenny K Photography, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en 4 partes; son:

  1. Conjunto de datos de clasificación de billetes
  2. Dinámica de aprendizaje de redes neuronales
  3. Evaluación robusta del modelo
  4. Modelo final y hacer predicciones

Conjunto de datos de clasificación de billetes

El primer paso es definir y explorar el conjunto de datos.

Trabajaremos con el «Billete de banco”Conjunto de datos de clasificación binaria estándar.

El conjunto de datos de billetes implica predecir si un billete determinado es auténtico dadas una serie de medidas tomadas de una fotografía.

El conjunto de datos contiene 1372 filas con 5 variables numéricas. Es un problema de clasificación con dos clases (clasificación binaria).

A continuación se proporciona una lista de las cinco variables del conjunto de datos.

  • varianza de la imagen transformada Wavelet (continua).
  • sesgo de la imagen transformada Wavelet (continua).
  • curtosis de la imagen transformada Wavelet (continua).
  • entropía de la imagen (continua).
  • clase (entero).

A continuación se muestra una muestra de las primeras 5 filas del conjunto de datos

Puede obtener más información sobre el conjunto de datos aquí:

Podemos cargar el conjunto de datos como un DataFrame de pandas directamente desde la URL; por ejemplo:

Al ejecutar el ejemplo, se carga el conjunto de datos directamente desde la URL e informa la forma del conjunto de datos.

En este caso, podemos confirmar que el conjunto de datos tiene 5 variables (4 entradas y una salida) y que el conjunto de datos tiene 1372 filas de datos.

No se trata de muchas filas de datos para una red neuronal y sugiere que una red pequeña, quizás con regularización, sería apropiada.

También sugiere que el uso de la validación cruzada de k-fold sería una buena idea dado que dará una estimación más confiable del rendimiento del modelo que una división de tren / prueba y porque un solo modelo encajará en segundos en lugar de horas o días con el conjuntos de datos más grandes.

A continuación, podemos obtener más información sobre el conjunto de datos observando estadísticas resumidas y una gráfica de los datos.

Ejecutar el ejemplo primero carga los datos antes y luego imprime estadísticas de resumen para cada variable.

Podemos ver que los valores varían con diferentes medias y desviaciones estándar, quizás se requiera alguna normalización o estandarización antes del modelado.

Luego se crea un gráfico de histograma para cada variable.

Podemos ver que quizás las dos primeras variables tienen una distribución similar a la de Gauss y las dos siguientes variables de entrada pueden tener una distribución gaussiana sesgada o una distribución exponencial.

Es posible que tengamos algún beneficio al usar una transformada de potencia en cada variable para hacer que la distribución de probabilidad sea menos sesgada, lo que probablemente mejorará el rendimiento del modelo.

Histogramas del conjunto de datos de clasificación de billetes

Histogramas del conjunto de datos de clasificación de billetes

Ahora que estamos familiarizados con el conjunto de datos, exploremos cómo podríamos desarrollar un modelo de red neuronal.

Dinámica de aprendizaje de redes neuronales

Desarrollaremos un modelo de perceptrón multicapa (MLP) para el conjunto de datos utilizando TensorFlow.

No podemos saber qué modelo de arquitectura de hiperparámetros de aprendizaje sería bueno o mejor para este conjunto de datos, por lo que debemos experimentar y descubrir qué funciona bien.

Dado que el conjunto de datos es pequeño, un tamaño de lote pequeño probablemente sea una buena idea, p. Ej. 16 o 32 filas. Usar la versión de Adam del descenso de gradiente estocástico es una buena idea al comenzar, ya que adaptará automáticamente la tasa de aprendizaje y funciona bien en la mayoría de los conjuntos de datos.

Recomendado:  Búsqueda aleatoria y búsqueda de cuadrícula para la optimización de funciones

Antes de evaluar los modelos en serio, es una buena idea revisar la dinámica de aprendizaje y ajustar la arquitectura del modelo y la configuración de aprendizaje hasta que tengamos una dinámica de aprendizaje estable, luego buscar sacar el máximo provecho del modelo.

Podemos hacer esto usando una división simple de tren / prueba de los datos y revisar los gráficos de las curvas de aprendizaje. Esto nos ayudará a ver si estamos aprendiendo demasiado o mal; entonces podemos adaptar la configuración en consecuencia.

Primero, debemos asegurarnos de que todas las variables de entrada sean valores de punto flotante y codificar la etiqueta de destino como valores enteros 0 y 1.

A continuación, podemos dividir el conjunto de datos en variables de entrada y salida, luego en conjuntos de prueba y tren 67/33.

Podemos definir un modelo MLP mínimo. En este caso, usaremos una capa oculta con 10 nodos y una capa de salida (elegida arbitrariamente). Usaremos la función de activación de ReLU en la capa oculta y el «él_normal”Inicialización de peso, ya que juntos, son una buena práctica.

La salida del modelo es una activación sigmoidea para la clasificación binaria y minimizaremos la pérdida de entropía cruzada binaria.

Ajustaremos el modelo para 50 épocas de entrenamiento (elegidas arbitrariamente) con un tamaño de lote de 32 porque es un conjunto de datos pequeño.

Estamos ajustando el modelo a datos sin procesar, lo que creemos que podría ser una buena idea, pero es un punto de partida importante.

Al final del entrenamiento, evaluaremos el desempeño del modelo en el conjunto de datos de prueba y reportaremos el desempeño como la precisión de la clasificación.

Finalmente, trazaremos las curvas de aprendizaje de la pérdida de entropía cruzada en el tren y los conjuntos de prueba durante el entrenamiento.

Uniendo todo esto, el ejemplo completo de la evaluación de nuestro primer MLP en el conjunto de datos de billetes se enumera a continuación.

Recomendado:  Inferencia del modelo de transformador

Ejecutar el ejemplo primero ajusta el modelo en el conjunto de datos de entrenamiento, luego informa la precisión de la clasificación en el conjunto de datos de prueba.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el modelo logró una gran o perfecta precisión del 100%. Esto podría sugerir que el problema de la predicción es fácil y / o que las redes neuronales son adecuadas para el problema.

A continuación, se crean los gráficos de línea de la pérdida en el tren y los conjuntos de prueba.

Podemos ver que el modelo parece converger bien y no muestra ningún signo de sobreajuste o desajuste.

Curvas de aprendizaje del perceptrón multicapa simple en un conjunto de datos de billetes

Curvas de aprendizaje del perceptrón multicapa simple en un conjunto de datos de billetes

Lo hicimos increíblemente bien en nuestro primer intento.

Ahora que tenemos una idea de la dinámica de aprendizaje para un modelo MLP simple en el conjunto de datos, podemos considerar el desarrollo de una evaluación más sólida del desempeño del modelo en el conjunto de datos.

Evaluación robusta del modelo

El procedimiento de validación cruzada de k veces puede proporcionar una estimación más confiable del rendimiento de MLP, aunque puede ser muy lento.

Esto se debe a que los modelos k deben ajustarse y evaluarse. Esto no es un problema cuando el tamaño del conjunto de datos es pequeño, como el conjunto de datos de los billetes.

Podemos usar la clase StratifiedKFold y enumerar cada pliegue manualmente, ajustar el modelo, evaluarlo y luego informar la media de las puntuaciones de evaluación al final del procedimiento.

Podemos usar este marco para desarrollar una estimación confiable del rendimiento del modelo MLP con nuestra configuración base, e incluso con una variedad de diferentes preparaciones de datos, arquitecturas de modelos y configuraciones de aprendizaje.

Es importante que primero desarrollemos una comprensión de la dinámica de aprendizaje del modelo en el conjunto de datos en la sección anterior antes de usar la validación cruzada de k-veces para estimar el rendimiento. Si comenzamos a ajustar el modelo directamente, podríamos obtener buenos resultados, pero si no, es posible que no tengamos idea de por qué, p. que el modelo se ajustaba demasiado o no.

Si volvemos a realizar cambios importantes en el modelo, es una buena idea volver atrás y confirmar que el modelo está convergiendo adecuadamente.

El ejemplo completo de este marco para evaluar el modelo MLP base de la sección anterior se enumera a continuación.

La ejecución del ejemplo informa el rendimiento del modelo en cada iteración del procedimiento de evaluación e informa la desviación media y estándar de la precisión de la clasificación al final de la ejecución.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

Recomendado:  32% del crecimiento se originará en APAC para el mercado de análisis de datos | Oportunidades en evolución con Amazon Web Services Inc., International Business Machines Corp. y Microsoft Corp. | Más de 17000 informes de Technavio

En este caso, podemos ver que el modelo MLP logró una precisión media de alrededor del 99,9 por ciento.

Esto confirma nuestra expectativa de que la configuración del modelo base funciona muy bien para este conjunto de datos y, de hecho, el modelo se ajusta bien al problema y quizás el problema sea bastante trivial de resolver.

Esto es sorprendente (para mí) porque hubiera esperado que se requiriera algo de escalado de datos y tal vez una transformación de potencia.

A continuación, veamos cómo podríamos ajustar un modelo final y usarlo para hacer predicciones.

Modelo final y hacer predicciones

Una vez que elegimos una configuración de modelo, podemos entrenar un modelo final con todos los datos disponibles y usarlo para hacer predicciones sobre nuevos datos.

En este caso, usaremos el modelo con abandono y un tamaño de lote pequeño como nuestro modelo final.

Podemos preparar los datos y ajustar el modelo como antes, aunque en todo el conjunto de datos en lugar de en un subconjunto de entrenamiento del conjunto de datos.

We can then use this model to make predictions on new data.

First, we can define a row of new data.

Note: I took this row from the first row of the dataset and the expected label is a ‘0’.

We can then make a prediction.

Then invert the transform on the prediction, so we can use or interpret the result in the correct label (which is just an integer for this dataset).

And in this case, we will simply report the prediction.

Tying this all together, the complete example of fitting a final model for the banknote dataset and using it to make a prediction on new data is listed below.

Running the example fits the model on the entire dataset and makes a prediction for a single row of new data.

Note: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

In this case, we can see that the model predicted a “0” label for the input row.

Further Reading

This section provides more resources on the topic if you are looking to go deeper.

Tutorials

Resumen

In this tutorial, you discovered how to develop a Multilayer Perceptron neural network model for the banknote binary classification dataset.

Specifically, you learned:

  • How to load and summarize the banknote dataset and use the results to suggest data preparations and model configurations to use.
  • How to explore the learning dynamics of simple MLP models on the dataset.
  • How to develop robust estimates of model performance, tune model performance and make predictions on new data.

Do you have any questions?
Ask your questions in the comments below and I will do my best to answer.

Develop Deep Learning Projects with Python!

Deep Learning with Python

What If You Could Develop A Network in Minutes

…with just a few lines of Python

Discover how in my new Ebook:
Deep Learning With Python

It covers end-to-end projects on topics like:
Multilayer Perceptrons, Convolutional Nets y Recurrent Neural Nets, and more…

Finally Bring Deep Learning To
Your Own Projects

Skip the Academics. Just Results.

See What’s Inside