Redes neuronales con PyTorch paso a paso

Resumen

Las redes neuronales artificiales (RNA) son la base del deep learning y permiten que un modelo aprenda patrones a partir de datos sin reglas explícitas. Aquí verás cómo construir, entrenar y evaluar una RNA en PyTorch aplicada a clasificación binaria, ideal para quienes inician en inteligencia artificial aplicada al deporte.

¿Qué librerías necesitas para construir una red neuronal en PyTorch?

Antes de escribir la primera capa, conviene tener claro qué hace cada herramienta. La combinación de PyTorch y NumPy cubre desde el manejo de tensores hasta la actualización automática de pesos.

  • torch: librería base para tensores y autograd.
  • torch.nn: contiene capas y bloques de construcción de redes.
  • torch.optim: gestiona la actualización de pesos durante el entrenamiento.
  • NumPy: trabaja con arrays en Python y alimenta los datos iniciales.

¿Qué es autograd en PyTorch? Es el motor que calcula gradientes automáticamente durante el backward pass, evitando que tengas que derivar funciones a mano.

¿Cómo se preparan los datos para entrenar una RNA?

El ejemplo parte de un dataset sintético de 100 muestras, cada una con cuatro características y una etiqueta binaria. Primero generas entradas y etiquetas con NumPy y después las conviertes a tensores con torch.from_numpy para que PyTorch las procese [00:48].

Este paso es clave: una red neuronal no entiende arrays de NumPy directamente, necesita tensores que soporten operaciones diferenciables.

¿Cómo se define la arquitectura de la red neuronal?

La red del ejemplo tiene dos capas: una oculta de ocho neuronas y una salida sigmoide para clasificación binaria [01:25]. Se construye con nn.Linear, que define capas totalmente conectadas, y se combinan dos funciones de activación.

¿Qué hacen ReLU y Sigmoid dentro del modelo?

  • ReLU: introduce no linealidad en la capa oculta, permitiendo que la red aprenda patrones complejos.
  • Sigmoid: comprime la salida a un rango entre 0 y 1, perfecto para clasificación binaria.

En el método forward defines el flujo: linear → ReLU → linear → Sigmoid. Ese orden marca cómo viaja la información desde la entrada hasta la predicción.

¿Qué función de pérdida y optimizador usar para clasificación binaria?

La función de pérdida elegida es BCELoss (Binary Cross Entropy), que espera salidas entre 0 y 1, justo lo que entrega la sigmoide [02:05]. Para actualizar los pesos se usa Adam desde torch.optim, que ajusta los parámetros usando los gradientes calculados automáticamente.

¿Por qué Adam y no otro optimizador? Adam combina velocidad de convergencia y estabilidad, adaptando la tasa de aprendizaje por parámetro. Es una opción robusta para empezar sin afinar demasiados hiperparámetros.

¿Cómo es el ciclo de entrenamiento de una red en PyTorch?

El entrenamiento itera por épocas y batches. En cada paso ocurre lo siguiente:

  1. Calcular y_pred con el forward pass.
  2. Comparar la predicción con y_batch mediante la función loss.
  3. Limpiar gradientes previos con zero_grad.
  4. Calcular nuevos gradientes con backward.
  5. Actualizar los pesos con optimizer.step.

Al final de cada época se imprime la pérdida del último batch para monitorear el avance [02:38]. Si la pérdida baja de forma consistente, la red está aprendiendo.

¿Cómo evaluar la precisión del modelo entrenado?

La evaluación se hace dentro de un bloque torch.no_grad, que desactiva el cálculo de gradientes para acelerar la inferencia [03:05]. Las probabilidades de la sigmoide se convierten en etiquetas binarias usando un umbral de 0.5 y luego se calcula la media de aciertos.

En este caso, la precisión obtenida fue del 57%, cercana al 60%. Es un punto de partida razonable para un dataset sintético pequeño, y deja espacio para mejorar con más datos o ajustes de arquitectura.

¿Cómo afecta la profundidad de la red a la precisión?

La parte interactiva del ejercicio usa una clase RedIn que permite crear entre una y cinco capas ocultas dinámicas, cada una con cuatro neuronas, apoyándose en ModuleList para iterarlas dentro del forward [03:55]. El entrenamiento corre tres épocas rápidas por configuración para comparar resultados.

Mover el slider deja ver el famoso trade off del deep learning:

  • Pocas capas: la red puede quedarse corta y no captar patrones suficientes.
  • Muchas capas: gana capacidad pero crece el riesgo de sobreajuste, sobre todo con datasets pequeños.

Inspeccionar el modelo imprimiéndolo te muestra las dimensiones de cada capa y el número total de parámetros entrenables, una verificación rápida antes de escalar el experimento.

¿Cuántas capas ocultas te dieron la mejor precisión al mover el slider? Cuéntame en los comentarios cómo te fue y qué configuración usarías para un caso real de análisis de video deportivo.

      Redes neuronales con PyTorch paso a paso