Conversión de modelo

TensorFlow.js viene con una variedad de modelos previamente entrenados que están listos para usar en el navegador; se pueden encontrar en nuestro repositorio de modelos . Sin embargo, es posible que haya encontrado o creado un modelo de TensorFlow en otro lugar que le gustaría usar en su aplicación web. TensorFlow.js proporciona un convertidor de modelos para este fin. El convertidor TensorFlow.js tiene dos componentes:

  1. Una utilidad de línea de comandos que convierte modelos de Keras y TensorFlow para usar en TensorFlow.js.
  2. Una API para cargar y ejecutar el modelo en el navegador con TensorFlow.js.

Convierte tu modelo

El convertidor TensorFlow.js funciona con varios formatos de modelos diferentes:

Modelo guardado : este es el formato predeterminado en el que se guardan los modelos de TensorFlow. El formato de modelo guardado se documenta aquí .

Modelo Keras : los modelos Keras generalmente se guardan como un archivo HDF5. Puede encontrar más información sobre cómo guardar modelos de Keras aquí .

Módulo TensorFlow Hub : Estos son modelos que han sido empaquetados para su distribución en TensorFlow Hub, una plataforma para compartir y descubrir modelos. La biblioteca de modelos se puede encontrar aquí .

Según el tipo de modelo que intente convertir, deberá pasar diferentes argumentos al convertidor. Por ejemplo, supongamos que ha guardado un modelo de Keras llamado model.h5 en su directorio tmp/ . Para convertir su modelo usando el convertidor TensorFlow.js, puede ejecutar el siguiente comando:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Esto convertirá el modelo en /tmp/model.h5 y generará un archivo model.json junto con archivos binarios de peso en su directorio tmp/tfjs_model/ .

Se pueden encontrar más detalles sobre los argumentos de la línea de comandos correspondientes a los diferentes formatos de modelo en el convertidor LÉAME de TensorFlow.js.

Durante el proceso de conversión, recorremos el gráfico del modelo y verificamos que cada operación sea compatible con TensorFlow.js. Si es así, escribimos el gráfico en un formato que el navegador pueda consumir. Intentamos optimizar el modelo para que se sirva en la web fragmentando los pesos en archivos de 4 MB; de esa manera, los navegadores pueden almacenarlos en caché. También intentamos simplificar el gráfico del modelo usando el proyecto Grappler de código abierto. Las simplificaciones de gráficos incluyen plegar operaciones adyacentes, eliminar subgráficos comunes, etc. Estos cambios no tienen efecto en la salida del modelo. Para una mayor optimización, los usuarios pueden pasar un argumento que indique al convertidor que cuantifique el modelo a un tamaño de byte determinado. La cuantificación es una técnica para reducir el tamaño del modelo al representar los pesos con menos bits. Los usuarios deben tener cuidado para asegurarse de que su modelo mantenga un grado aceptable de precisión después de la cuantificación.

Si encontramos una operación no admitida durante la conversión, el proceso falla e imprimimos el nombre de la operación para el usuario. Siéntase libre de enviar un problema en nuestro GitHub para informarnos al respecto: tratamos de implementar nuevas operaciones en respuesta a la demanda de los usuarios.

Mejores prácticas

Aunque hacemos todo lo posible para optimizar su modelo durante la conversión, a menudo la mejor manera de garantizar que su modelo funcione bien es construirlo teniendo en cuenta los entornos con recursos limitados. Esto significa evitar arquitecturas demasiado complejas y minimizar la cantidad de parámetros (pesos) cuando sea posible.

Ejecute su modelo

Al convertir correctamente su modelo, obtendrá un conjunto de archivos de peso y un archivo de topología del modelo. TensorFlow.js proporciona API de carga de modelos que puede usar para obtener estos activos de modelos y ejecutar inferencias en el navegador.

Así es como se ve la API para un módulo TensorFlow SavedModel o TensorFlow Hub convertido:

const model = await tf.loadGraphModel(‘path/to/model.json’);

Y así es como se ve un modelo Keras convertido:

const model = await tf.loadLayersModel(‘path/to/model.json’);

La API tf.loadGraphModel devuelve un tf.FrozenModel , lo que significa que los parámetros son fijos y no podrá ajustar su modelo con nuevos datos. La API tf.loadLayersModel devuelve un tf.Model, que se puede entrenar. Para obtener información sobre cómo entrenar un tf.Model, consulte la guía de modelos de trenes .

Después de la conversión, es una buena idea ejecutar la inferencia varias veces y comparar la velocidad de su modelo. Tenemos una página de evaluación comparativa independiente que se puede usar para este propósito: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Puede notar que descartamos las mediciones de una ejecución de calentamiento inicial: esto se debe a que (en general) la primera inferencia de su modelo será varias veces más lenta que las inferencias posteriores debido a la sobrecarga de crear texturas y compilar sombreadores.