Na tej stronie dowiesz się, jak przekonwertować model TensorFlow
na model LiteRT (zoptymalizowany
FlatBuffer wykrywany przez
.tflite
) za pomocą konwertera LiteRT.
Proces konwersji
Poniższy diagram przedstawia ogólny proces konwersji Twój model:
Rysunek 1. Przepływ pracy związany z konwerterem.
Możesz przekonwertować model przy użyciu jednej z tych opcji:
- Python API (zalecany): Dzięki temu możesz zintegrować konwersję z procesem programowania, stosowanie optymalizacji, dodawanie metadanych i wiele innych zadań, które upraszczają działanie proces konwersji.
- Wiersz poleceń: obsługuje tylko podstawową konwersję modelu.
Interfejs API języka Python
Kod pomocniczy: więcej informacji o konwerterze LiteRT
API, uruchom print(help(tf.lite.TFLiteConverter))
.
Konwertowanie modelu TensorFlow za pomocą
tf.lite.TFLiteConverter
Model TensorFlow jest przechowywany w formacie SavedModel i jest:
wygenerowanych za pomocą ogólnego interfejsu API tf.keras.*
(modelu Keras) lub
niskopoziomowych interfejsów API tf.*
(za pomocą których generujesz konkretne funkcje). Jako
wynik, są 3 poniższe opcje (przykłady podano w kolejnych
):
tf.lite.TFLiteConverter.from_saved_model()
(zalecane): konwertuje SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: konwertuje Model Keras.tf.lite.TFLiteConverter.from_concrete_functions()
: konwertuje konkretnych funkcji.
Konwertowanie obiektu SavedModel (zalecane)
Z przykładu poniżej dowiesz się, jak przekonwertować SavedModel w TensorFlow Model Lite.
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)
Konwertowanie modelu Keras
Z przykładu poniżej dowiesz się, jak przekonwertować model Keras na TensorFlow Model Lite.
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)
Przekonwertuj konkretne funkcje
Przykład poniżej pokazuje, jak konwertować konkretnych funkcji w Model LiteRT.
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)
Inne funkcje
Zastosuj optymalizacje. Częstym wprowadzona optymalizacja to kwantyzacji po trenowaniu, co może jeszcze bardziej zmniejszyć opóźnienie i rozmiar modelu przy minimalnych stratach dokładności.
dodawać metadane, które ułatwiają tworzenie platformy; określonego kodu opakowanego podczas wdrażania modeli na urządzeniach.
Błędy konwersji
Poniżej podajemy najczęstsze błędy konwersji i ich rozwiązania:
Błąd:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
Rozwiązanie: ten błąd występuje, ponieważ model zawiera operacje TF, które nie mają odpowiednim wdrożeniem TFLite. Możesz rozwiązać ten problem przez za pomocą opcji TF w modelu TFLite. (zalecane). Jeśli chcesz wygenerować model tylko na podstawie operacji TFLite, możesz dodać atrybut żądanie brakującego działania TFLite Problem nr 21526 z GitHub (zostaw komentarz, jeśli Twoja prośba nie została jeszcze opublikowana) lub utworzenie kampanii TFLite siebie.
Błąd:
.. is neither a custom op nor a flex op
Rozwiązanie: jeśli ta operacja TF:
Obsługiwane w pliku TF: błąd występuje, ponieważ w pliku cookie brakuje operacji TF allowlist (pełna lista dozwolonych domen, operacji TF obsługiwanych przez TFLite). Możesz rozwiązać ten problem w następujący sposób:
Nieobsługiwany w TF: błąd występuje, ponieważ TFLite nie wie, gdzie jest tag zdefiniowany przez Ciebie niestandardowy operator TF. Możesz rozwiązać ten problem w następujący sposób:
- Utwórz operację TF.
- Przekonwertuj model TF na model TFLite.
- Tworzenie kampanii TFLite i uruchamiać wnioskowanie, łącząc je ze środowiskiem wykonawczym TFLite.
Narzędzie wiersza poleceń
Jeśli
zainstalowano TensorFlow 2.x z pip, użyj
polecenia tflite_convert
. Aby wyświetlić wszystkie dostępne flagi, użyj
to polecenie:
$ 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.
Jeśli posiadasz
Źródło TensorFlow 2.x
i chcesz uruchomić konwerter z tego źródła bez tworzenia
instaluję pakiet,
możesz zastąpić ciąg „tflite_convert
” z
„bazel run tensorflow/lite/python:tflite_convert --
” w poleceniu.
Konwertowanie obiektu SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Konwersja modelu Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite