Construyendo una red neuronal convolucional

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Este artículo tiene como objetivo explicar la red neuronal convolucional y cómo compilar CNN con la biblioteca TensorFlow Keras. Este artículo discutirá los siguientes temas.

Primero analicemos la red neuronal convolucional.

Red neuronal convolucional (CNN)

El aprendizaje profundo es un subconjunto muy importante del aprendizaje automático debido a su alto rendimiento en varios dominios. La red neuronal convolucional (CNN) es un poderoso tipo de aprendizaje profundo de procesamiento de imágenes que a menudo se usa en visión por computadora y que comprende un reconocimiento de imagen y video junto con un sistema de recomendación y procesamiento de lenguaje natural (NLP).

CNN utiliza un sistema multicapa que consta de la capa de entrada, la capa de salida y una capa oculta que comprende múltiples capas convolucionales, capas agrupadas, capas completamente conectadas. Discutiremos todas las capas en la siguiente sección del artículo mientras explicamos la construcción de CNN.

Analicemos la construcción de CNN usando la biblioteca de Keras junto con una explicación del funcionamiento de CNN.

Edificio de CNN

Usaremos el Conjunto de datos de imágenes de células de malaria. Este conjunto de datos consta de 27,558 imágenes de muestras de sangre microscópicas. El conjunto de datos consta de 2 carpetas: carpetas: parasitadas y no infectadas. Imágenes de muestra

a) muestra de sangre parasitada

b) Muestra de sangre no infectada

Discutiremos la construcción de CNN junto con CNN trabajando en los siguientes 6 pasos:

Paso 1: importar las bibliotecas necesarias

Paso 2: inicializar CNN y agregar una capa convolucional

Paso 3: operación de agrupación

Paso 4: agregue dos capas convolucionales

Paso 5 – Operación de aplanamiento

Paso 6: capa y capa de salida completamente conectadas

Estos 6 pasos explicarán el funcionamiento de CNN, que se muestra en la siguiente imagen:

55796cnn-9342100

Ahora, analicemos cada paso:

1. Importar bibliotecas necesarias

Por favor, consulte el enlace a continuación para obtener explicaciones detalladas de los módulos de Keras.

https://keras.io/getting_started/

Código Python:

from tensorflow.keras.layers import Input, Lambda, Dense, Flatten,Conv2D
from tensorflow.keras.models import Model
from tensorflow.keras.applications.vgg19 import VGG19
from tensorflow.keras.applications.resnet50 import preprocess_input
from tensorflow.keras.preprocessing import image
from tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img
from tensorflow.keras.models import Sequential
import numpy as np
from glob import glob
import matplotlib.pyplot as plt
from tensorflow.keras.layers import MaxPooling2D

2. Inicializar CNN y agregar una capa convolucional

Código Python:

model=Sequential()

model.add(Conv2D(filters=16,kernel_size=2,padding="same",activation="relu",input_shape=(224,224,3)))

Primero tenemos que iniciar la clase secuencial ya que hay varias capas para construir CNN y todas deben estar en secuencia. Luego agregamos la primera capa convolucional donde necesitamos especificar 5 argumentos. Entonces, analicemos cada argumento y su propósito.

· Filtros

El propósito principal de la convolución es encontrar características en la imagen utilizando un detector de características. Luego, colóquelos en un mapa de características, que conserva las características distintivas de las imágenes.

El detector de características, que se conoce como filtro, también se inicializa aleatoriamente y luego, después de muchas iteraciones, se selecciona el parámetro de matriz de filtro que será el mejor para separar imágenes. Por ejemplo, el ojo, la nariz, etc. de los animales se considerará una característica que se utiliza para clasificar imágenes mediante filtros o detectores de características. Aquí estamos usando 16 funciones.

· Kernel_size

Kernel_size se refiere al tamaño de la matriz del filtro. Aquí estamos usando un tamaño de filtro de 2 * 2.

· Relleno

67425pad-3670102

Analicemos cuál es el problema con CNN y cómo la operación de relleno resolverá el problema.

