Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
clase:iabd:pia:2eval:tema09 [2024/12/23 10:18] admin creado |
clase:iabd:pia:2eval:tema09 [2025/02/15 20:07] (actual) admin [Ejercicios] |
||
---|---|---|---|
Línea 43: | Línea 43: | ||
Más información: | Más información: | ||
* [[https:// | * [[https:// | ||
- | * [[tema08-apendices]] | ||
* [[http:// | * [[http:// | ||
* [[https:// | * [[https:// | ||
Línea 248: | Línea 247: | ||
<sxh base> | <sxh base> | ||
Iguales= True | Iguales= True | ||
+ | </ | ||
+ | |||
+ | |||
+ | <sxh python> | ||
+ | class DataScaler: | ||
+ | def __init__(self, | ||
+ | self.x=x | ||
+ | self.y=y | ||
+ | self.scaler=scaler | ||
+ | |||
+ | if (np.ndim(x)==1): | ||
+ | self.x_ndim=1 | ||
+ | else: | ||
+ | self.x_ndim=x.shape[1] | ||
+ | | ||
+ | |||
+ | if (np.ndim(y)==1): | ||
+ | self.y_ndim=1 | ||
+ | else: | ||
+ | self.y_ndim=y.shape[1] | ||
+ | |||
+ | |||
+ | def get_datos_escalados_entrenamiento(self): | ||
+ | self.x_scaler = self.scaler() | ||
+ | self.y_scaler = self.scaler() | ||
+ | |||
+ | x_scaled = self.x_scaler.fit_transform(self.x.reshape(-1, | ||
+ | y_scaled=self.y_scaler.fit_transform(self.y.reshape(-1, | ||
+ | |||
+ | return x_scaled, | ||
+ | |||
+ | def get_datos_reales(self): | ||
+ | return self.x, | ||
+ | | ||
+ | def predict(self, | ||
+ | y_pred=self.y_scaler.inverse_transform(model.predict(self.x_scaler.transform(x_pred.reshape(-1, | ||
+ | return y_pred | ||
+ | | ||
</ | </ | ||
Línea 285: | 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 '' | ||
+ | |||
+ | La clase contiene entre otros los siguientes parámetros: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | <sxh python> | ||
+ | from tensorflow.keras.callbacks import ModelCheckpoint | ||
+ | |||
+ | checkpoint_callback = ModelCheckpoint( | ||
+ | ' | ||
+ | monitor=' | ||
+ | save_best_only=True, | ||
+ | mode=' | ||
+ | ) | ||
+ | |||
+ | |||
+ | history=model.fit(x_train, | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== 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 '' | 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 '' | ||
Línea 293: | Línea 356: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
<sxh python> | <sxh python> | ||
+ | from tensorflow.keras.callbacks import EarlyStopping | ||
- | history=model.fit(x_train, | + | earlystopping_callback = EarlyStopping( |
+ | monitor=' | ||
+ | min_delta=0.001, | ||
+ | patience=10, | ||
+ | mode=' | ||
+ | restore_best_weights=True # Restaurar los mejores pesos | ||
+ | ) | ||
+ | |||
+ | |||
+ | history=model.fit(x_train, | ||
</ | </ | ||
+ | |||
+ | <note tip> | ||
+ | ¿Tiene sentido usar '' | ||
+ | </ | ||
+ | |||
Más información: | Más información: | ||
+ | * [[https:// | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
===== 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:// | 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:// | ||
Línea 337: | Línea 418: | ||
Los datos son los siguientes: {{ : | Los datos son los siguientes: {{ : | ||
+ | |||
+ | ==== Ejercicio 1.B ==== | ||
+ | Mejora la red normalizando los datos . Usa '' | ||
+ | |||
+ | ¿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: | ||
+ | |||
+ | |||
+ | ==== Ejercicio 1.D ==== | ||
+ | Repite ahora las gráficas pero en vez de regularizar, | ||
+ | |||
+ | ==== Ejercicio 1.E ==== | ||
+ | Usa ahora '' | ||
+ | |||