Questa pagina descrive come convertire un modello TensorFlow
in un modello LiteRT (un modello
FlatBuffer identificato dal
.tflite
) utilizzando il convertitore LiteRT.
Flusso di lavoro delle conversioni
Il diagramma seguente illustra il flusso di lavoro generale per la conversione il modello:
Figura 1. Flusso di lavoro della conversione.
Puoi convertire il modello utilizzando una delle seguenti opzioni:
- API Python (consigliata): Ciò ti consente di integrare la conversione nella tua pipeline di sviluppo, applicare ottimizzazioni, aggiungere metadati e molte altre attività che semplificano il processo di conversione.
- Riga di comando: supporta solo la conversione del modello di base.
API Python
Codice di supporto: per scoprire di più sul convertitore LiteRT
API, 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
generati utilizzando le API tf.keras.*
di alto livello (un modello Keras)
le API tf.*
di basso livello (dalle quali generi funzioni concrete). Come
risultato, hai le seguenti tre opzioni (esempi sono i prossimi
sezioni):
tf.lite.TFLiteConverter.from_saved_model()
(consigliato): genera una conversione. un SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: converte un modello Keras.tf.lite.TFLiteConverter.from_concrete_functions()
: effettua una conversione funzioni concrete:
Converti un SavedModel (consigliato)
L'esempio seguente mostra come convertire un SavedModel in un TensorFlow modello 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)
Converti un modello Keras
L'esempio seguente mostra come convertire un Modello Keras in un TensorFlow modello 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 funzioni concrete
L'esempio seguente mostra come convertire 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à
Applicare le ottimizzazioni. Un comune dell'ottimizzazione utilizzata è quantizzazione post-addestramento, il che può ridurre ulteriormente la latenza e le dimensioni del modello con una perdita minima di la precisione.
Aggiungi metadati per semplificare la creazione della piattaforma un codice wrapper specifico 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 dispone di operazioni TF senza un la corrispondente implementazione di TFLite. Puoi risolvere questo problema usando l'operazione TF nel modello TFLite (consigliato). Se vuoi generare un modello solo con operazioni TFLite, puoi aggiungere un richiesta per l'operazione TFLite mancante GitHub numero 21526 (lascia un commento se la tua richiesta non è già stata menzionata) oppure crea l'operazione TFLite per te.
Errore:
.. is neither a custom op nor a flex op
Soluzione: se questa operazione TF è:
Supportato in TF: l'errore si verifica perché l'operazione TF non è presente nella allowlist (un elenco completo operazioni TF supportate da TFLite). Puoi risolvere il problema nel seguente modo:
Non supportato in TF: l'errore si verifica perché TFLite non è a conoscenza del un operatore TF personalizzato definito da te. Puoi risolvere il problema nel seguente modo:
- Crea l'operazione TF.
- Converti il modello TF in un modello TFLite.
- Crea l'operazione TFLite ed eseguire l'inferenza collegandola al runtime TFLite.
Strumento a riga di comando
Se hai
TensorFlow 2.x installato da pip, utilizza
il comando tflite_convert
. Per visualizzare tutti i flag disponibili, utilizza la
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
Origine TensorFlow 2.x
scaricato e vuoi eseguire il convertitore da quell'origine senza creare
installando 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