python - networks - keras maxpooling2d
Keras Early Stopping (1)
Estoy entrenando redes neuronales para mi proyecto usando Keras. Keras ha proporcionado una función para detenerse temprano. ¿Puedo saber qué parámetros se deben observar para evitar que mi red neuronal se sobreajuste mediante el uso de parada temprana?
La detención temprana es básicamente detener el entrenamiento una vez que su pérdida comienza a aumentar (o, en otras palabras, la precisión de la validación comienza a disminuir). Según los documents , 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 del lote, etc.), pero generalmente para evitar el sobreajuste que usaría;
-
Monitoree la pérdida de validación (necesita usar validación cruzada o al menos conjuntos de entrenamiento / prueba) configurando el argumento del
monitor
en''val_loss''
. -
min_delta
es un umbral para cuantificar una pérdida en alguna época como mejora o no. Si la diferencia de pérdida es inferior amin_delta
, se cuantifica como no mejora. Es mejor dejarlo como 0 ya que estamos interesados en cuando la pérdida empeora. -
patience
argumento depatience
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 utiliza lotes muy pequeños o una gran tasa de aprendizaje, su pérdida zig-zag (la precisión será más ruidosa), por lo que es mejor establecer un argumento depatience
grande. Si usa lotes grandes y una tasa de aprendizaje pequeña, su pérdida será más suave, por lo que puede usar un argumento depatience
más pequeño. De cualquier manera, lo dejaré como 2 para darle más posibilidades al modelo. -
verbose
decide qué imprimir, déjelo en el valor predeterminado (0). -
mode
argumento demode
depende de la dirección que tenga la cantidad monitoreada (se supone que está disminuyendo o aumentando), ya que monitoreamos la pérdida, podemos usarmin
. Pero dejemos que Keras maneje eso por nosotros y configurémoslo enauto
Así que usaría algo como esto y experimentaría trazando la pérdida de 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 llame a
fit(... callbacks=[es])
en su modelo, Keras llama a las funciones predeterminadas de los objetos de devolución de llamada.
Estas funciones pueden llamarse
on_train_begin
,
on_train_end
,
on_epoch_begin
,
on_epoch_end
y
on_batch_begin
,
on_batch_end
.
La devolución de llamada de detención temprana se llama en cada final de é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, la capacitación del modelo continuará hasta que se cumplan las condiciones de parada temprana o se satisfaga el parámetro de
epochs
(predeterminado = 10) en
fit()
.
Establecer una devolución de llamada de detención temprana no hará que el modelo entrene más allá de su parámetro de
epochs
.
Por lo tanto, llamar a la función
fit()
con un valor de
epochs
más grande se beneficiaría más de la devolución de llamada de detención temprana.