Questa pagina descrive come convertire un modello TensorFlow in un modello LiteRT (un formato FlatBuffer ottimizzato identificato dall'estensione file .tflite) utilizzando il convertitore LiteRT.
Flusso di lavoro di conversione
Il diagramma seguente illustra il flusso di lavoro di alto livello per la conversione del modello:

Figura 1. Flusso di lavoro del convertitore.
Puoi convertire il modello utilizzando una delle seguenti opzioni:
- API Python (consigliata): consente di integrare la conversione nella pipeline di sviluppo, applicare ottimizzazioni, aggiungere metadati e molte altre attività che semplificano il processo di conversione.
- Riga di comando: supporta solo la conversione di modelli di base.
API Python
Codice helper: per saperne di più sull'API di conversione LiteRT, esegui
print(help(tf.lite.TFLiteConverter)).
Converti un modello TensorFlow utilizzando
tf.lite.TFLiteConverter. Un modello TensorFlow viene archiviato utilizzando il formato SavedModel e viene generato utilizzando le API tf.keras.* di alto livello (un modello Keras) o le API tf.* di basso livello (da cui generi funzioni concrete). Di conseguenza, hai a disposizione le
tre opzioni seguenti (gli esempi sono riportati nelle sezioni successive):
tf.lite.TFLiteConverter.from_saved_model()(consigliato): converte un SavedModel.tf.lite.TFLiteConverter.from_keras_model(): Converte un modello Keras.tf.lite.TFLiteConverter.from_concrete_functions(): Converte le funzioni concrete.
Convertire un SavedModel (consigliato)
L'esempio seguente mostra come convertire un SavedModel in un modello 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)
Convertire un modello Keras
L'esempio seguente mostra come convertire un modello Keras in un modello 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)
Convertire le funzioni concrete
Il seguente esempio mostra come convertire le funzioni concrete in un modello 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)
Altre funzionalità
Applica le ottimizzazioni. Un'ottimizzazione comune utilizzata è la quantizzazione post-addestramento, che può ridurre ulteriormente la latenza e le dimensioni del modello con una perdita minima di accuratezza.
Aggiungi metadati, che semplificano la creazione di codice wrapper specifico per la piattaforma durante il deployment dei modelli sui dispositivi.
Errori di conversione
Di seguito sono riportati gli errori di conversione più comuni e le relative soluzioni:
Errore:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.Soluzione: l'errore si verifica perché il modello ha operazioni TF che non hanno un'implementazione TFLite corrispondente. Puoi risolvere il problema utilizzando l'operatore TF nel modello TFLite (opzione consigliata). Se vuoi generare un modello solo con operazioni TFLite, puoi aggiungere una richiesta per l'operazione TFLite mancante nel problema di GitHub n. 21526 (lascia un commento se la tua richiesta non è ancora stata menzionata) o creare l'operazione TFLite autonomamente.
Errore:
.. is neither a custom op nor a flex opSoluzione: se questa operazione TF è:
- Supportato in TF: l'errore si verifica perché l'operazione TF non è presente nell'allowlist (un elenco esaustivo delle operazioni TF supportate da TFLite). Per risolvere il problema:
- Aggiungi le operazioni mancanti alla lista consentita. 2. Converti il modello TF in un modello TFLite ed esegui l'inferenza.
- Non supportato in TF: l'errore si verifica perché TFLite non riconosce l'operatore TF personalizzato definito dall'utente. Per risolvere il problema:
- Crea l'operazione TF.
- Converti il modello TF in un modello TFLite.
- Crea l'operazione TFLite ed esegui l'inferenza collegandola al runtime TFLite.
Strumento a riga di comando
Se hai installato TensorFlow 2.x da
pip, utilizza il comando tflite_convert.
Per visualizzare tutti i flag disponibili, utilizza il seguente 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.
Se hai scaricato l'origine
TensorFlow 2.x e vuoi eseguire
il convertitore da questa origine senza creare e installare il pacchetto, puoi
sostituire "tflite_convert" con "bazel run
tensorflow/lite/python:tflite_convert --" nel comando.
Conversione di un SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Conversione di un modello Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite