Introducción
En este proyecto, aprenderás cómo implementar la técnica de parada temprana en los modelos de aprendizaje automático. La parada temprana es un método poderoso para prevenir el sobreajuste y mejorar el rendimiento de tus modelos.
🎯 Tareas
En este proyecto, aprenderás:
- Comprender el concepto de parada temprana y sus pasos principales
- Implementar la función de parada temprana para determinar la época óptima de parada
- Probar la función de parada temprana en un conjunto de datos de muestra
🏆 Logros
Después de completar este proyecto, serás capaz de:
- Dividir un conjunto de datos en conjuntos de entrenamiento y validación
- Monitorear el rendimiento del modelo en el conjunto de validación durante el entrenamiento
- Definir un criterio de parada basado en la pérdida del conjunto de validación
- Utilizar la función de parada temprana para optimizar el proceso de entrenamiento de tu modelo
Comprender el concepto de parada temprana e implementar la función
En este paso, primero aprenderás sobre el concepto de parada temprana y sus pasos principales.
La idea básica detrás de la parada temprana es calcular el rendimiento del modelo en un conjunto de validación durante el entrenamiento. Cuando el rendimiento del modelo en el conjunto de validación comienza a disminuir, se detiene el entrenamiento para evitar el sobreajuste. Los pasos principales son los siguientes:
- Dividir el conjunto de datos de entrenamiento original en un conjunto de entrenamiento y un conjunto de validación.
- Entrenar el modelo solo en el conjunto de entrenamiento y calcular el error del modelo en el conjunto de validación al final de cada época.
- Comparar el error del modelo en el conjunto de validación con el historial de entrenamiento. Detener el entrenamiento cuando la comparación cumpla con el criterio de parada.
- Utilizar los parámetros de la última iteración como los parámetros finales del modelo.
Hay muchos criterios de parada diferentes y pueden ser bastante flexibles. Un criterio comúnmente utilizado es monitorear el valor de pérdida en el conjunto de validación. Cuando el valor de pérdida no se ha optimizado (disminuido) durante n épocas consecutivas (siempre mayor que la pérdida mínima), se detiene el entrenamiento.
Ahora, implementarás la función early_stop en el archivo early_stop.py.
La función revisa los valores de pérdida época por época. Si la pérdida no mejora (disminuye) durante un número de épocas igual a patience, se recomienda detener el entrenamiento.
Aquí está el código de la función early_stop:
def early_stop(loss: List[float], patience: int) -> Tuple[int, float]:
"""
Determina la época en la que se debe detener el entrenamiento basado en los valores de pérdida proporcionados y la paciencia.
La función revisa los valores de pérdida época por época. Si la pérdida no mejora (disminuye) durante un
número de épocas igual a `patience`, se recomienda detener el entrenamiento.
Parámetros:
- loss (List[float]): Una lista de valores de pérdida, generalmente en el orden en que se registraron durante el entrenamiento.
- patience (int): El número de épocas sin mejora en la pérdida después de las cuales se debe detener el entrenamiento.
Devuelve:
- Tuple[int, float]: Una tupla que contiene dos valores:
1. El número de época en la que se debe detener el entrenamiento (indexado a partir de 1).
2. El valor mínimo de pérdida registrado hasta ese momento.
"""
min_loss = np.Inf
max_patience = 0
stop_epoch = 0
for epoch, current_loss in enumerate(loss):
if current_loss < min_loss:
min_loss = current_loss
stop_epoch = epoch
max_patience = 0
else:
max_patience += 1
if max_patience == patience:
break
stop_epoch += 1
return stop_epoch, min_loss
En la función early_stop, implementas la lógica para determinar la época en la que se debe detener el entrenamiento basado en los valores de pérdida proporcionados y el parámetro patience.
La función debe devolver una tupla que contiene dos valores:
- El número de época en la que se debe detener el entrenamiento (indexado a partir de 1).
- El valor mínimo de pérdida registrado hasta ese momento.
Probar la función de parada temprana
En este paso, probarás la función early_stop ejecutando el archivo early_stop.py.
Agrega el siguiente código en el archivo early_stop.py:
if __name__ == "__main__":
loss = [
1.11,
1.01,
0.99,
0.89,
0.77,
0.69,
0.57,
0.44,
0.51,
0.43,
0.55,
0.61,
0.77,
0.89,
0.78,
]
patience = 3
stop_epoch, min_loss = early_stop(loss, patience)
print(f"{stop_epoch=}, {min_loss=}")
Luego, ejecuta el script desde la terminal:
python early_stop.py
La salida debe ser:
stop_epoch = 10, loss = 0.43
Esto significa que el entrenamiento debe detenerse en la época 10, y el valor mínimo de pérdida registrado hasta ese momento es 0.43.
¡Felicitaciones! Has implementado con éxito la función de parada temprana. Ahora puedes usar esta función en tus proyectos de aprendizaje automático para prevenir el sobreajuste y mejorar el rendimiento de tus modelos.
Resumen
¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



