Métodos para serializar y deserializar modelos Scikit Learn y Tensorflow para producción

Estás leyendo la publicación: Métodos para serializar y deserializar modelos Scikit Learn y Tensorflow para producción

Existen varios métodos para poner en producción modelos de aprendizaje automático entrenados, y una de esas formas de verificar la preparación de los modelos de aprendizaje automático desarrollados para la producción es solo Serialización y deserialización. Esta técnica permite modificar ciertos parámetros de los modelos de aprendizaje automático desarrollados en consecuencia en la fase de producción y continuar con la implementación del modelo. Entonces, este artículo básicamente informa sobre los mejores métodos para serializar y deserializar modelos de aprendizaje automático y aprendizaje profundo para producción o transmisión.

Tabla de contenido

  1. Descripción general y la necesidad de serialización y deserialización
  2. Estudio de caso para modelos de aprendizaje de scikit
    1. formato encurtido
    2. Formato de libreta de trabajos
  3. Estudio de caso para modelos de TensorFlow
    1. Formato HDF5 (h5)
    2. formato JSON
  4. Resumen

Primero analicemos por qué necesitamos serialización y deserialización al implementar el modelo.

Descripción general y necesidad de serialización y deserialización

Publicación por entregas es el proceso de transformar la estructura de datos general o el modelo entrenado en formatos flexibles de recuperación para luego facilitar la descomposición del modelo serializado en producción. El método de descomposición del modelo entrenado en el entorno de producción también puede denominarse deserialización.

Por lo que el proceso de serialización y deserialización es necesario para obtener modelos listos para producción o despliegues finales y también para obtener modelos confiables entregados en producción. Existen varios formatos en los que los modelos de aprendizaje automático y aprendizaje profundo, respectivamente, pueden serializarse y deserializarse.

Algunas de las formas estándar para los modelos de aprendizaje automático incluyen pepinillo, joblib y JSON (Notación de objetos de JavaScript) principalmente, y con respecto a los modelos de aprendizaje profundo, existen varios tipos, como HDF5 (h5) (Formato de datos jerárquicos), YAML (Yet Another Markup Language) y JSON. con el apoyo de Keras.

Entonces, de acuerdo con los requisitos computacionales y la facilidad de acceso y almacenamiento, se opta por los formatos de datos respectivos donde los formatos JSON y YAML resultan ser más interpretables y flexibles por humanos.

Estudio de caso para modelos de aprendizaje de scikit

La serialización y deserialización de modelos de aprendizaje automático se pueden realizar básicamente de tres formas, como se mencionó anteriormente. Son el formato pickle, el formato joblib y el formato JSON. Exploremos cada uno de los tipos individualmente.

Pasos involucrados en la serialización y deserialización de Pickle

El uso del módulo pickle generalmente se denomina decapado, en el que los parámetros del modelo entrenado se convertirán en un flujo de bytes y luego se deserializarán al final de la producción. Los pasos involucrados en el decapado de modelos de aprendizaje automático se muestran a continuación.

Importe el módulo necesario para el decapado en el entorno de trabajo como se muestra a continuación.

encurtido de importación

Si el módulo no está disponible en el entorno de trabajo, puede instalarse fácilmente usando el comando pip en el mismo entorno de trabajo como se muestra a continuación y luego importar el mismo módulo al entorno de trabajo.

🔥 Recomendado:  ¿Funcionan los anuncios de Etsy? Preguntas frecuentes y consejos para aumentar las ventas

!pip instalar pickle importar pickle

Más tarde, se puede dar un nombre aleatorio para el nombre del archivo pickle y se puede mencionar una declaración de impresión para verificar la serialización exitosa del modelo de aprendizaje automático en el entorno de trabajo, como se muestra a continuación.

dtc_pkl_filename=”DTC_Model.pkl”

print(‘Modelo de Pickle serializado en el entorno de trabajo’)

Si la serialización del modelo entrenado es exitosa, obtendríamos el siguiente resultado.

La función incorporada de vertedero debe usarse como se muestra a continuación para abrir el archivo pickle serializado y realizar las operaciones de escritura requeridas, aquí principalmente escribir binario (wb) se utiliza para garantizar que se pueda acceder al archivo para realizar operaciones de escritura en él en formato binario, ya que el proceso de decapado también admite el almacenamiento en formato binario. El código para el mismo se da a continuación.

con open(dtc_pkl_filename, ‘wb’) como archivo: #wb significa escribir binario y open se usa para serializar el modelo pickle.dump(dtc_model, file) # dump se usa para serializar el modelo ML

