Monitoreo del entrenamiento en tiempo real: early stopping y patience

Clase 15 de 28Curso Profesional de Redes Neuronales con TensorFlow

Resumen

Ya sabes como implementar tus propios callbacks personalizados, ahora indagaremos en los callbacks inteligentes que TensorFlow ha creado para nosotros, uno de ellos es early stopping, una técnica que detendrá el entrenamiento si no mejora después de algunas iteraciones.

Early stopping y patience en el código

Antes de implementar esta funcionalidad, vamos a generalizar la creación del modelo mediante una función, de esta manera no tendremos que hardcodear cada modelo nuevo.

python def get_model(): model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(75, (3,3), activation = "relu", input_shape = (28, 28, 1)), tf.keras.layers.MaxPool2D((2,2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(256, kernel_regularizer = regularizers.l2(1e-5), activation = "relu"), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(128, kernel_regularizer = regularizers.l2(1e-5), activation = "relu"), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(len(classes), activation = "softmax") ]) return model

Definiremos una instancia de modelo, la resumiremos y compilaremos.

```python model_early = get_model() model_early.summary()

model_callback.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"]) ```

Crearemos nuestro callback de early stopping, para esto usaremos la respectiva clase de Keras que recibirá 3 parámetros: El monitor (que será la variable que vamos a monitorear o vigilar, en este caso será la pérdida).

La paciencia (que será la tolerancia que tendrá el modelo antes de que pare, si en 3 épocas la pérdida no baja entonces se terminará el entrenamiento) y el modo (que determinará si buscamos la reducción o el aumento de la métrica, en este caso lo dejamos en detección automática).

python callback_early = tf.keras.callbacks.EarlyStopping(monitor = "loss", patience = 3, mode = "auto")

Lo inyectamos al entrenamiento en la sección de callbacks y esperamos el entrenamiento.

python history_early = model_early.fit( train_generator, epochs = 20, callbacks = [callback_early], validation_data = validation_generator )

Si la condición se cumple y rompe la paciencia definida, entonces el modelo dejará de entrenar prematuramente, esto será extremadamente útil para detectar que la red no está aprendiendo más y que es contraproducente continuar con el entrenamiento, con esto ahorraremos tiempo y valiosos recursos que podremos invertir en iterar sobre nuestro modelo.

Contribución creada por Sebastián Franco Gómez.