Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:2eval:tema09

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:2eval:tema09 [2025/02/03 18:46]
admin
clase:iabd:pia:2eval:tema09 [2025/02/15 20:07] (actual)
admin [Ejercicios]
Línea 322: Línea 322:
  
  
-===== Parada anticipada =====+===== Callbacks ===== 
 + 
 +==== Guardar mejor modelo ==== 
 +Al entrenar no siempre la última época es el mejor modelo, por ello hay un callback de keras que nos guarda el mejor modelo. Se llama ''ModelCheckpoint''
 + 
 +La clase contiene entre otros los siguientes parámetros: 
 +  * ''filepath'': Nombre del fichero donde se guarda el modelo 
 +  * ''monitor'': La métrica a monitorizar. Por defecto monitoriza ''val_loss''
 +  * ''mode'': Indica el tipo de métrica que es. Es decir si la métrica es mejor cuanto mayor valor tiene (''max'') o la métrica es mejor cuanto menor valor tiene (''min''). Por defecto es valor es ''auto'' y keras sabrá el tipo de la métrica por el nombre que tiene. 
 +  * ''save_best_only=True'': Guardar solo el mejor modelo porque sino guara todos y no nos suele interesar. 
 + 
 +<sxh python> 
 +from tensorflow.keras.callbacks import ModelCheckpoint 
 + 
 +checkpoint_callback = ModelCheckpoint( 
 +    'best_model.h5', 
 +    monitor='val_loss', 
 +    save_best_only=True, 
 +    mode='min' 
 +
 + 
 + 
 +history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=40,verbose=False,callbacks=[checkpoint_callback()]) 
 + 
 +</sxh> 
 + 
 +==== Parada anticipada ====
 La parada anticipada resuelve el problema de cuántas épocas debemos entregar nuestro modelo. Lo que hace es detener el entrenamiento si la métrica no mejora. Para ello se usa la clase de callback de keras llamado ''EarlyStopping()''. La parada anticipada resuelve el problema de cuántas épocas debemos entregar nuestro modelo. Lo que hace es detener el entrenamiento si la métrica no mejora. Para ello se usa la clase de callback de keras llamado ''EarlyStopping()''.
  
Línea 330: Línea 356:
   * ''patience'': Cuántas épocas puede estar sin mejorar antes de que paremos el entrenamiento. Por defecto vale 0.   * ''patience'': Cuántas épocas puede estar sin mejorar antes de que paremos el entrenamiento. Por defecto vale 0.
   * ''mode'': Indica el tipo de métrica que es. Es decir si la métrica es mejor cuanto mayor valor tiene (''max'') o la métrica es mejor cuanto menor valor tiene (''min''). Por defecto es valor es ''auto'' y keras sabrá el tipo de la métrica por el nombre que tiene.   * ''mode'': Indica el tipo de métrica que es. Es decir si la métrica es mejor cuanto mayor valor tiene (''max'') o la métrica es mejor cuanto menor valor tiene (''min''). Por defecto es valor es ''auto'' y keras sabrá el tipo de la métrica por el nombre que tiene.
 +  * ''restore_best_weights'': Si es True, restaurará los pesos del modelo a la mejor versión del entrenamiento, es decir, la versión que tuvo el mejor valor en la métrica monitorizada.
  
 <sxh python> <sxh python>
 +from tensorflow.keras.callbacks import EarlyStopping
  
-history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=40,verbose=False,callbacks=[EarlyStopping()])+earlystopping_callback = EarlyStopping( 
 +    monitor='val_loss',       # Métrica a monitorear 
 +    min_delta=0.001,           # Mejora mínima a considerar significativa 
 +    patience=10,              # Esperar 10 épocas sin mejora antes de detenerse 
 +    mode='min',               # Monitorizar si la pérdida disminuye 
 +    restore_best_weights=True # Restaurar los mejores pesos 
 +
 + 
 + 
 +history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=40,verbose=False,callbacks=[earlystopping_callback()])
    
  
 </sxh> </sxh>
 +
 +<note tip>
 +¿Tiene sentido usar ''ModelCheckpoint'' si ya ''EarlyStopping'' nos permitirá obtener el mejor modelo con ''restore_best_weights=True''. Si ,porque si falla el entrenamiento , con ''ModelCheckpoint'' se va guardando a disco y así nunca lo perderemos.
 +</note>
 +
  
 Más información: Más información:
 +  * [[https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ModelCheckpoint|tf.keras.callbacks.ModelCheckpoint]]
   * [[https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping| tf.keras.callbacks.EarlyStopping]]   * [[https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping| tf.keras.callbacks.EarlyStopping]]
   * [[https://towardsdatascience.com/a-practical-introduction-to-early-stopping-in-machine-learning-550ac88bc8fd|Early Stopping in Practice: an example with Keras and TensorFlow 2.0]]   * [[https://towardsdatascience.com/a-practical-introduction-to-early-stopping-in-machine-learning-550ac88bc8fd|Early Stopping in Practice: an example with Keras and TensorFlow 2.0]]
 +
  
 ===== Ejercicios ===== ===== Ejercicios =====
  
-==== Ejercicio 1 ====+==== Ejercicio 1.A ====
 Crea una red neuronal para predecir si una persona va a tener una enfermedad cardíaca. Para ello se han usado los datos de {{https://www.kaggle.com/datasets/alexteboul/heart-disease-health-indicators-dataset}}. Crea una red neuronal para predecir si una persona va a tener una enfermedad cardíaca. Para ello se han usado los datos de {{https://www.kaggle.com/datasets/alexteboul/heart-disease-health-indicators-dataset}}.
  
Línea 374: Línea 418:
  
 Los datos son los siguientes: {{ :clase:iabd:pia:2eval:heart_disease_health_indicators_brfss2015.csv.zip |}} Los datos son los siguientes: {{ :clase:iabd:pia:2eval:heart_disease_health_indicators_brfss2015.csv.zip |}}
 +
 +==== Ejercicio 1.B ====
 +Mejora la red normalizando los datos . Usa ''StandardScaler''.
 +
 +¿Ha mejorado la red?
 +
 +==== Ejercicio 1.C ====
 +Modifica la red de forma que haya muchas neuronas y que haya sobreajuste.
 +
 +Debes mostrar una gráfica en la que se vea el //loss// en entrenamiento y validación.
 +
 +Ahora vamos a comprobar si es mejor regularizar (L1, L2 y L1L2) o simplemente no sobreentrenar para ello crea una gráficas similares a éstas:
 +
 +{{clase:iabd:pia:2eval:regularizacion_vs_loss_mejor_epoca.png}}
 +
 +
 +==== Ejercicio 1.D ====
 +Repite ahora las gráficas pero en vez de regularizar, usa Dropout
 +
 +==== Ejercicio 1.E ====
 +Usa ahora ''EarlyStopping'' y ''ModelCheckpoint'' para obtener el modelo evitando que se entrene durante tantas épocas y que se guarde a disco automáticamente.
 +
  
  
clase/iabd/pia/2eval/tema09.1738604775.txt.gz · Última modificación: 2025/02/03 18:46 por admin