neural networks network maxpooling2d convolutional conv1d conv python keras deep-learning conv-neural-network

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;

  1. 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'' .
  2. 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 a min_delta , se cuantifica como no mejora. Es mejor dejarlo como 0 ya que estamos interesados ​​en cuando la pérdida empeora.
  3. patience argumento de patience 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 de patience 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 de patience más pequeño. De cualquier manera, lo dejaré como 2 para darle más posibilidades al modelo.
  4. verbose decide qué imprimir, déjelo en el valor predeterminado (0).
  5. mode argumento de mode 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 en auto

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.