Proyecto Fei-Fei — Sesión 4: guardar y cargar el modelo entrenado
Nos quedó pendiente desde la Sesión 5 de Asadi: cada vez que cerráis el cuaderno y lo volvéis a abrir, hay que entrenar la CNN otra vez desde cero, aunque no haya cambiado nada. Hoy se acaba ese problema.
La idea, tal como la explica el libro
Entrenar un modelo y usarlo son dos momentos distintos. En un proyecto real, se entrena una vez — a veces el entrenamiento tarda horas — y ese mismo modelo ya entrenado se usa después muchas veces, en muchos sitios, sin volver a entrenarlo nunca. Para eso hace falta poder guardar un modelo entrenado en un archivo, y cargarlo después exactamente como estaba.
Guardando el modelo
modelo.save("modelo_feifei.keras")
Con esa única línea, Keras guarda en el archivo modelo_feifei.keras todo lo necesario para reconstruir el modelo exactamente como estaba: la arquitectura (cada capa, con sus parámetros), los pesos que aprendió durante el entrenamiento, y el estado del optimizador. En nuestra prueba, el archivo ocupó 2,7 MB — nada comparado con lo que pesan las imágenes de entrenamiento.
Cargándolo en otro momento (o en otro cuaderno)
from tensorflow import keras
modelo_cargado = keras.models.load_model("modelo_feifei.keras")
Esta línea reconstruye el modelo completo desde el archivo, sin que haga falta ni una sola llamada a fit(). Podéis cerrar el cuaderno, apagar el ordenador, y al día siguiente cargar el modelo y usarlo directamente para predecir.
Comprobando que es exactamente el mismo modelo
Para fiaros de verdad de que guardar y cargar no cambia nada, lo mejor es comparar las predicciones de un modelo recién entrenado con las del mismo modelo después de guardarlo y volver a cargarlo:
import numpy as np
predicciones_antes = np.argmax(modelo.predict(x_prueba_cnn[:5]), axis=1)
modelo.save("modelo_feifei.keras")
modelo_cargado = keras.models.load_model("modelo_feifei.keras")
predicciones_despues = np.argmax(modelo_cargado.predict(x_prueba_cnn[:5]), axis=1)
print("Antes de guardar:", predicciones_antes)
print("Después de cargar:", predicciones_despues)
print("¿Coinciden exactamente?", np.array_equal(predicciones_antes, predicciones_despues))
Lo probé con nuestro modelo real de la Sesión 2/3: las predicciones sobre las mismas 5 imágenes fueron idénticas antes y después de guardar y recargar — ni un solo cambio. Es justo la garantía que hace falta para confiar en este mecanismo: el modelo cargado no es una aproximación ni una versión reentrenada, es el mismo modelo, byte a byte.
Dónde guardar el archivo
Guardad modelo_feifei.keras en la misma carpeta donde tenéis el cuaderno, igual que hacíais con las imágenes de Asadi. Así, la próxima vez que abráis el cuaderno, la primera celda puede ser directamente keras.models.load_model("modelo_feifei.keras") en vez de las diez y pico celdas de carga de datos, construcción del modelo y entrenamiento — un ahorro real de tiempo en cada clase.
Próximo paso
Con esto se cierra el bloque de fundamentos de Proyecto Fei-Fei: cargar datos sin líos (Sesión 1), entrenar una CNN multiclase (Sesión 2), diagnosticarla con la matriz de confusión (Sesión 3) y guardarla para no repetir el entrenamiento (Sesión 4). A partir de aquí, con el modelo ya guardado, queda abierto probarlo con dibujos o fotos propias, o mejorar la arquitectura para intentar bajar el error de la categoría Camisa — para cuando queráis retomarlo.


