Entrenar un modelo de deep learning para clasificación de texto es el paso donde todo cobra sentido. Después de definir hiperparámetros, funciones de procesamiento, optimizador y función de pérdida, llega el momento de poner el modelo a aprender y verificar si realmente puede generalizar a datos nuevos.
¿Cómo se estructura el loop de entrenamiento en PyTorch?
El proceso arranca inicializando una variable llamada best validation loss con un valor positivo infinito [01:00]. Esto funciona como referencia: cualquier pérdida real será menor que infinito, así que el primer modelo entrenado siempre se guardará como el mejor hasta ese momento.
El loop principal recorre cada época en un rango definido previamente. En cada iteración ocurren tres cosas fundamentales:
- Se llama a la función entrena pasándole el dataloader de entrenamiento, lo que devuelve el accuracy promedio y la pérdida promedio de esa época.
- Se llama a la función evalúa con el dataloader de validación, obteniendo también accuracy y pérdida de validación.
- Se compara la pérdida de validación actual con la mejor registrada.
¿Cómo se guardan los mejores pesos del modelo?
Si la pérdida de validación actual es menor que la mejor pérdida almacenada, el modelo se considera superior y se actualiza la referencia [02:30]. En ese momento se ejecuta torch.save para guardar el state dict del modelo, que representa el estado de todos sus pesos. El archivo se guarda con extensión .pt, una convención estándar en PyTorch para almacenar pesos de modelos.
¿Qué hacer cuando aparece un error durante el entrenamiento?
Al ejecutar el entrenamiento por primera vez, apareció un error en la función evalúa [03:30]. El mensaje unsupported operand indicaba que faltaba especificar la dimensión cero al obtener el tamaño del tensor en la variable total_count. La corrección fue agregar .size(0) para extraer el entero correspondiente al tamaño del batch. Después de corregir, se usó la opción run after en el menú de runtime para reejecutar desde ese punto.
¿Qué resultados obtuvo el modelo entrenado?
El modelo alcanzó un accuracy de 0.79, lo que significa que acierta la clase correcta aproximadamente el 80% de las veces [04:15]. Un resultado sólido considerando los hiperparámetros iniciales.
Existe un detalle importante sobre el comportamiento del modelo: no desaprende. Si se vuelve a ejecutar la función de entrenamiento, el modelo continúa aprendiendo desde donde se quedó, no desde cero. Para reiniciar completamente el aprendizaje, sería necesario inicializar el modelo de nuevo [04:50].
¿Cómo ajustar hiperparámetros para mejorar el rendimiento?
Se recomienda experimentar con diferentes configuraciones:
- Aumentar el learning rate por encima de 0.2, lo cual mostró mejores resultados en pruebas previas.
- Modificar el número de épocas, tanto incrementándolas como reduciéndolas.
- Variar el tamaño del batch para observar cómo impacta en la convergencia.
¿Qué tan bien generaliza el modelo con datos nuevos?
Hasta este punto se utilizaron dos particiones del dataset: entrenamiento y validación. Pero la prueba definitiva es evaluar con el conjunto de test, datos que el modelo nunca vio durante el entrenamiento [05:30].
Al pasar el test dataloader a la función evalúa, los resultados fueron reveladores:
- El accuracy en testing fue prácticamente del 80%.
- Incluso resultó ligeramente superior al obtenido en validación.
Esto confirma que el modelo aprendió patrones reales y no simplemente memorizó los datos de entrenamiento. La capacidad de generalización es la métrica que realmente importa cuando se construye un clasificador de texto.
El concepto de generalización es clave: un modelo que funciona bien solo con datos conocidos pero falla con datos nuevos sufre de overfitting. En este caso, el rendimiento consistente entre validación y test indica un entrenamiento saludable.
Si lograste resultados diferentes al modificar los hiperparámetros, comparte tu experiencia y los valores que utilizaste.