Ahora el carga módulo de pickle se utiliza para deserializar el archivo pickle volcado en el mismo entorno de trabajo como se muestra a continuación donde leer binario (rb) se utiliza para la deserialización del modelo entrenado y también para evaluar varios parámetros del modelo. Los pasos completos de deserialización y el uso del modelo deserializado para evaluar ciertos parámetros se muestran a continuación.

with open(dtc_pkl_filename, ‘rb’) as file: ## rb significa lectura binaria que se usa para deserializar el modelo ML del entorno de trabajo des_dtc_model = pickle.load(file) ## load se usa para traer el modelo ML de el formato pepinillo al entorno de trabajo

La deserialización exitosa del modelo en el entorno de trabajo se puede realizar mediante una declaración de impresión como se muestra a continuación.

print(‘Modelo de Pickle deserializado al entorno de trabajo’)

La declaración de impresión anterior genera el siguiente resultado.

Posteriormente, utilizando el modelo deserializado, la puntuación de precisión se puede calcular como se muestra a continuación.

acc_score=des_dtc_model.score(X_test,Y_test)

El modelo deserializado en este estudio de caso ha arrojado una puntuación de precisión del 70,99 %, como se muestra a continuación.

print(‘La puntuación de precisión del modelo deserializado es’,acc_score*100)

El decapado de modelos de aprendizaje automático es más fácil, pero a veces, debido a la incapacidad de una interpretación humana más sencilla, el proceso de decapado se condena en producción y se opta por otros formatos.

Pasos involucrados en la serialización y deserialización de joblib

Joblib es una extensión del módulo pickle y se usa en lugar de un pickle debido a su transformación de tipo de datos más ligera en la canalización y su procesamiento incorporado más rápido para varios tipos de datos.

🔥 Recomendado:  ¿Cuándo deja de converger una red neuronal?

El módulo joblib puede estar disponible en el entorno de trabajo como se muestra a continuación.

pip instalar joblib importar joblib

Posteriormente, se puede declarar un nombre aleatorio para el archivo joblib como se muestra a continuación.

dtc_joblib_file = “DTC_Model.pkl”

Ahora el proceso de serialización del archivo joblib se puede realizar utilizando la función incorporada de vertedero similar a pickle para serializar el formato de archivo en el entorno de trabajo y la serialización exitosa del archivo joblib se puede evaluar como se muestra a continuación.

joblib.dump(dtc_model, dtc_joblib_file) print(‘Modelo de Joblib serializado en el entorno de trabajo’)

Ahora el modelo entrenado se puede deserializar al entorno de trabajo como se muestra a continuación usando el carga módulo similar a pickle. Los pasos involucrados en la deserialización se muestran a continuación.

DTC_joblib_model = joblib.load(dtc_joblib_file) ## load se usa para deserializar el modelo ML al entorno de trabajo

La deserialización exitosa se puede validar como se muestra a continuación con la salida correspondiente generada.

print(‘Modelo Joblib deserializado al entorno de trabajo’) DTC_joblib_model

Posteriormente, se utilizó el modelo deserializado para evaluar la puntuación de precisión junto con el resultado generado, como se muestra a continuación.

acc_score_joblib=DTC_joblib_model.score(X_test,Y_test) print(‘La puntuación de precisión del modelo Joblib deserializado es’,acc_score_joblib*100)

Sin embargo, el módulo joblib es una extensión de pickle pero se opta por pickle por sus beneficios computacionales y de almacenamiento. En la siguiente sección, exploremos los pasos necesarios para serializar y deserializar modelos ML en formato JSON.

Estudio de caso para modelos de Tensorflow

A diferencia del proceso de serialización y deserialización de los modelos de aprendizaje automático, los modelos de aprendizaje profundo tienen sus respectivos formatos de serialización y deserialización. Para los modelos de aprendizaje profundo, Keras proporciona soporte sustancial para formatos como hdf5 (h5), YAML y JSON. Los pasos involucrados para el mismo se discuten brevemente a continuación.

HDF5 (h5) formato de serialización y deserialización

Primero, el módulo necesario debe importarse desde Keras como se muestra a continuación.

desde tensorflow.keras.models importar load_model

Ahora, el modelo de aprendizaje profundo desarrollado se puede serializar en el entorno de trabajo y la serialización del modelo de aprendizaje profundo también se puede verificar como se muestra a continuación.

