Si quieren descargar la carpeta de colab, lo primero es crear un archivo .zip. para eso copiamos en colab
!zip model_checkpoints_complete *
model_checkpoints_complete, puedes colocar el nombre de la carpeta a descargar
En la práctica la carga de modelos no sucede de manera atómica (no se carga solo los pesos o solo la arquitectura), lo hacemos todo a la vez, tampoco almacenamos todos los modelos, únicamente guardamos en disco los mejores desempeños. Vamos al código para entender cómo lograrlo.
Mejorando el guardado de pesos
Definiremos un path para guardar nuestro nuevo modelo. En el ModelCheckpoint haremos una serie de modificaciones que cambiarán el cómo se guardará el modelo. El primero de ellos será la opción de save_weight_only, esta irá a falso, también agregaremos val_accuracy como monitor de desempeño y solo guardaremos la mejor versión del modelo.
checkpoint_path = "model_checkpoints_complete" checkpoint_weight = ModelCheckpoint( filepath = checkpoint_path, frecuency = "epoch", save_weight_only = False, monitor = "val_accuracy", save_best_only = True, verbose = 1 )
Crearemos un modelo nuevo para comprender cómo se guardan los datos.
model_complete = get_model() model_complete.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"]) history_complete = model_complete.fit( train_generator, epochs = 20, callbacks = [checkpoint_weight], validation_data = validation_generator )
Si durante el entrenamiento la red mejora en su val_accuracy, entonces se guardará en disco, si por el contrario no detecta una mejora, entonces ignorará esa iteración.
Epoch 1: val_accuracy improved from -inf to 0.77614, saving model to model_checkpoints_complete Epoch 8: val_accuracy did not improve from 0.86175
Al final obtendremos de output un directorio con varios archivos, asegúrate de guardarlos todos de manera local, dado que si falta alguno la carga del modelo fallará.
Si deseas guardar la configuración entera manualmente, puedes hacer uso del método save de los modelos.
model_complete.save("saved_model_complete/mymodel")
Cargando modelos completos
Para cargar un modelo completo desde disco sin necesidad de crear una arquitectura vacía podemos usar la función load_model del módulo models de Keras indicando la ubicación del directorio.
model_complete3 = tf.keras.models.load_model("saved_model_complete/mymodel")
Si comparamos el rendimiento de test entre ambos modelos encontraremos que son exactamente el mismo, reflejando que la carga ha funcionado.
model_complete3.evaluate(test_generator) 57/57 [==============================] - 2s 41ms/step - loss: 0.6733 - accuracy: 0.8826 [0.6733485460281372, 0.8825989961624146] model_complete.evaluate(test_generator) 57/57 [==============================] - 2s 41ms/step - loss: 0.6733 - accuracy: 0.8826 [0.673348605632782, 0.8825989961624146]
Carga y descarga desde archivos h5
Podemos guardar configuraciones enteras desde un archivo h5 que sintetizará toda la estructura de directorios vista anteriormente, para poder usarla debemos instalar pyyaml y h5py.
!pip install pyyaml h5py
Para guardar archivos como h5 bastará con modificar la extensión al final de la dirección a guardar. Para cargarlo bastará con indicar el archivo con extensión.
model_complete3.save("my_model.h5") model_complete4 = tf.keras.models.load_model("my_model.h5")
Con esto ya tienes un amplio abanico para guardar y cargar modelos, desde la sola arquitectura hasta un historial completo o seleccionado de generaciones de entrenamiento.
Contribución creada por Sebastián Franco Gómez.
En la práctica la carga de modelos no sucede de manera atómica (no se carga solo los pesos o solo la arquitectura), lo hacemos todo a la vez, tampoco almacenamos todos los modelos, únicamente guardamos en disco los mejores desempeños. Vamos al código para entender cómo lograrlo.
Definiremos un path para guardar nuestro nuevo modelo. En el ModelCheckpoint haremos una serie de modificaciones que cambiarán el cómo se guardará el modelo. El primero de ellos será la opción de save_weight_only, esta irá a falso, también agregaremos val_accuracy como monitor de desempeño y solo guardaremos la mejor versión del modelo.
checkpoint_path = "model_checkpoints_complete"
checkpoint_weight = ModelCheckpoint(
filepath = checkpoint_path,
frecuency = "epoch",
save_weight_only = False,
monitor = "val_accuracy",
save_best_only = True,
verbose = 1
)
Crearemos un modelo nuevo para comprender cómo se guardan los datos.
model_complete = get_model()
model_complete.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])
history_complete = model_complete.fit(
train_generator,
epochs = 20,
callbacks = [checkpoint_weight],
validation_data = validation_generator
)
Si durante el entrenamiento la red mejora en su val_accuracy, entonces se guardará en disco, si por el contrario no detecta una mejora, entonces ignorará esa iteración.
Epoch 1: val_accuracy improved from -inf to 0.77614, saving model to model_checkpoints_complete
Epoch 8: val_accuracy did not improve from 0.86175
Al final obtendremos de output un directorio con varios archivos, asegúrate de guardarlos todos de manera local, dado que si falta alguno la carga del modelo fallará.
Si deseas guardar la configuración entera manualmente, puedes hacer uso del método save de los modelos.
model_complete.save("saved_model_complete/mymodel")
Para cargar un modelo completo desde disco sin necesidad de crear una arquitectura vacía podemos usar la función load_model del módulo models de Keras indicando la ubicación del directorio.
model_complete3 = tf.keras.models.load_model("saved_model_complete/mymodel")
Si comparamos el rendimiento de test entre ambos modelos encontraremos que son exactamente el mismo, reflejando que la carga ha funcionado.
model_complete3.evaluate(test_generator)
57/57 [==============================] - 2s 41ms/step - loss: 0.6733 - accuracy: 0.8826
[0.6733485460281372, 0.8825989961624146]
model_complete.evaluate(test_generator)
57/57 [==============================] - 2s 41ms/step - loss: 0.6733 - accuracy: 0.8826
[0.673348605632782, 0.8825989961624146]
Podemos guardar configuraciones enteras desde un archivo h5 que sintetizará toda la estructura de directorios vista anteriormente, para poder usarla debemos instalar pyyaml y h5py.
!pip install pyyaml h5py
Para guardar archivos como h5 bastará con modificar la extensión al final de la dirección a guardar. Para cargarlo bastará con indicar el archivo con extensión.
model_complete3.save("my_model.h5")
model_complete4 = tf.keras.models.load_model("my_model.h5")
Con esto ya tienes un amplio abanico para guardar y cargar modelos, desde la sola arquitectura hasta un historial completo o seleccionado de generaciones de entrenamiento.
Contribución creada por Sebastián Franco Gómez.
Si quieren descargar la carpeta de colab, lo primero es crear un archivo .zip. para eso copiamos en colab
!zip model_checkpoints_complete *
model_checkpoints_complete, puedes colocar el nombre de la carpeta a descargar
Me a gustado el nivel de las clase, e visto una evplución aquí, se puede decir que hay un antes y un despues. Aunque no se trató de arquitecturas de redes, pero si de cosas tan importante como cargar los datos, guardar modelos, hacer callbacks y lo más intereante en AutoTuner de keras para escoger el mejor modelos
Actualmente existe el formato .keras el cual contiene completamente el modelo, similar a .h5
Al guardar modelos de aprendizaje automático, es importante considerar varios factores para garantizar su eficiencia, accesibilidad y utilidad a largo plazo.
Estructura de carpetas: Implemente una estructura de carpetas clara y consistente para organizar sus modelos. Por ejemplo, puede crear carpetas por proyecto, tipo de modelo, fecha de entrenamiento o rendimiento.
Nombres de archivos descriptivos: Utilice nombres de archivos descriptivos que indiquen claramente el contenido del modelo, como la arquitectura, los hiperparámetros, el conjunto de datos utilizado y el rendimiento logrado.
- Consideraciones de tamaño y compatibilidad: Elija un formato de archivo adecuado que equilibre el tamaño del archivo, la facilidad de acceso y la compatibilidad con el software o las bibliotecas que utilizará. Formatos populares incluyen HDF5, SavedModel, ONNX y Pickle.
- Dependencias: Si su modelo utiliza objetos o funciones personalizadas, asegúrese de guardarlos junto con el modelo o de documentar claramente cómo acceder a ellos.
- Documentación: Incluya documentación que describa el modelo, su propósito, los datos utilizados, el proceso de entrenamiento, los hiperparámetros y el rendimiento logrado.
- Registro de hiperparámetros: Guarde un registro de los hiperparámetros utilizados para entrenar el modelo, lo que facilita la reproducción de los resultados y la comparación de diferentes modelos.
- Métricas de rendimiento: Guarde las métricas de rendimiento relevantes, como la precisión, la exactitud o el error, para evaluar el modelo y compararlo con otros.
- Ubicación de almacenamiento: Elija una ubicación de almacenamiento segura y accesible para sus modelos, como un disco local, un repositorio en la nube o un sistema de almacenamiento compartido.
- Copias de seguridad: Implemente una estrategia de copia de seguridad regular para proteger sus modelos contra pérdidas accidentales o fallas del sistema.
Accesibilidad: Asegúrese de que los modelos sean accesibles para las personas que los necesitan, ya sea dentro de su equipo o para uso público.
Compartibilidad: Si planea compartir sus modelos con otros, utilice formatos y herramientas compatibles para facilitar el acceso y la reutilización.
Evolución y mantenimiento: Establezca un plan para actualizar y mantener sus modelos a medida que surjan nuevos datos o requisitos.
Al seguir estos criterios, puede almacenar sus modelos de aprendizaje automático de manera efectiva, organizarlos para una fácil recuperación y garantizar su utilidad a largo plazo para usted y otros.
Hierarchical Data Format (version 5) o HDF5 permite almacenar grandes cantidades de datos numéricos y manipular fácilmente esos datos desde Python como si fueran matrices NumPy.
Obtuve valores diferentes en el accuracy y loss asi que para salir de la duda si realmente era el mismo modelo use estas instrucciones: import numpy as np
for w1, w2 in zip(model_total.get_weights(), model_complete3.get_weights()):
assert np.allclose(w1, w2, atol=1e-7), "Weights differ!"
print("✅ All weights match perfectly")