Red neuronal convolucional y su integración en iOS (parte 1)


Medios de implementación.

Varios algoritmos de aprendizaje automático están integrados en muchos lenguajes de programación de alto nivel. El más popular y de mayor crecimiento es Python.

TensorFlow es una biblioteca de software de aprendizaje automático abierta desarrollada por Google para resolver los problemas de construir y entrenar una red neuronal para encontrar y clasificar imágenes automáticamente, logrando la calidad de la percepción humana. La API principal para trabajar con la biblioteca está implementada para Python.

Keras es una biblioteca abierta de redes neuronales. Es un complemento para los marcos TensorFlow y Theano. Está dirigido al trabajo operativo con redes de aprendizaje profundo, mientras está diseñado para ser compacto, modular y expandible.

La última versión de Python 3.7.2 se selecciona como intérprete. El entorno de desarrollo es PyCharm Community.

Preparación de datos.

En el mundo moderno, para la mayoría de las tareas de inteligencia artificial, no es necesario recopilar el conjunto de datos manualmente, hay muchos recursos donde, después del registro, es posible descargar conjuntos de datos listos para usar. Se seleccionó un conjunto de datos con diez dígitos en lenguaje de señas (Fig. 1).

Figura 1. - Números en lenguaje de señas.

El algoritmo necesitará detectar la presencia de un gesto en la foto y clasificarlo con un número del 0 al 9. Antes de construir la arquitectura de la red neuronal, debe preparar los datos para su entrenamiento. Primero, se descargan los datos del conjunto de datos de dígitos del lenguaje de señas. El primer archivo contiene 2063 imágenes en blanco y negro con números en lenguaje de señas. Las imágenes tienen un tamaño de 64x64 píxeles. El segundo archivo contiene una etiqueta (vector) correspondiente a la imagen.

Los valores de píxeles en las imágenes están normalizados y están en el intervalo (0,1). Puede usarlos inmediatamente para ingresar a la red neuronal, pero el resultado más óptimo se logrará si sigue el procedimiento de estandarización. Después de su ejecución, se cumplirán las reglas para cada matriz de píxeles: el

valor promedio en la matriz es cero.
La dispersión en la matriz es la unidad.

Las fotos se estandarizan y se agregan a una nueva matriz para su combinación posterior con datos anteriores (

Fig.2 ) Fig.2. - El procedimiento para cargar y procesar imágenes.

Arquitectura de redes neuronales.

Network_sign_lang.py: el archivo de proyecto principal en el que se describe la red neuronal. Al comienzo del guión, se describen varias variables globales de la red neuronal (Fig. 3).

Fig. 3. - Opciones globales.

Batch_size: el número de imágenes alimentadas a la red neuronal para cada iteración. Num_classes: el número de clases que predecirá el modelo. Img_size: el tamaño de las imágenes suministradas a la capa de entrada.

La función train_test_split () de la biblioteca Sklearn se importa al proyecto, divide las matrices X e y en la proporción 80:20 en muestras de entrenamiento y prueba, y también mezcla aleatoriamente los datos para que no se ordenen por clase.

Luego se inicializa el modelo (Fig. 4), se agrega la primera capa de Conv2D. Se ingresan imágenes de la matriz Xtrain, se indica la dimensión del espacio de salida - 64, el núcleo de convolución - 4x4, el paso de convolución y la función de activación de la capa ReLU.

Fig.4. - red neuronal

Dado que las redes neuronales suelen utilizar una cantidad mucho mayor de datos de entrenamiento, el modelo construido es propenso a la reentrenamiento. Para evitar esto, se utiliza un método de regularización efectivo, como Dropout. Esta capa excluirá el porcentaje indicado de neuronas aleatorias para que no haya exceso entre las capas. El número 0.5 significará que en cada lote el algoritmo excluirá la mitad de las neuronas aleatorias. La segunda capa principal también es similar a la primera: convolucional. (Conv2D)

La siguiente es la capa de agrupación (MaxPooling2D). Sirve como otro filtro para la salida del modelo. Como cuando se muestran los números horizontal o verticalmente, el significado de la imagen no cambia, la red neuronal debe clasificarlos por igual.

La capa aplanada sirve como un enlace entre los datos obtenidos por el algoritmo y el vector de salida con la predicción. La última capa de la red es la capa densa con función de activación sofmax. Esta función le permite obtener un vector normalizado de probabilidades para cada clase, donde la suma de las probabilidades será igual a uno.

A continuación, debe compilar el modelo creado especificando los siguientes parámetros: métrica, función de pérdida y optimizador. Como medida, se elige la precisión: el porcentaje de ejemplos clasificados correctamente. La función de pérdida es categorical_crossentropy. Algoritmo de optimización - Adam. Antes de comenzar el entrenamiento, se agregan varias devoluciones de llamada. EarlyStopping: deja de aprender la red neuronal cuando su precisión deja de aumentar con las épocas de aprendizaje. ModelCheckpoint: guarda los mejores pesos de modelo en un archivo para su uso posterior.

El entrenamiento de la red neuronal se inicia con el almacenamiento de datos sobre su proceso en la variable histor. Validation_split: toma el diez por ciento de los datos de entrenamiento para la validación, que es otra forma de regularizar.

El tamaño de la muestra de entrenamiento es 1965 ejemplos, la muestra de prueba es 547, y la muestra de validación es 219. Después de completar el proceso de entrenamiento, se construye un gráfico de la dependencia de la precisión obtenida en los datos de entrenamiento y prueba (Fig. 5).

Fig.5. - Programa de entrenamiento.

El gráfico muestra que el modelo se guardó en la 15a era (con la mayor precisión y el menor espacio entre Xtrain y Xtest).

El siguiente paso es cargar las redes neuronales resultantes en otro script para verificar su funcionamiento. Se muestran los valores de las métricas en los datos de prueba (Fig. 6).

Fig.6. - Comprobación del rendimiento del modelo.

Con base en los resultados de las métricas, podemos concluir que los modelos no difieren mucho. Cuanto más bajo es el índice de la función de pérdida, más confiables son las predicciones del algoritmo. La precisión o fidelidad del modelo muestra el porcentaje de fotos clasificadas correctamente, lo que significa que cuanto mayor sea, mejor será la red neuronal. En consecuencia, es más lógico utilizar el primer modelo obtenido como resultado de la interrupción temprana de la educación.

Hablaremos sobre el preprocesamiento de datos y la integración de una red neuronal de cierto formato en una aplicación iOS en la siguiente parte.

All Articles