Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Referencia de línea de comando del convertidor

Esta página describe cómo usar el convertidor TensorFlow Lite usando la herramienta de línea de comando. Sin embargo, la API de Python se recomienda para la mayoría de los casos.

Resumen de alto nivel

El convertidor TensorFlow Lite tiene una herramienta de línea de comandos llamada tflite_convert , que admite modelos básicos. Use la API de Python para cualquier conversión que implique optimizaciones o cualquier parámetro adicional (por ejemplo, firmas en modelos guardados u objetos personalizados en modelos Keras ).

Uso

El siguiente ejemplo muestra un SavedModel está convirtiendo:

 tflite_convert \
  --saved_model_dir=/tmp/mobilenet_saved_model \
  --output_file=/tmp/mobilenet.tflite
 

Las entradas y salidas se especifican utilizando los siguientes indicadores de uso común:

  • --output_file . Tipo: cadena. Especifica la ruta completa del archivo de salida.
  • --saved_model_dir . Tipo: cadena. Especifica la ruta completa al directorio que contiene el modelo guardado generado en 1.X o 2.X.
  • --keras_model_file . Tipo: cadena. Especifica la ruta completa del archivo HDF5 que contiene el modelo tf.keras generado en 1.X o 2.X.

Para usar todos los indicadores disponibles, use el siguiente comando:

 tflite_convert --help
 

El siguiente indicador se puede usar para compatibilidad con la versión TensorFlow 1.X de la CLI del convertidor:

  • --enable_v1_converter . Tipo: bool. Permite al usuario habilitar los indicadores de línea de comando 1.X en lugar de los indicadores 2.X. Las banderas de línea de comando 1.X se especifican aquí .

Instalación del convertidor CLI

Para obtener la última versión de la CLI del convertidor TensorFlow Lite, recomendamos instalar la compilación nocturna usando pip :

 pip install tf-nightly
 

Alternativamente, puede clonar el repositorio de TensorFlow y usar bazel para ejecutar el comando:

 bazel run //tensorflow/lite/python:tflite_convert -- \
  --saved_model_dir=/tmp/mobilenet_saved_model \
  --output_file=/tmp/mobilenet.tflite
 

Operaciones personalizadas en el nuevo convertidor

Hay un cambio de comportamiento en la forma en que los modelos que contienen operaciones personalizadas (aquellos para los que los usuarios configuraron previamente --allow_custom_ops antes) se manejan en el nuevo convertidor .

Opción incorporada de TensorFlow

Si está convirtiendo un modelo con una operación de TensorFlow incorporada que no existe en TensorFlow Lite, debe establecer el argumento --allow_custom_ops (igual que antes), explicado aquí .

Operaciones personalizadas en TensorFlow

Si está convirtiendo un modelo con una operación personalizada de TensorFlow, se recomienda que escriba un núcleo TensorFlow y un núcleo TensorFlow Lite . Esto garantiza que el modelo funcione de principio a fin, desde TensorFlow y TensorFlow Lite. Esto también requiere establecer el argumento --allow_custom_ops .

Uso avanzado de operaciones personalizadas (no recomendado)

Si lo anterior no es posible, aún puede convertir un modelo TensorFlow que contiene una operación personalizada sin un kernel correspondiente. Deberá pasar el OpDef de la operación personalizada en TensorFlow utilizando el indicador --custom_opdefs , siempre que tenga la OpDef correspondiente registrada en el registro de operaciones globales de TensorFlow. Esto garantiza que el modelo TensorFlow sea válido (es decir, que el tiempo de ejecución TensorFlow pueda cargarlo).

Si la operación personalizada no forma parte del registro global de operaciones TensorFlow, entonces la OpDef correspondiente debe especificarse mediante el indicador --custom_opdefs . Esta es una lista de un protocolo OpDef en cadena que debe registrarse adicionalmente. A continuación se muestra un ejemplo de un TFLiteAwesomeCustomOp con 2 entradas, 1 salida y 2 atributos:

 --custom_opdefs="name: 'TFLiteAwesomeCustomOp' input_arg: { name: 'InputA'
type: DT_FLOAT } input_arg: { name: ‘InputB' type: DT_FLOAT }
output_arg: { name: 'Output' type: DT_FLOAT } attr : { name: 'Attr1' type:
'float'} attr : { name: 'Attr2' type: 'list(float)'}"