Callbacks: early stopping y checkpoints
Clase 18 de 25 • Curso de Redes Neuronales Convolucionales con Python y Keras
Contenido del curso
Clase 18 de 25 • Curso de Redes Neuronales Convolucionales con Python y Keras
Contenido del curso
Sebastián Franco
Sebastián Franco
Sebastián Franco
FELIX DAVID CORDOVA GARCIA
Jose Martin Rangel Espinoza
Tomas Dale
Videl Chavez Benavente
Alexis Daniel Leyva Yáñez
Jhon Freddy Tavera Blandon
Diego Sepúlveda
Brandom Cárdenas
Guillermo Casanova
Alarcon7a
Mario Alexander Vargas Celis
Laura Valentina Rodriguez Cuadrado
Vladimir Marcos Vega
Hay que tener mucho cuidado a la hora de copiar arquitecturas de red con la asignación, esto puede traer consecuencias inesperadas que son muy difíciles de depurar, a mí me pasó y les vengo a contar un poco.
Para resumir, cuando quieran crear una instancia de una red ya generada EVITEN a toda costa usar la asignación.
model2 = model1
Esto copiará la dirección de memoria del objeto model1 a model2, ¿qué significa esto? Que cuando modifiques model2, el primero también se modificará dado que no son objetos nuevos sino apuntadores al mismo espacio de memoria (voy a dejar la explicación en una respuesta).
En el caso del video no se nota totalmente, pero de manera inconsciente, al cargar los datos del hdf5 en model2, también se han cargado en model1.
La manera de copiar correctamente un modelo (porque se quiere mantener su arquitectura) sin generar un apuntador de memoria es con la función clone_model que viene de keras.models
from keras.models import clone_model model2 = clone_model(model1)
Esto lo resalto por experiencia personal, dado que en mi proyecto personal copié una instancia de una red a otra, y cuando realiza el entrenamiento en el modelo 2, los datos del 1 se arruinaban y a la hora de probar el rendimiento siempre era inconsistente.
(1) Yendo un poco a lo de apuntadores de memoria, el tema se puede extender un poco, pero para resumir existen 2 tipos de datos en Python: Los atómicos y los estructurados.
Los atómicos son todos aquellos tipos de datos primitivos sencillos, es decir, strings, enteros, booleanos, y flotantes.
Los estructurados son aquellos tipos de datos que encapsulan a los atómicos, es decir, listas, diccionarios, sets, tuplas.
¿Por qué es importante estructurarlos? Porque a nivel de programación, su asignación es diferente.
Puede ser un poco abstracto, pero todas las variables se encuentran en memoria con su valor asignado, por lo que una variable es nada más y nada menos que un apuntador a la memoria RAM, puedes verificar esto usando la función id() de Python, que te dirá en qué lugar de memoria se encuentra una variable.
x = 121 id(x) #140718135911840
(2) Si asignas una variable a otra, lo único que harás será asignar un apuntador de memoria a otro, es decir, si asignas x = y = 4, los 3 lugares apuntarán al mismo sitio de memoria.
Esto no es un mayor problema en los tipos de datos atómicos, dado que si reasignas x o y, se apuntará a otro lugar de memoria y problema solucionado, pero ¿qué pasa con los tipos de datos estructurados?
Supongamos una lista x, con valores 1, 2 y 3, y ahora una lista y, que apuntará a x.
x = [1,2,3] y = x
¿Qué crees que pasa si cambiamos el valor de x[0] a 1000?
x[0] = 1000 print(x) #[1000, 2, 3] print(y) #[1000, 2, 3]
¿Por qué ha cambiado el valor en y si solo hicimos la asignación en x?
Esto se da porque las estructuras de datos apuntan a un lugar de memoria donde guardarán los datos entrantes, por lo que es un bloque de memoria general, no una cajita como lo es una variable atómica.
Cuando apuntamos listas en Python, apuntamos al objeto per se, no sus elementos, por lo que, si apuntamos con otro objeto nuevo, no se duplicará, simplemente copiará el mismo comportamiento al original, es más, no habría un original, solo 2 identificadores apuntando al mismo espacio de memoria.
De todo el curso esta fue la clase que mas gusto, la uso cada vez que creo redes de regresiones y clasificaciones,e s super util :)
Concuerdo contigo
UN INCREIBLE CURSO, MUY MUY CARGADO, DE VER CADA VIDEO VARIAS VECES, Y COMO SEA, ES UN GRAN CURSO, GRACIAS PLATZI POR DARNOS TAL NIVEL DE EDUCACION
Los callbacks se pueden definir como clases personalizadas que heredan de la clase base tf.keras.callbacks.Callback1 o se pueden usar algunos de los callbacks predefinidos que ofrece TensorFlow2. Algunos de los callbacks más comunes son:
ModelCheckpoint: Guarda el modelo o los pesos en un archivo después de cada época o cuando se alcanza el mejor rendimiento en una métrica. EarlyStopping: Detiene el entrenamiento cuando una métrica deja de mejorar después de un número de épocas. LearningRateScheduler: Cambia la tasa de aprendizaje según una función o un programa dado. TensorBoard: Genera registros para visualizar el entrenamiento y el rendimiento del modelo en TensorBoard. ReduceLROnPlateau: Reduce la tasa de aprendizaje cuando una métrica deja de mejorar.
Al parecer keras ya no permite guardar archivos en formato .hdf5 así que si tienen problemas al ejecutar el código les sugiero que guarden el archivo en formato .keras
Keras Callbacks: Early Stopping y Checkpoints
Los Callbacks
En Keras son funciones que se pueden aplicar en diferentes etapas del proceso de entrenamiento (al inicio, al final, al inicio de cada época, al final de cada época, etc.). Permiten tener un mayor control sobre el comportamiento del modelo durante el entrenamiento.
El Early Stopping
Es una técnica para evitar el sobreajuste. Consiste en detener el entrenamiento cuando una métrica deje de mejorar. Keras proporciona esta funcionalidad a través del callback EarlyStopping.
Checkpoints
Permiten guardar el modelo o los pesos del modelo en un archivo, para poder reanudar el entrenamiento donde se dejó en caso de que se interrumpa, o para poder usar el modelo sin tener que volver a entrenarlo. Keras proporciona esta funcionalidad a través del callback
Uno podria ocupar un checkpoint para guardar mejor pesos y luego desde ahi aplicar un learning rate mucho menor para que no diverga? o en verdad otra estrategia para mejorar el modelo desde ahi? Una anologia seria llegar hasta cierta parte con X estrategia y luego probrar Y,Z... estrategia para mejorar aun mas el modelo. Eso es algo que se usa?
Hola, cómo puedo pasarle los pesos a mi modelo nuevo sin sobreescribir mi modelo anterior ??
Hola! cuando usamos un checkpoint los pesos del mejor modelo se guardan también en la variable o esa sí contiene los de la última época?
se guardan
Los **callbacks** en Keras son funciones especiales que se ejecutan durante el entrenamiento de un modelo. Dos de los callbacks más populares son **Early Stopping** y **Model Checkpoint**. Estos ayudan a mejorar el rendimiento del modelo y a prevenir el sobreajuste. A continuación, te explico cada uno con ejemplos.
### 1. **Early Stopping**
El **Early Stopping** se usa para detener el entrenamiento cuando el modelo deja de mejorar. Esto previene el sobreentrenamiento y el ajuste excesivo (overfitting) a los datos de entrenamiento.
#### ¿Cómo funciona?
Monitorea una métrica, como la **pérdida en el conjunto de validación**. Si esa métrica no mejora después de un número determinado de épocas, el entrenamiento se detiene automáticamente.
#### Ejemplo de Early Stopping
from tensorflow.keras.callbacks import EarlyStopping \# Definir el callback early\_stopping = EarlyStopping(monitor='val\_loss', patience=3, restore\_best\_weights=True) \# Entrenamiento del modelo con Early Stopping history = model.fit(x\_train, y\_train,    validation\_data=(x\_valid, y\_valid),    epochs=50,    callbacks=\[early\_stopping])
**Explicación:**
- monitor='val\_loss': Monitorea la pérdida en los datos de validación.
- patience=3: Si la métrica monitoreada no mejora en 3 épocas consecutivas, el entrenamiento se detiene.
- restore\_best\_weights=True: Al finalizar el entrenamiento, el modelo restaurará los pesos de la época en la que tuvo el mejor rendimiento.
---
### 2. **Model Checkpoint**
El **Model Checkpoint** se usa para guardar el modelo durante el entrenamiento. Puedes configurar el callback para que guarde el modelo cuando una métrica específica (por ejemplo, val\_loss) mejore.
#### ¿Cómo funciona?
Se guardan los pesos del modelo a medida que el entrenamiento progresa, y se pueden guardar los pesos del mejor modelo o de todos los modelos entrenados.
#### Ejemplo de Model Checkpoint
from tensorflow.keras.callbacks import ModelCheckpoint \# Definir el callback para guardar los mejores pesos checkpoint = ModelCheckpoint('best\_model.h5', monitor='val\_loss', save\_best\_only=True, verbose=1) \# Entrenamiento del modelo con Model Checkpoint history = model.fit(x\_train, y\_train,    validation\_data=(x\_valid, y\_valid),    epochs=50,    callbacks=\[checkpoint])
**Explicación:**
- 'best\_model.h5': Archivo donde se guardarán los pesos del mejor modelo.
- monitor='val\_loss': Monitorea la pérdida en los datos de validación.
- save\_best\_only=True: Solo se guardará el modelo cuando haya una mejora en la métrica monitoreada.
- verbose=1: Muestra mensajes detallados sobre cuándo se guarda el modelo.
---
### Combinando **Early Stopping** y **Model Checkpoint**
También puedes usar ambos callbacks juntos para que el modelo se detenga automáticamente y se guarden los mejores pesos.
\# Definir ambos callbacks early\_stopping = EarlyStopping(monitor='val\_loss', patience=3, restore\_best\_weights=True) checkpoint = ModelCheckpoint('best\_model.h5', monitor='val\_loss', save\_best\_only=True, verbose=1) \# Entrenamiento del modelo con ambos callbacks history = model.fit(x\_train, y\_train,    validation\_data=(x\_valid, y\_valid),    epochs=50,    callbacks=\[early\_stopping, checkpoint])
Esto garantizará que el modelo se detenga cuando deje de mejorar y que se guarde el mejor modelo encontrado durante el entrenamiento.
### Resumen:
- **Early Stopping**: Detiene el entrenamiento cuando el modelo deja de mejorar, evitando el sobreajuste.
- **Model Checkpoint**: Guarda el modelo cuando mejora durante el entrenamiento, permitiendo usar los mejores pesos encontrados.
Yo solo veo que hacen modelos de entrenamiento pero ninguno saca un modelo para usar un algoritmo de hacer conteo de vehiculos o objetos dentro de una imagen o video como lo hace yolo
me volaron la peluca estas cosas :D