En esta página, se describe cómo convertir un modelo de TensorFlow en un modelo de LiteRT (un formato FlatBuffer optimizado que se identifica con la extensión de archivo .tflite) con el conversor de LiteRT.
Flujo de trabajo de conversión
En el siguiente diagrama, se ilustra el flujo de trabajo de alto nivel para convertir tu modelo:

Figura 1: Flujo de trabajo del conversor.
Puedes convertir tu modelo con una de las siguientes opciones:
- API de Python (recomendada): Te permite integrar la conversión en tu canalización de desarrollo, aplicar optimizaciones, agregar metadatos y muchas otras tareas que simplifican el proceso de conversión.
- Línea de comandos: Solo admite la conversión básica de modelos.
API de Python
Código de ayuda: Para obtener más información sobre la API del conversor de LiteRT, ejecuta print(help(tf.lite.TFLiteConverter)).
Convierte un modelo de TensorFlow con tf.lite.TFLiteConverter. Un modelo de TensorFlow se almacena con el formato de SavedModel y se genera con las APIs de alto nivel tf.keras.* (un modelo de Keras) o las APIs de bajo nivel tf.* (desde las que generas funciones concretas). Como resultado, tienes las siguientes tres opciones (los ejemplos se encuentran en las secciones de más abajo):
tf.lite.TFLiteConverter.from_saved_model()(recomendado): Convierte un SavedModel.tf.lite.TFLiteConverter.from_keras_model(): Convierte un modelo de Keras.tf.lite.TFLiteConverter.from_concrete_functions(): Convierte funciones concretas.
Convierte un modelo guardado (recomendado)
En el siguiente ejemplo, se muestra cómo convertir un SavedModel en un modelo de TensorFlow Lite.
import tensorflow as tf
# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Convierte un modelo de Keras
En el siguiente ejemplo, se muestra cómo convertir un modelo de Keras en un modelo de TensorFlow Lite.
import tensorflow as tf
# Create a model using high-level tf.keras.* APIs
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(units=1, input_shape=[1]),
tf.keras.layers.Dense(units=16, activation='relu'),
tf.keras.layers.Dense(units=1)
])
model.compile(optimizer='sgd', loss='mean_squared_error') # compile the model
model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5) # train the model
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_keras_dir")
# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Convierte funciones concretas
En el siguiente ejemplo, se muestra cómo convertir funciones concretas en un modelo de LiteRT.
import tensorflow as tf
# Create a model using low-level tf.* APIs
class Squared(tf.Module):
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])
def __call__(self, x):
return tf.square(x)
model = Squared()
# (ro run your model) result = Squared(5.0) # This prints "25.0"
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_tf_dir")
concrete_func = model.__call__.get_concrete_function()
# Convert the model.
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func],
model)
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Otras funciones
Aplica optimizaciones. La cuantización posterior al entrenamiento es una optimización que se usa con frecuencia y que puede reducir aún más la latencia y el tamaño del modelo con una pérdida mínima de exactitud.
Agrega metadatos, ya que facilitan la creación de código del wrapper específico de la plataforma cuando se implementan modelos en dispositivos.
Errores de conversión
Los siguientes son errores de conversión comunes y las formas de solucionarlos:
Error:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.Solución: El error ocurre porque tu modelo tiene operaciones de TF que no cuentan con la implementación de TFLite correspondiente. Puedes resolverlo usando la operación de TF en el modelo de TFLite (recomendado). Si quieres generar un modelo solo con operaciones de TFLite, puedes agregar una solicitud para la operación de TFLite faltante en el problema de GitHub #21526 (deja un comentario si aún no se mencionó tu solicitud) o crear la operación de TFLite por tu cuenta.
Error:
.. is neither a custom op nor a flex opSolución si la operación de TF:
- Se admite en TF: El error ocurre porque la operación de TF no se encuentra incluida en la lista de entidades permitidas (una lista exhaustiva de operaciones de TF admitidas en TFLite). Puedes resolverlo de la siguiente manera:
- Agrega operaciones faltantes a la lista de entidades permitidas. 2. Convierte el modelo de TF en un modelo de TFLite y ejecuta la inferencia.
- No se admite en TF: El error ocurre porque TFLite no reconoce el operador de TF personalizado que definiste. Puedes resolverlo de la siguiente manera:
- Crea la operación de TF.
- Convierte el modelo de TF en un modelo de TFLite.
- Crea la operación de TFLite y ejecuta la inferencia vinculándola al tiempo de ejecución de TFLite.
Herramienta de línea de comandos
Si instalaste TensorFlow 2.x desde pip, usa el comando tflite_convert.
Para ver todas las marcas disponibles, usa el siguiente comando:
$ tflite_convert --help
`--output_file`. Type: string. Full path of the output file.
`--saved_model_dir`. Type: string. Full path to the SavedModel directory.
`--keras_model_file`. Type: string. Full path to the Keras H5 model file.
`--enable_v1_converter`. Type: bool. (default False) Enables the converter and flags used in TF 1.x instead of TF 2.x.
You are required to provide the `--output_file` flag and either the `--saved_model_dir` or `--keras_model_file` flag.
Si descargaste el código fuente de TensorFlow 2.x y deseas ejecutar el convertidor desde ese código fuente sin compilar ni instalar el paquete, puedes reemplazar "tflite_convert" por "bazel run
tensorflow/lite/python:tflite_convert --" en el comando.
Cómo convertir un modelo guardado
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Cómo convertir un modelo de Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite