Construye una CNN en Python con TensorFlow y Keras
Tabla de contenidos:
- Importación de bibliotecas
- Procesamiento de datos de entrenamiento
- Procesamiento de datos de prueba
- Construcción de la CNN
- Compilación de la CNN
- Ajuste del modelo
- Evaluación del rendimiento del modelo
- Mejora del rendimiento del modelo
- Conclusiones
- Recursos adicionales
Importación de bibliotecas
Para comenzar nuestro proyecto de construcción de una red neuronal convolucional, primero debemos importar las bibliotecas necesarias. En este caso, importaremos TensorFlow y el módulo de preprocesamiento de imágenes de la biblioteca Caris.
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
Procesamiento de datos de entrenamiento
En esta sección, nos centraremos en el preprocesamiento de los datos de entrenamiento. Aplicaremos transformaciones a las imágenes del conjunto de entrenamiento para evitar el sobreajuste. Utilizaremos el generador de datos de imágenes de TensorFlow para aplicar técnicas de aumento de imágenes como transvección, rotación, volteo horizontal y zoom. Estas transformaciones ayudarán a aumentar la diversidad de las imágenes de entrenamiento y mejorarán el rendimiento del modelo.
# Paso 1: Definir el generador de datos de imágenes
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
# Paso 2: Generar lotes de imágenes de entrenamiento
training_set = train_datagen.flow_from_directory(
directory='data_set/training_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary'
)
Procesamiento de datos de prueba
En esta sección, realizaremos el preprocesamiento de los datos de prueba. A diferencia de los datos de entrenamiento, no aplicaremos transformaciones a las imágenes de prueba. Solo escalaremos las imágenes dividiendo sus valores de píxel por 255. También crearemos lotes de imágenes de prueba utilizando el generador de datos de imágenes de TensorFlow.
# Paso 1: Definir el generador de datos de imágenes
test_datagen = ImageDataGenerator(rescale=1./255)
# Paso 2: Generar lotes de imágenes de prueba
test_set = test_datagen.flow_from_directory(
directory='data_set/test_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary'
)
Construcción de la CNN
En esta sección, construiremos nuestra red neuronal convolucional (CNN). Utilizaremos la API de Keras de TensorFlow para construir la arquitectura de la CNN. Comenzaremos agregando capas de convolución y agrupación a nuestra red y luego aplanaremos las características. A continuación, agregaremos capas totalmente conectadas y finalmente agregaremos una capa de salida con una función de activación sigmoide.
# Paso 1: Inicializar la CNN
cnn = tf.keras.models.Sequential()
# Paso 2: Agregar capas de convolución y agrupación
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=(64, 64, 3)))
cnn.add(tf.keras.layers.MaxPooling2D(pool_size=2, strides=2))
# Paso 3: Aplanar las características
cnn.add(tf.keras.layers.Flatten())
# Paso 4: Agregar capas totalmente conectadas
cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))
cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))
Compilación de la CNN
En esta sección, compilaremos nuestra CNN especificando la función de pérdida, el algoritmo de optimización y las métricas utilizadas para evaluar el rendimiento del modelo. Utilizaremos la pérdida de entropía cruzada binaria, el algoritmo de optimización Adam y la métrica de precisión.
# Compilar la CNN
cnn.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
Ajuste del modelo
En esta sección, ajustaremos nuestro modelo de CNN utilizando los datos de entrenamiento. Especificaremos el número de épocas y el tamaño del lote y entrenaremos el modelo utilizando el generador de datos de imágenes.
# Ajustar el modelo a los datos de entrenamiento
history = cnn.fit(
x=training_set,
validation_data=test_set,
epochs=25
)
Evaluación del rendimiento del modelo
En esta sección, evaluaremos el rendimiento de nuestro modelo de CNN utilizando los datos de prueba. Calcularemos la precisión y la pérdida del modelo utilizando el método evaluate()
.
# Evaluar el rendimiento del modelo en los datos de prueba
loss, accuracy = cnn.evaluate(test_set)
print('Test Loss:', loss)
print('Test Accuracy:', accuracy)
Mejora del rendimiento del modelo
Si deseamos mejorar el rendimiento de nuestro modelo, podemos experimentar con diferentes arquitecturas de la CNN, ajustar los hiperparámetros de entrenamiento y realizar técnicas como ajuste de aprendizaje y regularización.
Conclusiones
En este proyecto, hemos construido una CNN utilizando TensorFlow y el módulo de preprocesamiento de imágenes de Caris. Aplicamos transformaciones a las imágenes de entrenamiento para evitar el sobreajuste y evaluamos el rendimiento del modelo en los datos de prueba. A través de la experimentación y la mejora continua, podemos lograr resultados aún mejores en futuros proyectos de CNN.
Recursos adicionales