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 [2025/02/02 21:58] admin [Normalization] |
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 253: | Línea 252: | ||
<sxh python> | <sxh python> | ||
class DataScaler: | class DataScaler: | ||
- | def __init__(self, | + | def __init__(self, |
self.x=x | self.x=x | ||
self.y=y | self.y=y | ||
+ | self.scaler=scaler | ||
if (np.ndim(x)==1): | if (np.ndim(x)==1): | ||
Línea 270: | Línea 270: | ||
def get_datos_escalados_entrenamiento(self): | def get_datos_escalados_entrenamiento(self): | ||
- | self.x_scaler = StandardScaler() | + | self.x_scaler = self.scaler() |
- | self.y_scaler = StandardScaler() | + | self.y_scaler = self.scaler() |
x_scaled = self.x_scaler.fit_transform(self.x.reshape(-1, | x_scaled = self.x_scaler.fit_transform(self.x.reshape(-1, | ||
Línea 284: | Línea 284: | ||
y_pred=self.y_scaler.inverse_transform(model.predict(self.x_scaler.transform(x_pred.reshape(-1, | y_pred=self.y_scaler.inverse_transform(model.predict(self.x_scaler.transform(x_pred.reshape(-1, | ||
return y_pred | return y_pred | ||
+ | | ||
</ | </ | ||
Línea 321: | 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 329: | 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 373: | 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 '' | ||
+ | |||