En esta página, se describe cómo convertir un modelo de TensorFlow
a un modelo LiteRT (un modelo de
FlatBuffer identificado por el
.tflite
) con el conversor de LiteRT.
Flujo de trabajo de conversiones
En el siguiente diagrama, se ilustra el flujo de trabajo de alto nivel para la conversión tu modelo:
Figura 1: Flujo de trabajo de Converter.
Puedes convertir tu modelo mediante una de las siguientes opciones:
- API de Python (recomendada): Esto 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 el conversor de LiteRT
API, ejecuta print(help(tf.lite.TFLiteConverter))
.
Convertir un modelo de TensorFlow con
tf.lite.TFLiteConverter
Un modelo de TensorFlow se almacena con el formato de modelo guardado y se
generadas con las APIs de tf.keras.*
de alto nivel (un modelo de Keras) o
las APIs de tf.*
de bajo nivel (a partir de las cuales generas funciones concretas) Como
resultado, tienes las siguientes tres opciones (los ejemplos se encuentran en los próximos
secciones):
tf.lite.TFLiteConverter.from_saved_model()
(recomendado): Conversiones un SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: Convierte un modelo 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 TensorFlow Modelo 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 TensorFlow Modelo 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 una Modelo 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. Un problema común la optimización utilizada es cuantización posterior al entrenamiento, lo que puede reducir aún más la latencia y el tamaño de tu modelo con una pérdida mínima exactitud.
Agrega metadatos, lo que facilita la creación de la plataforma código de wrapper específico cuando se implementan modelos en dispositivos.
Errores de conversión
A continuación, se incluyen errores comunes de conversión y sus soluciones:
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 cuando tu modelo tiene operaciones de TF que no tienen un implementación de TFLite correspondiente. Puedes resolver esto de la siguiente manera: usar la op de TF en el modelo de TFLite (recomendado). Si quieres generar un modelo solo con operaciones de TFLite, puedes agregar un de la op de TFLite faltante en Problema #21526 de GitHub (deja un comentario si aún no se mencionó tu solicitud). crea la op de TFLite tú mismo.
Error:
.. is neither a custom op nor a flex op
Solución: Si la operación de TF tiene las siguientes características:
Se admite en TF: El error se produce porque la op de TF falta en el allowlist (una lista exhaustiva de TF ops compatibles con TFLite). Puedes resolverlo de la siguiente manera:
No se admite en TF: El error se produce porque TFLite no reconoce el de TF personalizado que definas. Puedes resolverlo de la siguiente manera:
- Crea la op de TF.
- Convierte el modelo de TF en un modelo de TFLite.
- Crea la operación de TFLite y ejecutar la inferencia vinculándola al entorno de ejecución de TFLite.
Herramienta de línea de comandos
Si has
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 tienes la opción
Fuente de TensorFlow 2.x
y quieres ejecutar el convertidor desde esa fuente sin compilar ni
instalar el paquete
puedes reemplazar “tflite_convert
” con
"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