Cómo guardar y cargar un modelo con Keras

En este artículo, veremos cómo podemos guardar un modelo que hemos entrenado en Keras.

Primero, crearemos un modelo CNN muy simple usando Keras y entrenaremos ese modelo en el Moda MNIST conjunto de datos Luego le mostraré cómo guardar y posteriormente restaurar ese modelo entrenado y realizar la predicción.

Entiendo que guardar un modelo para un problema muy básico como MNIST de moda puede sonar trivial.

Sin embargo, piense en una situación en la que estamos entrenando un modelo muy complejo que requiere una gran cantidad de tiempo, como horas o incluso días, para entrenar.

En tales casos, suele ser útil guardar el modelo. Entonces, en el futuro, si necesitamos hacer predicciones, simplemente podemos cargar el modelo entrenado y hacer nuestras predicciones en lugar de entrenar nuestro modelo nuevamente desde cero.

En Keras, los modelos se guardan en los siguientes tres formatos.

Veamos cómo guardar el modelo en cada uno de estos formatos.

HDF5:

Generalmente, los modelos se guardan en este formato. HDF5 es la abreviatura de formato de datos jerárquicos. El número cinco indica la versión.

El formato HDF almacenará todo nuestro modelo. Guarda toda la información sobre nuestro modelo, incluida la arquitectura, los pesos del modelo, los parámetros entrenados, los detalles del optimizador, etc.

En Keras, guardar un modelo en formato HDF5 es bastante simple. Keras tiene una función save() que nos permite guardar fácilmente el modelo en este formato.

h5 es la extensión utilizada para guardar el modelo en formato HDF.

YAML O JSON:

En lugar de guardar el modelo completo, Keras también nos brinda la flexibilidad de guardar la arquitectura y los pesos de los modelos por separado.

Podemos usar cualquiera de estos dos formatos para guardar solo la arquitectura del modelo sin los pesos, los parámetros, la pérdida o la configuración del optimizador.

Podemos usar las siguientes funciones para guardar el modelo en formato JSON o YAML.

Dado que estos formatos solo guardan la arquitectura, necesitamos guardar el peso del modelo por separado.

Los pesos se pueden almacenar en el formato h5. Para guardar los pesos podemos usar el método save_weights().

Ahora vamos a hacer un poco de codificación.

En primer lugar, importaremos todos los paquetes necesarios y el conjunto de datos. Usaremos el Moda MNIST conjunto de datos

A continuación, crearemos nuestro modelo CNN. El siguiente fragmento de código se tomó de Keras Github Repo.

Finalmente, podemos entrenar nuestro modelo usando la función model.fit().

Como ahora tenemos nuestro modelo entrenado, veamos cómo guardar nuestro modelo en el formato HDF5.

Como ya hemos visto, es súper sencillo. Solo necesitamos llamar al método model.save().

Eso es todo. El modelo se guardará en su directorio de trabajo actual.

En la mayoría de los casos, no cargaremos un modelo guardado en la misma sesión. Sin embargo, para fines de demostración, carguemos nuestro modelo.

Ahora podemos usar nuestro modelo restaurado para hacer predicciones.


De manera similar, veamos cómo guardar el modelo en formatos JSON y YAML.

Guarde el modelo en formatos JSON y YAML:

En primer lugar, veremos cómo guardar el modelo en formato json. El siguiente fragmento de código guardará nuestro modelo en formato json.

El modelo se convierte en una cadena JSON en la primera línea y luego, en la segunda y tercera línea, la cadena JSON se almacena en un archivo llamado model.json.

Dado que JSON solo guarda la arquitectura, debemos guardar el peso del modelo por separado.

Los pesos se pueden almacenar en el formato h5. El método save_weights () se puede utilizar para guardar los pesos.

Como ahora tenemos nuestros pesos y arquitectura, reconstruyamos nuestro modelo a partir del archivo JSON.

El código anterior se explica por sí mismo. En primer lugar, estamos importando la clase model_from_json.

En la segunda y tercera línea, abrimos el archivo y leemos su contenido.

Finalmente, pasamos el contenido de json_string a model_from_json para reconstruir el modelo.

Ahora, si necesitamos hacer predicciones, necesitamos cargar los pesos y compilar nuestro modelo. Para cargar los pesos en nuestro modelo, podemos usar la función load_weights().

Ahora podemos hacer predicciones con nuestro modelo.


Guardar un modelo en YAML es muy similar a guardarlo en JSON. Sólo tenemos que hacer un par de cambios.

Reemplace model.to_json con model.to_yaml e importe model_from_yaml en lugar de model_from_json.

También hay otro método para guardar el modelo en Keras. Es mediante el uso de las devoluciones de llamada.

Guarde el modelo en Keras usando Callbacks:

Las devoluciones de llamada de Keras son funciones que se ejecutan durante el proceso de entrenamiento. Según la documentación de Keras, una devolución de llamada es un conjunto de funciones que se aplicarán en determinadas etapas del procedimiento de formación.

He escrito un artículo que explica algunas de las devoluciones de llamadas de uso común. Puede leer el artículo Keras Callbacks para obtener más información sobre las devoluciones de llamada.

Ahora, para esta publicación, veamos cómo guardar un modelo usando la devolución de llamada de Model Checkpoint.

Al utilizar la devolución de llamada del punto de control del modelo, podemos guardar nuestro modelo a intervalos regulares.

La devolución de llamada del punto de control del modelo guarda los pesos del modelo junto con la estructura una vez que avanzamos, como alcanzar una nueva precisión o pérdida de validación. También podríamos guardar el modelo para cada época.

La firma de la devolución de llamada es la siguiente

  • monitor: cantidad a monitorear
  • save_best_only: si es VERDADERO guarda solo el mejor modelo de acuerdo con la cantidad monitoreada
  • Guardar_pesos_solo: si es TRUE solo se guardan los pesos del modelo
  • modo: uno de . En modo min, el entrenamiento se detendrá cuando la cantidad monitoreada haya dejado de disminuir; en modo máximo, se detendrá cuando la cantidad monitoreada haya dejado de aumentar; modo automático, la dirección se infiere automáticamente del nombre de la cantidad monitoreada.
  • período: después de cuántas épocas necesita verificar el modelo

El código es el mismo hasta la parte model_compile(). Agregue lo siguiente después de model.compile().

En el fragmento de código anterior, creamos la devolución de llamada del punto de control del modelo y la pasamos a la función de ajuste. Guardará nuestro modelo en el formato h5 cada vez que mejore nuestra pérdida de validación.

Resumen:

En este artículo, analizamos diferentes formas de guardar un modelo y reconstruirlo nuevamente en Keras.

En primer lugar, vimos cómo guardar un modelo completo, incluida la arquitectura, los parámetros entrenados, los pesos, los estados de pérdida y optimización, etcétera.

En segundo lugar, discutimos los formatos JSON y YAML, que solo almacenan la arquitectura del modelo.

Finalmente, usamos el punto de control del modelo de devolución de llamada de Keras para guardar el modelo a intervalos regulares cada vez que alcanzamos una mejor pérdida de validación.

Visitar este repositorio de Github para obtener el código completo.

Deja un comentario