Der TensorFlow Lite - Wandler nimmt ein TensorFlow Modell und erzeugt ein TensorFlow Lite - Modell (ein optimiertes FlatBuffer Format , das von der identifizierten .tflite
Dateierweiterung). Sie haben die folgenden zwei Möglichkeiten, den Konverter zu verwenden:
- Python API (empfohlen): Das macht es einfacher Modelle als Teil der Modellentwicklungspipeline zu konvertieren, wenden Optimierungen, Metadaten hinzufügen und hat viele weitere Features.
- Befehlszeile : Dies unterstützt nur Basismodell Konvertierung.
Python-API
Helper - Code: So identifizieren Sie die installierte Version TensorFlow, führen print(tf.__version__)
und mehr über die TensorFlow Lite Konverter API, laufen zu lernen print(help(tf.lite.TFLiteConverter))
.
Wenn Sie noch TensorFlow 2.x installiert , haben Sie die folgenden zwei Möglichkeiten: (wenn Sie noch TensorFlow 1.x installiert , beziehen sich auf Github )
Konvertieren eines TensorFlow 2.x - Modell
tf.lite.TFLiteConverter
. A TensorFlow 2.x - Modell wird unter Verwendung des SavedModel Formats gespeichert und wird entweder erzeugt , um den High-Level unter Verwendungtf.keras.*
APIs (ein Keras Modell) oder den Low-Level -tf.*
. APIs (von denen generieren Sie konkrete Funktionen). Als Ergebnis haben Sie die folgenden drei Möglichkeiten (Beispiele in den nächsten Abschnitten):tf.lite.TFLiteConverter.from_saved_model()
(empfohlen): Wandelt ein SavedModel .tf.lite.TFLiteConverter.from_keras_model()
: konvertiert ein Keras Modell.tf.lite.TFLiteConverter.from_concrete_functions()
: Wandelt konkrete Funktionen .
Konvertieren eines TensorFlow 1.x - Modell
tf.compat.v1.lite.TFLiteConverter
(Beispiele sind auf Github ):-
tf.compat.v1.lite.TFLiteConverter.from_saved_model()
: konvertiert eine SavedModel . -
tf.compat.v1.lite.TFLiteConverter.from_keras_model_file()
: konvertiert ein Keras Modell. -
tf.compat.v1.lite.TFLiteConverter.from_session()
: Wandelt eine GraphDef von einer Sitzung. -
tf.compat.v1.lite.TFLiteConverter.from_frozen_graph()
: Wandelt eine gefrorene GraphDef aus einer Datei. Wenn Sie Checkpoints haben, dann wandeln sie zuerst zu einer gefrorenen GraphDef Datei und dann diese API verwenden , wie gezeigt hier .
-
Konvertieren eines gespeicherten Modells (empfohlen)
Das folgende Beispiel zeigt , wie ein konvertieren SavedModel in ein TensorFlow Lite - Modell.
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)
Konvertieren eines Keras-Modells
Das folgende Beispiel zeigt , wie ein konvertieren Keras Modell in ein TensorFlow Lite - Modell.
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)
Konvertieren Sie konkrete Funktionen
Das folgende Beispiel zeigt , wie man konvertiert konkrete Funktionen in ein TensorFlow Lite - Modell.
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.
# Notes that for the versions earlier than TensorFlow 2.7, the
# from_concrete_functions API is able to work when there is only the first
# argument given:
# > converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
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)
Andere Eigenschaften
Bewerben Optimierungen . Eine gemeinsame Optimierung verwendet wird , ist nach dem Training Quantisierung , die weiter Modell Latenz und Größe mit minimalem Verlust an Genauigkeit reduzieren.
Hinzufügen von Metadaten , die macht es einfacher , plattformspezifische Wrapper - Code zu erstellen , wenn Modelle auf Geräte bereitstellen.
Konvertierungsfehler
Im Folgenden sind häufige Konvertierungsfehler und ihre Lösungen aufgeführt:
Fehler:
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: ..., .., ...
-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: ..., .., ...
Lösung: Der Fehler tritt auf, da Ihr Modell TF-Operationen enthält, die keine entsprechende TFLite-Implementierung haben. Sie können dieses Problem lösen , indem Sie den TF - op im TFLite - Modell (empfohlen). Wenn Sie nur ein Modell mit TFLite ops generieren möchten, können Sie entweder eine Anforderung für die fehlende TFLite op in hinzufügen Github Ausgabe # 21526 (lassen Sie einen Kommentar , wenn Ihre Anfrage nicht bereits erwähnt wurde) oder erstellen Sie die TFLite op selbst.
Fehler:
.. is neither a custom op nor a flex op
Lösung: Wenn diese TF-Operation lautet:
Unterstützt in TF: Der Fehler tritt auf, weil die TF op aus dem fehlenden AllowList (eine erschöpfende Liste von TF ops unterstützt von TFLite). Sie können dies wie folgt beheben:
In TF nicht unterstützt: Der Fehler tritt auf, weil TFLite den von Ihnen definierten benutzerdefinierten TF-Operator nicht kennt. Sie können dies wie folgt beheben:
- Erstellen Sie die TF op .
- Konvertieren Sie das TF - Modell in TFLite Modell .
- Erstellen Sie die TFLite op und führen Inferenz durch sie der TFLite Laufzeit verbindet.
Befehlszeilentool
Es wird dringend empfohlen, die Verwendung Python API oben statt aufgelistet, falls möglich.
Wenn Sie noch TensorFlow 2.x von pip installiert , verwenden Sie den tflite_convert
Befehl wie folgt: (wenn Sie noch TensorFlow 2.x von der tflite_convert
bazel run //tensorflow/lite/python:tflite_convert --
Quelle installiert , dann können Sie ersetzen ‚ tflite_convert
‘ mit ' bazel run //tensorflow/lite/python:tflite_convert --
'in den folgenden Abschnitten, und wenn Sie noch TensorFlow 1.x installiert dann auf Github beziehen ( Referenz , Beispiele ))
tflite_convert
: alle verfügbaren Flags anzuzeigen, verwenden Sie den folgenden Befehl ein :
$ 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.
Konvertieren eines gespeicherten Modells
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Konvertieren eines Keras H5-Modells
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite
Nächste Schritte
Verwenden Sie das TensorFlow Lite - Interpreter zum Laufe Inferenz auf einem Client - Gerät (zB Mobil, eingebettet).