Introducción

En este módulo, nos enfocaremos en la implementación práctica de redes neuronales a través de proyectos. Estos proyectos están diseñados para consolidar los conocimientos adquiridos en los módulos anteriores y proporcionar experiencia práctica en el desarrollo y aplicación de redes neuronales.

Objetivos del Módulo

  1. Aplicar conceptos teóricos: Utilizar los conocimientos teóricos adquiridos sobre redes neuronales y deep learning.
  2. Desarrollar proyectos prácticos: Implementar proyectos que resuelvan problemas reales utilizando redes neuronales.
  3. Evaluar y mejorar modelos: Aprender a evaluar el rendimiento de los modelos y aplicar técnicas para mejorarlos.

Proyecto 1: Clasificación de Imágenes con CNN

Descripción del Proyecto

En este proyecto, desarrollaremos una red neuronal convolucional (CNN) para clasificar imágenes en diferentes categorías. Utilizaremos el conjunto de datos CIFAR-10, que contiene 60,000 imágenes de 10 clases diferentes.

Pasos del Proyecto

  1. Importar Librerías y Conjunto de Datos
  2. Preprocesamiento de Datos
  3. Construcción del Modelo CNN
  4. Entrenamiento del Modelo
  5. Evaluación del Modelo
  6. Mejoras y Ajustes

Código de Ejemplo

1. Importar Librerías y Conjunto de Datos

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

# Cargar el conjunto de datos CIFAR-10
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalizar los datos
train_images, test_images = train_images / 255.0, test_images / 255.0

2. Preprocesamiento de Datos

# Verificar las dimensiones de los datos
print(f'Train images shape: {train_images.shape}')
print(f'Test images shape: {test_images.shape}')

3. Construcción del Modelo CNN

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
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))

4. Entrenamiento del Modelo

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

5. Evaluación del Modelo

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')

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
print(f'Test accuracy: {test_acc}')

6. Mejoras y Ajustes

  • Ajustar Hiperparámetros: Modificar la arquitectura de la red, el número de capas, el tamaño de los filtros, etc.
  • Aumentar Datos: Utilizar técnicas de aumento de datos para mejorar la generalización del modelo.
  • Regularización: Aplicar técnicas como Dropout para evitar el sobreajuste.

Ejercicio Práctico

Tarea: Implementa una red neuronal convolucional para clasificar imágenes del conjunto de datos MNIST. Utiliza las técnicas aprendidas en este proyecto y evalúa el rendimiento de tu modelo.

Proyecto 2: Predicción de Series Temporales con RNN

Descripción del Proyecto

En este proyecto, desarrollaremos una red neuronal recurrente (RNN) para predecir valores futuros en una serie temporal. Utilizaremos datos de temperatura histórica para predecir la temperatura futura.

Pasos del Proyecto

  1. Importar Librerías y Conjunto de Datos
  2. Preprocesamiento de Datos
  3. Construcción del Modelo RNN
  4. Entrenamiento del Modelo
  5. Evaluación del Modelo
  6. Mejoras y Ajustes

Código de Ejemplo

1. Importar Librerías y Conjunto de Datos

import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers
import matplotlib.pyplot as plt

# Cargar el conjunto de datos de temperatura
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/daily-min-temperatures.csv'
data = pd.read_csv(url, parse_dates=['Date'], index_col='Date')

2. Preprocesamiento de Datos

# Normalizar los datos
data = (data - data.mean()) / data.std()

# Crear secuencias de datos
def create_sequences(data, seq_length):
    xs, ys = [], []
    for i in range(len(data)-seq_length):
        x = data.iloc[i:(i+seq_length)].values
        y = data.iloc[i+seq_length].values
        xs.append(x)
        ys.append(y)
    return np.array(xs), np.array(ys)

seq_length = 30
X, y = create_sequences(data, seq_length)

# Dividir en conjuntos de entrenamiento y prueba
split = int(0.8 * len(X))
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]

3. Construcción del Modelo RNN

model = tf.keras.Sequential()
model.add(layers.SimpleRNN(50, activation='relu', input_shape=(seq_length, 1)))
model.add(layers.Dense(1))

model.compile(optimizer='adam', loss='mse')

4. Entrenamiento del Modelo

history = model.fit(X_train, y_train, epochs=20, validation_data=(X_test, y_test))

5. Evaluación del Modelo

plt.plot(history.history['loss'], label='loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend(loc='upper right')

# Predicciones
predictions = model.predict(X_test)
plt.figure(figsize=(10,6))
plt.plot(y_test, label='True Values')
plt.plot(predictions, label='Predictions')
plt.legend()
plt.show()

6. Mejoras y Ajustes

  • Ajustar Hiperparámetros: Modificar el número de unidades en la capa RNN, el número de capas, etc.
  • Regularización: Aplicar técnicas como Dropout para evitar el sobreajuste.
  • Aumentar Datos: Utilizar más datos históricos para mejorar la precisión del modelo.

Ejercicio Práctico

Tarea: Implementa una red neuronal recurrente para predecir la demanda de energía eléctrica utilizando un conjunto de datos de series temporales. Evalúa el rendimiento de tu modelo y realiza ajustes para mejorarlo.

Conclusión

En este módulo, hemos desarrollado proyectos prácticos utilizando redes neuronales convolucionales y recurrentes. Estos proyectos te han proporcionado una experiencia práctica en la implementación y evaluación de modelos de redes neuronales. Continúa practicando con diferentes conjuntos de datos y ajustando tus modelos para mejorar tus habilidades en el desarrollo de redes neuronales.


Resumen del Módulo:

  • Implementamos una CNN para la clasificación de imágenes.
  • Desarrollamos una RNN para la predicción de series temporales.
  • Aprendimos a evaluar y mejorar nuestros modelos.

Próximos Pasos:

  • Explora más proyectos y conjuntos de datos.
  • Experimenta con diferentes arquitecturas y técnicas de mejora.
  • Aplica lo aprendido en problemas del mundo real.
© Copyright 2024. Todos los derechos reservados