una. Para una imagen de escala de grises (nxn) y un filtro / núcleo (fxf), las dimensiones de la imagen resultante de una operación de convolución es (n – f + 1) x (n – f + 1).

Entonces, por ejemplo, una imagen de 5 * 7 y un tamaño de núcleo de filtro de 3 * 3, el resultado de salida después de la operación de convolución sería un tamaño de 3 * 5. Por lo tanto, la imagen se encoge cada vez que se realiza la operación convolucional.

B. Los píxeles, ubicados en las esquinas, tienen una contribución muy pequeña en comparación con los píxeles del medio.

Entonces, para mitigar estos problemas, se realiza la operación de relleno. El relleno es un proceso simple de agregar capas con 0 o -1 a las imágenes de entrada para evitar los problemas mencionados anteriormente.

Aquí estamos usando Padding = Same argumentos, que describe que las imágenes de salida tienen las mismas dimensiones que las imágenes de entrada.

· Función de activaciónRelu

94297reluuu-8785187

Dado que las imágenes no son lineales, para aportar no linealidad, la función de activación relu se aplica después de la operación convolucional.

Relu significa función de activación lineal rectificada. La función Relu generará la entrada directamente si es positiva; de lo contrario, generará cero.

· Forma de entrada

Este argumento muestra el tamaño de la imagen: 224 * 224 * 3. Dado que las imágenes en formato RGB son así, la tercera dimensión de la imagen es 3.

3. Operación de agrupación

Código Python:

model.add(MaxPooling2D(pool_size=2))

Necesitamos aplicar la operación de agrupación después de inicializar CNN. La agrupación es una operación de muestreo descendente de la imagen. La capa de agrupación se utiliza para reducir las dimensiones de los mapas de características. Por lo tanto, la capa Pooling reduce la cantidad de parámetros a aprender y reduce el cálculo en la red neuronal.

68836ppppppppppp-9351255

Las operaciones futuras se realizan en entidades resumidas creadas por la capa de agrupación. en lugar de características ubicadas con precisión generadas por la capa de convolución. Esto lleva al modelo más robusto a las variaciones en la orientación de la característica en la imagen.

Hay principalmente 3 tipos de agrupación: –

1. Agrupación máxima

2. Agrupación promedio

3. Agrupación global

4. Agregue dos capas convolucionales

Para agregar dos capas convolucionales más, necesitamos repetir los pasos 2 y 3 con una ligera modificación en el número de filtros.

Código Python:

model.add(Conv2D(filters=32,kernel_size=2,padding="same",activation ="relu"))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=64,kernel_size=2,padding="same",activation="relu"))
model.add(MaxPooling2D(pool_size=2))

Modificamos el 2Dakota del Norte y 3rd capas convolucionales con número de filtro 32 y 64 respectivamente.

5. Operación de aplanamiento

Código Python:

model.add(Flatten())

La operación de aplanamiento es convertir el conjunto de datos en una matriz 1-D para ingresar en la siguiente capa, que es la capa completamente conectada.

36841tttttt-6506254

Después de terminar los 3 pasos, ahora hemos agrupado el mapa de características. Ahora estamos aplanando nuestra salida después de dos pasos en una columna. Porque necesitamos insertar estos datos 1-D en una capa de red neuronal artificial.

6. Capa completamente conectada y capa de salida

La salida de la operación de aplanamiento funciona como entrada para la red neuronal. El objetivo de la red neuronal artificial hace que la red neuronal convolucional sea más avanzada y lo suficientemente capaz de clasificar imágenes.

45580ssssss-7571933

Aquí estamos usando una clase densa de la biblioteca de Keras para crear una capa completamente conectada y una capa de salida.

Código Python:

model.add(Dense(500,activation="relu"))

model.add(Dense(2,activation="softmax"))

La función de activación de softMax se utiliza para construir la capa de salida. Analicemos la función de activación de softmax.

Función de activación Softmax

59812sssssssssss-1488041

Se utiliza como la última función de activación de una red neuronal para llevar la salida de la red neuronal a una distribución de probabilidad sobre las clases de predicción. La salida de Softmax está en probabilidades de cada resultado posible para predecir la clase. La suma de probabilidades debe ser una para todas las clases de predicción posibles.

Ahora, analicemos el entrenamiento y la evaluación de la red neuronal convolucional. Discutiremos esta sección en 3 pasos; –

Paso 1: compila el modelo de CNN

Paso 2: ajuste el modelo en el conjunto de entrenamiento

Paso 3: evaluar el resultado

Paso 1: compilar el modelo de CNN

Línea de código

model.compile (loss = ‘categorical_crossentropy’, optimizer = ‘adam’, metrics =[‘accuracy’])

Aquí estamos usando 3 argumentos: –

· Función de pérdida

Estamos usando el categorical_crossentropy función de pérdida que se utiliza en la tarea de clasificación. Esta pérdida es una muy buena medida de cuán distinguibles son dos distribuciones de probabilidad discretas entre sí.

Por favor, consulte el enlace a continuación para obtener una descripción detallada de los diferentes tipos de función de pérdida:

https://machinelearningmastery.com/how-to-choose-loss-functions-when-training-deep-learning-neural-networks/

· Optimizador

Estamos usando Adam Optimizarr que se utiliza para actualizar los pesos de las redes neuronales y la tasa de aprendizaje. Los optimizadores se utilizan para resolver problemas de optimización minimizando la función.

Por favor, consulte el enlace a continuación para obtener una explicación detallada de los diferentes tipos de optimizador:

https://medium.datadriveninvestor.com/overview-of-different-optimizers-for-neural-networks-e0ed119440c3

· Argumentos de métricas

Aquí, estamos utilizando la precisión como métrica para evaluar el rendimiento del algoritmo de red neuronal convolucional.

Paso 2: ajuste del modelo en el conjunto de entrenamiento

Línea de código:

model.fit_generator(training_set,validation_data=test_set,epochs=50, steps_per_epoch=len(training_set), validation_steps=len(test_set) )

Estamos ajustando el modelo CNN en el conjunto de datos de entrenamiento con 50 iteraciones y cada iteración tiene diferentes pasos para entrenar y evaluar pasos según la duración del conjunto de prueba y entrenamiento.

Paso 3: – Evaluar el resultado

Comparamos la función de precisión y pérdida para el conjunto de datos de entrenamiento y prueba.

Código: Trazado de gráfico de pérdidas

plt.plot(r.history['loss'], label="train loss")
plt.plot(r.history['val_loss'], label="val loss")
plt.legend()
plt.show()
plt.savefig('LossVal_loss')

Producción

84637llllllll-3357681

La pérdida es el castigo por una mala predicción. El objetivo es hacer que la pérdida de validación sea lo más baja posible. Un poco de sobreajuste es casi siempre algo bueno. Todo lo que importa, al final, es: es la pérdida de validación lo más baja posible.

Código: Gráfico de precisión de trazado

plt.plot(r.history['accuracy'], label="train acc")
plt.plot(r.history['val_accuracy'], label="val acc")
plt.legend()
plt.show()
plt.savefig('AccVal_acc')

Producción

28356aaaaaaa-7616326

La precisión es una métrica para evaluar modelos de clasificación. De manera informal, la precisión es la fracción de predicciones que nuestro modelo acertó. Aquí, podemos observar que la precisión se acerca al 90% en la prueba de validación que muestra que un modelo de CNN está funcionando bien en las métricas de precisión.

¡Gracias por leer! ¡Feliz aprendizaje profundo!

Referencias:

1. https://www.superdatascience.com/

2. https://www.youtube.com/watch?v=H-bcnHE6Mes

Sobre mí :

Soy Jitendra Sharma, practicante de ciencia de datos en Nabler, y me dedico a PGDM-Big Data Analytics del Goa Institute of Management. Puedes contactarme a través de LinkedIn y Github.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.