
La parada anticipada es básicamente detener el entrenamiento una vez que la pérdida comienza a aumentar (o en otras palabras, la precisión de la validación comienza a disminuir). Según los documentos se utiliza de la siguiente manera;
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
Los valores dependen de su implementación (problema, tamaño de lote, etc.) pero generalmente para evitar el sobreajuste, usaría;
- Monitoree la pérdida de validación (necesita usar validación cruzada o al menos entrenar / probar conjuntos) estableciendo el
monitor
argumento en 'val_loss'.
min_deltaes un umbral para cuantificar una pérdida en algún momento como mejora o no. Si la diferencia de pérdida es inferior min_delta, se cuantifica como sin mejora. Es mejor dejarlo como 0 ya que nos interesa cuándo empeora la pérdida.
patienceEl argumento representa el número de épocas antes de detenerse una vez que su pérdida comienza a aumentar (deja de mejorar). Esto depende de su implementación, si usa lotes muy pequeños
o una gran tasa de aprendizaje, su pérdida zig-zag (la precisión será más ruidosa), así que es mejor establecer un patienceargumento amplio . Si usa lotes grandes y una tasa de aprendizaje pequeña, su pérdida será más suave para que pueda usar un patienceargumento más pequeño . De cualquier manera, lo dejaré como 2 para darle más oportunidades al modelo.
verbose decide qué imprimir, déjelo por defecto (0).
modeEl argumento depende de la dirección que tenga la cantidad monitoreada (se supone que está disminuyendo o aumentando), ya que monitoreamos la pérdida, podemos usar min. Pero dejemos que Keras maneje eso por nosotros y configurémoslo paraauto
Entonces, usaría algo como esto y experimentaría trazando la pérdida por error con y sin parada anticipada.
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
Para una posible ambigüedad sobre cómo funcionan las devoluciones de llamada, intentaré explicar más. Una vez que llama fit(... callbacks=[es])a su modelo, Keras llama a funciones predeterminadas de objetos de devolución de llamada dados. Estas funciones se pueden llamar on_train_begin, on_train_end, on_epoch_begin, on_epoch_endy on_batch_begin, on_batch_end. La devolución de llamada de detención anticipada se llama al final de cada época, compara el mejor valor monitoreado con el actual y se detiene si se cumplen las condiciones (cuántas épocas han pasado desde la observación del mejor valor monitoreado y es más que un argumento de paciencia, la diferencia entre el último valor es mayor que min_delta, etc.).
Como señaló @BrentFaust en los comentarios, el entrenamiento del modelo continuará hasta que se cumplan las condiciones de detención anticipada o se cumpla el epochsparámetro (predeterminado = 10) fit(). Establecer una devolución de llamada de detención anticipada no hará que el modelo se entrene más allá de su epochsparámetro. Por lo tanto, llamar a la fit()función con un epochsvalor mayor se beneficiaría más de la devolución de llamada de detención anticipada.
min_deltaes un umbral para cuantificar el cambio en el valor monitoreado como una mejora o no. Entonces sí, si damos,monitor = 'val_loss'entonces se referirá a la diferencia entre la pérdida de validación actual y la pérdida de validación anterior. En la práctica, si damin_delta=0.1una disminución en la pérdida de validación (actual - anterior) menor que 0,1 no se cuantificaría, por lo tanto, se detendría el entrenamiento (si lo tienepatience = 0).callbacks=[EarlyStopping(patience=2)]no tiene ningún efecto, a menos que se le asigne una épocamodel.fit(..., epochs=max_epochs).epoch=1un bucle for (para varios casos de uso) en el que esta devolución de llamada fallaría. Si hay ambigüedad en mi respuesta, intentaré expresarlo de una mejor manera.restore_best_weightsargumento (aún no está en la documentación), que carga el modelo con los mejores pesos después del entrenamiento. Pero, para sus propósitos, usaría laModelCheckpointdevolución de llamada consave_best_onlyargumento. Puede consultar la documentación, es sencillo de usar, pero debe cargar manualmente los mejores pesos después del entrenamiento.