Conversión de modelo

TensorFlow.js viene con una variedad de modelos pre-formados están listos para usar en el navegador - que se puede encontrar en nuestros modelos Repo . 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 modelo de convertidor para este propósito. El convertidor de TensorFlow.js tiene dos componentes:

  1. Una utilidad de línea de comandos que convierte los modelos de Keras y TensorFlow para usarlos 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 modelo diferentes:

SavedModel: Este es el formato predeterminado en el que se guardan los modelos TensorFlow. El formato SavedModel se documenta aquí .

Keras modelo: modelos Keras generalmente se guardan como un archivo HDF5. Más información sobre cómo guardar los modelos Keras se puede encontrar aquí .

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

Dependiendo del tipo de modelo que intente convertir, deberá pasar diferentes argumentos al convertidor. Por ejemplo, digamos que usted ha guardado un modelo llamado Keras model.h5 a su tmp/ directorio. Para convertir su modelo con 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 una salida y model.json archivo junto con los archivos binarios de peso a su tmp/tfjs_model/ directorio.

Más detalles acerca de los argumentos de línea de comandos correspondientes a diferentes modelos de formato se pueden encontrar en las TensorFlow.js convertidor README .

Durante el proceso de conversión, recorremos el gráfico del modelo y verificamos que TensorFlow.js admita cada operación. 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 dividiendo los pesos en archivos de 4 MB; de esa manera, los navegadores pueden almacenarlos en caché. También intentamos simplificar el gráfico propio modelo utilizando el código abierto Grappler proyecto. Las simplificaciones de gráficos incluyen el plegado de operaciones adyacentes, la eliminación de subgráficos comunes, etc. Estos cambios no tienen ningún 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 determinado tamaño de bytes. La cuantificación es una técnica para reducir el tamaño del modelo al representar pesos con menos bits. Los usuarios deben 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. No dude en aportar un problema en nuestra GitHub para informarnos al respecto - tratamos de poner en práctica nuevas operaciones en respuesta a la demanda del usuario.

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 el número de parámetros (pesos) cuando sea posible.

Ejecute su modelo

Después de convertir con éxito su modelo, terminará con un conjunto de archivos de peso y un archivo de topología de modelo. TensorFlow.js proporciona API de carga de modelos que puede usar para obtener estos activos de modelo 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 para un modelo de Keras convertido:

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

El tf.loadGraphModel API devuelve un tf.FrozenModel , lo que significa que se fijan los parámetros y usted no será capaz de afinar su modelo con nuevos datos. El tf.loadLayersModel API devuelve un tf.Model, que puede ser entrenado. Para obtener información sobre cómo entrenar a 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 evaluación comparativa independiente que se puede utilizar para este propósito: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Usted puede notar que descartamos medidas a partir de una tirada inicial de calentamiento - 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.