Auf dieser Seite wird beschrieben, wie Sie ein TensorFlow-Modell mit dem LiteRT-Converter in ein LiteRT-Modell (ein optimiertes FlatBuffer-Format mit der Dateiendung .tflite) konvertieren.
Konvertierungsworkflow
Das folgende Diagramm veranschaulicht den allgemeinen Workflow für die Konvertierung Ihres Modells:

Abbildung 1. Konverter-Workflow.
Sie haben dazu folgende Möglichkeiten:
- Python API (empfohlen): Damit können Sie die Konvertierung in Ihren Entwicklungs-Workflow einbinden, Optimierungen anwenden, Metadaten hinzufügen und viele andere Aufgaben ausführen, die den Konvertierungsprozess vereinfachen.
- Befehlszeile: Hier wird nur die grundlegende Modellkonvertierung unterstützt.
Python API
Hilfscode: Wenn Sie mehr über die LiteRT Converter API erfahren möchten, führen Sie print(help(tf.lite.TFLiteConverter)) aus.
Konvertieren Sie ein TensorFlow-Modell mit tf.lite.TFLiteConverter. Ein TensorFlow-Modell wird im SavedModel-Format gespeichert und entweder mit den tf.keras.*-APIs auf übergeordneter Ebene (ein Keras-Modell) oder den tf.*-APIs auf untergeordneter Ebene (aus denen Sie konkrete Funktionen generieren) erstellt. Daher haben Sie die folgenden drei Optionen (Beispiele finden Sie in den nächsten Abschnitten):
tf.lite.TFLiteConverter.from_saved_model()(empfohlen): Konvertiert ein SavedModel.tf.lite.TFLiteConverter.from_keras_model(): Konvertiert ein Keras-Modell.tf.lite.TFLiteConverter.from_concrete_functions(): Konvertiert konkrete Funktionen.
SavedModel konvertieren (empfohlen)
Das folgende Beispiel zeigt, wie ein SavedModel in ein TensorFlow Lite-Modell konvertiert wird.
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)
Keras-Modell konvertieren
Im folgenden Beispiel wird gezeigt, wie Sie ein Keras-Modell in ein TensorFlow Lite-Modell konvertieren.
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)
Konkrete Funktionen konvertieren
Das folgende Beispiel zeigt, wie konkrete Funktionen in ein LiteRT-Modell konvertiert werden.
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)
Weitere Funktionen
Optimierungen anwenden Eine häufig verwendete Optimierung ist die Quantisierung nach dem Training, mit der sich die Latenz und Größe Ihres Modells weiter reduzieren lassen, ohne dass die Genauigkeit wesentlich beeinträchtigt wird.
Metadaten hinzufügen, um die Erstellung plattformspezifischen Wrapper-Codes beim Bereitstellen von Modellen auf Geräten zu vereinfachen.
Fehler bei der Konvertierung
Im Folgenden finden Sie häufige Fehler bei der Konvertierung und die entsprechenden Lösungen:
Fehler:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.Lösung: Der Fehler tritt auf, weil Ihr Modell TF-Operationen enthält, für die es keine entsprechende TFLite-Implementierung gibt. Sie können dieses Problem beheben, indem Sie den TF-Vorgang im TFLite-Modell verwenden (empfohlen). Wenn Sie ein Modell nur mit TFLite-Vorgängen generieren möchten, können Sie entweder in GitHub-Problem #21526 eine Anfrage für den fehlenden TFLite-Vorgang hinzufügen (hinterlassen Sie einen Kommentar, wenn Ihre Anfrage noch nicht erwähnt wurde) oder den TFLite-Vorgang selbst erstellen.
Fehler:
.. is neither a custom op nor a flex opLösung: Wenn dieser TF-Vorgang:
- In TF unterstützt: Der Fehler tritt auf, weil die TF-Operation in der Zulassungsliste fehlt. Diese enthält eine vollständige Liste der TF-Operationen, die von TFLite unterstützt werden. So lässt sich das Problem beheben:
- Fehlende Vorgänge auf die Zulassungsliste setzen: 2. TF-Modell in ein TFLite-Modell konvertieren und Inferenz ausführen:
- Nicht unterstützt in TF: Der Fehler tritt auf, weil TFLite den von Ihnen definierten benutzerdefinierten TF-Operator nicht kennt. So lässt sich das Problem beheben:
- TF-Vorgang erstellen:
- TF-Modell in ein TFLite-Modell konvertieren
- TFLite-Vorgang erstellen und Inferenzen ausführen, indem Sie ihn mit der TFLite-Laufzeit verknüpfen.
Befehlszeilentool
Wenn Sie TensorFlow 2.x über pip installiert haben, verwenden Sie den Befehl tflite_convert.
Mit dem folgenden Befehl rufen Sie alle verfügbaren Flags auf:
$ 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.
Wenn Sie die TensorFlow 2.x-Quelle heruntergeladen haben und den Konverter aus dieser Quelle ausführen möchten, ohne das Paket zu erstellen und zu installieren, können Sie im Befehl „tflite_convert“ durch „bazel run
tensorflow/lite/python:tflite_convert --“ ersetzen.
SavedModel konvertieren
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Keras-H5-Modell konvertieren
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite