TensorFlow-Modelle konvertieren

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:

Workflow für den TFLite-Converter

Abbildung 1. Konverter-Workflow.

Sie haben dazu folgende Möglichkeiten:

  1. 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.
  2. 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):

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:

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