Auf dieser Seite wird beschrieben, wie Sie ein TensorFlow-Modell mithilfe des TensorFlow Lite-Konverters in ein TensorFlow Lite-Modell (ein optimiertes FlatBuffer-Format, das durch die Dateiendung .tflite
identifiziert wird) konvertieren.
Konvertierungs-Workflow
Das folgende Diagramm veranschaulicht den allgemeinen Workflow zum Konvertieren Ihres Modells:
Abbildung 1: Konvertierungsprozess.
Sie können Ihr Modell mit einer der folgenden Optionen konvertieren:
- Python API (empfohlen): Damit können Sie die Konvertierung in Ihre Entwicklungspipeline integrieren, Optimierungen anwenden, Metadaten hinzufügen und viele andere Aufgaben ausführen, die den Konvertierungsprozess vereinfachen.
- Befehlszeile: Unterstützt nur die grundlegende Modellkonvertierung.
Python API
Hilfscode: Um mehr über die TensorFlow Lite Converter API zu erfahren, führen Sie print(help(tf.lite.TFLiteConverter))
aus.
Konvertieren Sie ein TensorFlow-Modell mit tf.lite.TFLiteConverter
.
Ein TensorFlow-Modell wird im Literal-Format gespeichert und entweder mit den übergeordneten tf.keras.*
APIs (ein Keras-Modell) oder den untergeordneten tf.*
APIs (mit denen Sie konkrete Funktionen generieren) generiert. Daraufhin haben Sie die folgenden drei Optionen (Beispiele finden Sie in den nächsten Abschnitten):
tf.lite.TFLiteConverter.from_saved_model()
(empfohlen): Wandelt ein SavedModel um.tf.lite.TFLiteConverter.from_keras_model()
: Konvertiert ein Keras-Modell.tf.lite.TFLiteConverter.from_concrete_functions()
: Wandelt konkrete Funktionen um.
Gespeichertes Modell konvertieren (empfohlen)
Im folgenden Beispiel wird gezeigt, 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
Das folgende Beispiel zeigt, wie ein Keras-Modell in ein TensorFlow Lite-Modell konvertiert wird.
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 TensorFlow Lite-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
Wenden Sie Optimierungen an. Eine häufig verwendete Optimierung ist die Quantisierung nach dem Training, wodurch die Modelllatenz und -größe mit minimalem Genauigkeitsverlust weiter reduziert werden können.
Metadaten hinzufügen, um das Erstellen plattformspezifischer Wrapper-Codes beim Bereitstellen von Modellen auf Geräten zu vereinfachen.
Konvertierungsfehler
Im Folgenden finden Sie häufige Konvertierungsfehler und ihre 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, wenn das Modell TF-Operationen hat, die keine entsprechende TFLite-Implementierung haben. Sie können dies 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 eine Anfrage für die fehlende TFLite-Operation in GitHub-Problem 21526 hinzufügen (einen Kommentar hinterlassen, wenn Ihre Anfrage noch nicht erwähnt wurde) oder den TFLite-Vorgang selbst erstellen.
Fehler:
.. is neither a custom op nor a flex op
Lösung: Wenn dieser TF-Vorgang wie folgt lautet:
In TF unterstützt: Der Fehler tritt auf, weil der TF-Vorgang in der Zulassungsliste fehlt (eine vollständige Liste der von TFLite unterstützten TF-Vorgänge). Sie können das Problem so beheben:
In TF nicht unterstützt: Der Fehler tritt auf, weil TFLite den von Ihnen definierten benutzerdefinierten TF-Operator nicht erkennt. Sie können das Problem so beheben:
- Erstellen Sie das TF-Objekt.
- Konvertieren Sie das TF-Modell in ein TFLite-Modell.
- Erstellen Sie die TFLite-Operation und führen Sie Inferenz aus, indem Sie sie mit der TFLite-Laufzeit verknüpfen.
Befehlszeilentool
Wenn Sie TensorFlow 2.x aus pip installiert haben, verwenden Sie den Befehl tflite_convert
. Verwenden Sie den folgenden Befehl, um alle verfügbaren Flags anzuzeigen:
$ 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 die TensorFlow 2.x-Quelle heruntergeladen wurde und Sie den Converter 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.
Ein Modell 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