model.save(‘serialized_dl_model.h5’) ## Serialización del modelo print(‘Modelo serializado en el disco’)

Ahora el modelo se puede deserializar en el entorno de trabajo como se muestra a continuación.

des_model=load_model(‘serialized_dl_model.h5’) ## Deserializar el modelo print(‘Modelo deserializado al disco’)

Ahora, el modelo de aprendizaje profundo deserializado se puede utilizar para la evaluación de ciertos parámetros. Los pasos necesarios para evaluar la pérdida de prueba del modelo y la precisión de la prueba se muestran a continuación.

print(‘Pérdida de prueba {} \n Precisión de prueba {}’.format(des_model.evaluate(X_test,Y_test)[0],des_modelo.evaluar(X_prueba,Y_prueba)[1]))

Desde el punto de vista de la implementación, la implementación basada en el formato hdf5 (h5) es más sencilla, pero como el formato h5 almacena datos complejos en formato jerárquico, a veces presenta problemas con respecto a la convergencia óptima y un procesamiento más rápido.

🔥 Recomendado:  Todo lo que necesitas saber sobre los gráficos de conocimiento temporal

Formato JSON de serialización y deserialización.

Ahora exploremos los pasos involucrados en la serialización y deserialización de modelos de aprendizaje profundo en formato JSON. A diferencia de otros formatos, la biblioteca necesaria debe importarse desde el módulo Keras como se muestra a continuación.

desde tensorflow.keras.models import model_from_json

Una vez que se importa el módulo necesario, el modelo de aprendizaje profundo se serializa utilizando el to_json() módulo como se muestra a continuación.

json_model=model.to_json() ## Serializando el modelo de aprendizaje profundo en el disco

Ahora el modelo debe deserializarse creando primero el archivo JSON en el formato legible como se muestra a continuación.

json_file=open(‘json_model’,’r’) ## r se usa para leer el json_file abierto

Ahora el archivo JSON creado debe cargarse utilizando el leer() función incorporada y cerrado en consecuencia como se muestra a continuación.

modelo_json_cargado=archivo_json.leer() archivo_json.cerrar()

Ahora, el modelo deserializado se carga en el entorno de trabajo mediante la biblioteca model_from_json de Keras, como se muestra a continuación.

des_json_model=model_from_json(loaded_json_model)

Ahora, el modelo de aprendizaje profundo deserializado debe compilarse nuevamente en el mismo entorno de trabajo en consecuencia y luego proceder a evaluar los parámetros necesarios. Aquí se muestran a continuación los pasos necesarios para evaluar el rendimiento de prueba de los modelos deserializados.

print(‘Pérdida de prueba {} \n Precisión de prueba {}’.format(des_json_model.evaluate(X_test,Y_test)[0],des_json_model.evaluate(X_test,Y_test)[1]))

En la imagen de arriba, podemos ver que después de la deserialización del modelo de aprendizaje profundo, la pérdida de modelos ha aumentado y la precisión ha disminuido en la fase de prueba, que muestra signos de modelo poco confiable junto con un rendimiento deficiente para cambiar datos y así es como el proceso de La serialización y deserialización nos ayuda a realizar una validación cruzada del rendimiento del modelo en las producciones.

Resumen

Como se mencionó anteriormente, los modelos de aprendizaje automático y aprendizaje profundo tienen sus respectivos formatos de serialización y deserialización junto con algunos pros y contras asociados. La siguiente tabla da una idea de ciertos parámetros y preocupaciones asociadas con los tipos individuales.

Inquietudes y parámetros del modelo Scikit-learn Inquietudes y parámetros del modelo Tensorflow
El formato pickle es fácil de implementar, pero no es interpretable por humanos y muestra signos de una convergencia más lenta en la producción. El formato h5 es fácil de implementar. Pero debido a su jerarquía de almacenamiento, puede mostrar preocupación por los modelos complejos y el gran procesamiento de datos.
El formato joblib es una extensión de pickle y optó por pickle debido a su convergencia más rápida junto con varios tipos de datos. Parece que Keras ya no admite la serialización en formato YAML debido a problemas de seguridad.
El formato JSON es propenso a producir errores de atributos y es difícil deserializar ciertos atributos y es fácilmente manipulable e interpretable por humanos. El formato JSON es fácil de implementar, pero el modelo de deserialización mostró una mayor pérdida y una menor precisión en las pruebas, lo que sería un problema durante la producción.

Referencias

Tabla de Contenido