Auf dieser Seite wird beschrieben, wie Sie ein TensorFlow-Modell konvertieren
LiteRT-Modell (optimiertes Modell)
FlatBuffer-Format, das vom
.tflite
) mithilfe des LiteRT-Konvertierungsprogramms.
Conversion-Workflow
Das folgende Diagramm zeigt den Workflow für die Konvertierung Ihrem Modell:
Abbildung 1. Converter-Workflow.
Sie können Ihr Modell mit einer der folgenden Optionen umwandeln:
- Python API (empfohlen): So können Sie die Konvertierung in Ihre Entwicklungspipeline integrieren, Optimierungen anwenden, Metadaten hinzufügen und viele andere Aufgaben des Conversion-Prozesses.
- Befehlszeile: Hier wird nur die grundlegende Modellkonvertierung unterstützt.
Python API
Hilfscode: Weitere Informationen zum LiteRT-Converter
API, führen Sie print(help(tf.lite.TFLiteConverter))
aus.
TensorFlow-Modells konvertieren mit
tf.lite.TFLiteConverter
Ein TensorFlow-Modell wird im SavedModel-Format gespeichert und
generiert mit den übergeordneten tf.keras.*
APIs (ein Keras-Modell) oder
Low-Level-tf.*
-APIs, mit denen Sie konkrete Funktionen generieren Als
haben Sie die folgenden drei Optionen (Beispiele finden Sie in den
Abschnitten)
tf.lite.TFLiteConverter.from_saved_model()
(empfohlen): Wird konvertiert Ein SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: Wandelt ein Keras-Modell.tf.lite.TFLiteConverter.from_concrete_functions()
: wird konvertiert konkrete Funktionen.
SavedModel konvertieren (empfohlen)
Im folgenden Beispiel sehen Sie, wie ein SavedModel in ein TensorFlow-Modell umwandeln 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)
Keras-Modell konvertieren
Im folgenden Beispiel sehen Sie, wie ein Keras-Modell in ein TensorFlow-Modell umwandeln 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)
Konkrete Funktionen konvertieren
Im folgenden Beispiel sehen Sie, wie die konkretisieren, LiteRT-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.
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 gemeinsame verwendete Optimierung ist nach der Trainingsquantisierung So können Sie die Latenz und Größe des Modells bei minimalem Verlust Genauigkeit.
Metadaten hinzufügen, um das Erstellen einer Plattform zu erleichtern Wrapper-Code beim Bereitstellen von Modellen auf Geräten verwendet.
Conversion-Fehler
Im Folgenden werden häufige Conversion-Fehler 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.
Lösung: Der Fehler tritt auf, wenn in Ihrem Modell TF-Vorgänge ohne entsprechende TFLite-Implementierung. Sie können dieses Problem beheben, indem Sie mithilfe des TF-Vorgangs im TFLite-Modell (empfohlen). Wenn Sie ein Modell nur mit TFLite-Operationen generieren möchten, können Sie entweder ein Anfrage für die fehlende TFLite-Operation in GitHub-Problem 21526 (Kommentar hinterlassen, wenn Ihre Anfrage nicht bereits erwähnt wurde) oder TFLite-Vorgang erstellen selbst.
Fehler:
.. is neither a custom op nor a flex op
Lösung: Wenn dieser TF-Vorgang so ist:
Unterstützt in TF: Der Fehler tritt auf, weil der TF-Vorgang im allowlist (eine vollständige Liste aller von TFLite unterstützte TF-Vorgänge). Sie können dieses Problem folgendermaßen beheben:
Nicht unterstützt in TF: Der Fehler tritt auf, weil TFLite nicht bekannt ist. benutzerdefinierten TF-Operator. Sie können dieses Problem folgendermaßen beheben:
- Erstellen Sie den TF-Vorgang.
- Konvertieren Sie das TF-Modell in ein TFLite-Modell.
- TFLite-Vorgang erstellen und Inferenz ausführen, indem Sie es mit der TFLite-Laufzeit verknüpfen.
Befehlszeilentool
Wenn Sie
TensorFlow 2.x aus pip installiert, verwenden Sie
den Befehl tflite_convert
. Wenn Sie alle verfügbaren Flags ansehen möchten, verwenden Sie den
folgenden Befehl:
$ 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
und den Converter aus dieser Quelle ausführen möchten, ohne
Installation des Pakets
können Sie "tflite_convert
" mit
„bazel run tensorflow/lite/python:tflite_convert --
“ im Befehl.
Ein SavedModel konvertieren
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Ein Keras-H5-Modell konvertieren
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite