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:
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
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ón – Relu
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.
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.
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.
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
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:
· 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:
· 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
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
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.