Questa pagina descrive come convertire un modello TensorFlow in un modello TensorFlow Lite (un formato FlatBuffer ottimizzato identificato dall'estensione del file .tflite
) utilizzando il convertitore TensorFlow Lite.
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 tuo 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 del modello di base.
API Python
Codice helper: per ulteriori informazioni sull'API del convertitore TensorFlow Lite, esegui print(help(tf.lite.TFLiteConverter))
.
Converti un modello TensorFlow utilizzando tf.lite.TFLiteConverter
. Un modello TensorFlow viene archiviato utilizzando il formato SavedModel e generato utilizzando le API tf.keras.*
di alto livello (un modello Keras) o le API tf.*
di basso livello (da cui si generano funzioni concrete). Di conseguenza, hai le seguenti tre opzioni (gli esempi sono nelle prossime sezioni):
-
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 funzioni concrete .
Converti un modello salvato (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 funzioni concrete
L'esempio seguente mostra come convertire funzioni concrete in un modello 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)
Altre caratteristiche
Applicare ottimizzazioni . Un'ottimizzazione comunemente utilizzata è la quantizzazione post-training , che può ridurre ulteriormente la latenza e le dimensioni del modello con una perdita minima di precisione.
Aggiungi metadati , che semplificano la creazione di codice wrapper specifico della piattaforma durante la distribuzione di modelli sui dispositivi.
Errori di conversione
Di seguito sono riportati gli errori di conversione 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. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...
Soluzione: l'errore si verifica poiché il modello dispone di operazioni TF che non hanno un'implementazione TFLite corrispondente. Puoi risolvere questo problema utilizzando l'operazione TF nel modello TFLite (consigliato). Se desideri generare un modello solo con le operazioni TFLite, puoi aggiungere una richiesta per l'operazione TFLite mancante nel numero Github n. 21526 (lascia un commento se la tua richiesta non è già stata menzionata) o creare tu stesso l'operazione TFLite .
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 manca dalla lista consentita (un elenco esaustivo di operazioni TF supportate da TFLite). Puoi risolverlo come segue:
Non supportato in TF: l'errore si verifica perché TFLite non è a conoscenza dell'operatore TF personalizzato definito dall'utente. Puoi risolverlo come segue:
- Crea l'operazione TF .
- Convertire il modello TF in un modello TFLite .
- Crea l'operazione TFLite ed esegui l'inferenza collegandola al runtime TFLite.
Strumento da riga di comando
Se hai installato TensorFlow 2.x da pip , utilizza il comando tflite_convert
. Per visualizzare tutti i flag disponibili, utilizzare 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 il sorgente TensorFlow 2.x e desideri eseguire il convertitore da tale sorgente senza compilare e installare il pacchetto, puoi sostituire ' tflite_convert
' con ' bazel run tensorflow/lite/python:tflite_convert --
' nel comando.
Conversione di un modello salvato
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
Prossimi passi
Utilizza l' interprete TensorFlow Lite per eseguire l'inferenza su un dispositivo client (ad esempio mobile, incorporato).