¿Qué son las Redes Neuronales Convolucionales (CNNs)?
Las Redes Neuronales Convolucionales (CNNs) son un tipo de red neuronal especialmente eficaz para tareas de procesamiento de imágenes y reconocimiento de patrones. Las CNNs se inspiran en la organización del cerebro animal, específicamente en la forma en que la corteza visual procesa la información visual.
Características Clave de las CNNs
- Convoluciones: Operaciones matemáticas que permiten a la red extraer características locales de la imagen.
- Capas de Pooling: Reducen la dimensionalidad de los datos, manteniendo las características más importantes.
- Capas Completamente Conectadas: Conectan todas las neuronas de una capa a todas las neuronas de la siguiente capa, similar a las redes neuronales tradicionales.
- Funciones de Activación: Introducen no linealidades en la red, permitiendo que la red aprenda representaciones más complejas.
Arquitectura Básica de una CNN
- Entrada: Imagen de entrada.
- Capas Convolucionales: Aplican filtros para extraer características.
- Capas de Pooling: Reducen la dimensionalidad.
- Capas Completamente Conectadas: Realizan la clasificación final.
Ejemplo Práctico: Construyendo una CNN Simple
Vamos a construir una CNN simple utilizando TensorFlow y Keras para clasificar imágenes del conjunto de datos MNIST (dígitos escritos a mano).
Paso 1: Importar las Bibliotecas Necesarias
import tensorflow as tf from tensorflow.keras import datasets, layers, models import matplotlib.pyplot as plt
Paso 2: Cargar y Preprocesar los Datos
# Cargar el conjunto de datos MNIST (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() # Normalizar las imágenes a valores entre 0 y 1 train_images, test_images = train_images / 255.0, test_images / 255.0 # Redimensionar las imágenes para que tengan un canal adicional (grayscale) train_images = train_images.reshape((train_images.shape[0], 28, 28, 1)) test_images = test_images.reshape((test_images.shape[0], 28, 28, 1))
Paso 3: Definir la Arquitectura de la CNN
model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10, activation='softmax'))
Paso 4: Compilar el Modelo
Paso 5: Entrenar el Modelo
history = model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels))
Paso 6: Evaluar el Modelo
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) print(f'\nTest accuracy: {test_acc}')
Paso 7: Visualizar los Resultados
plt.plot(history.history['accuracy'], label='accuracy') plt.plot(history.history['val_accuracy'], label = 'val_accuracy') plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.ylim([0, 1]) plt.legend(loc='lower right') plt.show()
Ejercicio Práctico
Ejercicio 1: Modificar la Arquitectura de la CNN
Modifica la arquitectura de la CNN para mejorar su precisión. Puedes intentar agregar más capas convolucionales, cambiar el tamaño de los filtros, o ajustar los hiperparámetros.
Solución Sugerida
model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(128, activation='relu')) model.add(layers.Dense(10, activation='softmax')) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels)) test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) print(f'\nTest accuracy: {test_acc}')
Conclusión
En esta lección, hemos introducido las Redes Neuronales Convolucionales (CNNs) y su arquitectura básica. También hemos construido una CNN simple para clasificar imágenes del conjunto de datos MNIST. En el próximo módulo, profundizaremos en la construcción de una CNN más compleja y exploraremos técnicas avanzadas para mejorar su rendimiento.
Curso de TensorFlow
Módulo 1: Introducción a TensorFlow
- ¿Qué es TensorFlow?
- Configuración de TensorFlow
- Conceptos Básicos de TensorFlow
- Hola Mundo en TensorFlow
Módulo 2: Fundamentos de TensorFlow
Módulo 3: Manejo de Datos en TensorFlow
Módulo 4: Construcción de Redes Neuronales
- Introducción a Redes Neuronales
- Creando una Red Neuronal Simple
- Funciones de Activación
- Funciones de Pérdida y Optimizadores
Módulo 5: Redes Neuronales Convolucionales (CNNs)
Módulo 6: Redes Neuronales Recurrentes (RNNs)
- Introducción a RNNs
- Construyendo una RNN
- Memoria a Largo Plazo (LSTM)
- Unidades Recurrentes Gated (GRUs)
Módulo 7: Técnicas Avanzadas de TensorFlow
- Capas y Modelos Personalizados
- TensorFlow Hub
- Aprendizaje por Transferencia
- Ajuste de Hiperparámetros