Esta página describe cómo convertir un modelo de TensorFlow a un modelo de TensorFlow Lite (un formato FlatBuffer optimizado identificado por la extensión de archivo .tflite
) usando el convertidor de TensorFlow Lite.
Flujo de trabajo de conversión
El siguiente diagrama ilustra el flujo de trabajo de alto nivel para convertir su modelo:
Figura 1. Flujo de trabajo del convertidor.
Puede convertir su modelo usando una de las siguientes opciones:
- API de Python ( recomendado ): esto le permite integrar la conversión en su proceso de desarrollo, aplicar optimizaciones, agregar metadatos y muchas otras tareas que simplifican el proceso de conversión.
- Línea de comando : esto solo admite la conversión de modelos básicos.
API de Python
Código auxiliar: para obtener más información sobre la API del convertidor de TensorFlow Lite, ejecute print(help(tf.lite.TFLiteConverter))
.
Convierta un modelo de TensorFlow usando tf.lite.TFLiteConverter
. Un modelo de TensorFlow se almacena usando el formato SavedModel y se genera usando las API tf.keras.*
de alto nivel (un modelo de Keras) o las API tf.*
de bajo nivel (a partir de las cuales se generan funciones concretas). Como resultado, tiene las siguientes tres opciones (hay ejemplos en las siguientes secciones):
-
tf.lite.TFLiteConverter.from_saved_model()
( recomendado ): convierte un modelo guardado . -
tf.lite.TFLiteConverter.from_keras_model()
: convierte un modelo Keras . -
tf.lite.TFLiteConverter.from_concrete_functions()
: convierte funciones concretas .
Convertir un modelo guardado (recomendado)
El siguiente ejemplo 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)
Convertir un modelo de Keras
El siguiente ejemplo 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)
Convertir funciones concretas
El siguiente ejemplo muestra cómo convertir funciones concretas en un modelo de TensorFlow Lite.
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 características
Aplicar optimizaciones . Una optimización común utilizada es la cuantificación posterior al entrenamiento , que puede reducir aún más la latencia y el tamaño del modelo con una pérdida mínima de precisión.
Agregue metadatos , lo que facilita la creación de código contenedor específico de la plataforma al implementar modelos en dispositivos.
Errores de conversión
Los siguientes son errores de conversión comunes y sus soluciones:
Error:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...
Solución: El error se produce porque su modelo tiene operaciones TF que no tienen una implementación TFLite correspondiente. Puede resolver esto utilizando la operación TF en el modelo TFLite (recomendado). Si desea generar un modelo solo con operaciones TFLite, puede agregar una solicitud para la operación TFLite que falta en el número 21526 de Github (deje un comentario si su solicitud aún no se ha mencionado) o crear la operación TFLite usted mismo.
Error:
.. is neither a custom op nor a flex op
Solución: Si esta operación TF es:
Compatible con TF: el error se produce porque la operación TF no está en la lista de permitidos (una lista exhaustiva de operaciones TF admitidas por TFLite). Puedes resolver esto de la siguiente manera:
No compatible con TF: el error se produce porque TFLite desconoce el operador TF personalizado definido por usted. Puedes resolver esto de la siguiente manera:
- Crea la operación TF .
- Convierta el modelo TF a un modelo TFLite .
- Cree la operación TFLite y ejecute la inferencia vinculándola al tiempo de ejecución de TFLite.
Herramienta de línea de comando
Si instaló TensorFlow 2.x desde pip , use el comando tflite_convert
. Para ver todas las banderas disponibles, use 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 ha descargado la fuente de TensorFlow 2.x y desea ejecutar el convertidor desde esa fuente sin compilar e instalar el paquete, puede reemplazar ' tflite_convert
' con ' bazel run tensorflow/lite/python:tflite_convert --
' en el comando.
Convertir un modelo guardado
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Conversión de un modelo Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite
Próximos pasos
Utilice el intérprete de TensorFlow Lite para ejecutar inferencia en un dispositivo cliente (por ejemplo, móvil, integrado).