TensorFlow Lite dönüştürücü

TensorFlow Lite dönüştürücü bir TensorFlow modeli alır ve bir TensorFlow Lite modeli (optimize edilmiş üretir FlatBuffer tarafından tespit biçimi .tflite dosya uzantısı). Dönüştürücüyü kullanmak için aşağıdaki iki seçeneğiniz vardır:

  1. Python API (önerilir): Bu daha kolay bir model geliştirme boru hattının bir parçası olarak modellerini dönüştürmek için yapar, optimizasyonlar, meta veri eklemek ve daha birçok özelliğe sahiptir geçerlidir.
  2. Komut satırı : Bu yalnızca temel model dönüşüm destekler.

TFLite dönüştürücü iş akışı

Python API'si

Yardımcısı'nın kodu: yüklü TensorFlow sürümünü çalıştırmak belirlemek için print(tf.__version__) ve daha TensorFlow Lite çevirici API hakkında bilgi edinmek için, çalışma print(help(tf.lite.TFLiteConverter)) .

Eğer ettiyseniz TensorFlow 2.x kurulu , aşağıdaki iki seçenek vardır: (eğer verdiyseniz TensorFlow 1.x yüklü , bakın Github )

Aşağıdaki örnek gösterir nasıl bir dönüştürme SavedModel bir TensorFlow Lite modeli.

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 modelini dönüştürme

Aşağıdaki örnek gösterir nasıl bir dönüştürmek için Keras bir TensorFlow Lite modeli modeli.

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)

Somut fonksiyonları dönüştür

Dönüştürmek için nasıl Aşağıdaki örnek gösterir somut işlevlerini bir TensorFlow Lite modeli.

import tensorflow as tf

# Create a model using low-level tf.* APIs
class Squared(tf.Module):
  @tf.function
  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)

Diğer özellikler

  • Uygula optimizasyonları . Kullanılan yaygın bir optimizasyon sonrası eğitim nicemleme ayrıca doğruluk kaybıyla modeliniz gecikmesini ve boyutunu azaltabilir.

  • Ekle meta cihazlarda modelleri dağıtırken daha kolay platforma özel sarıcı kodu oluşturmak için yapar.

Dönüşüm hataları

Aşağıdakiler yaygın dönüştürme hataları ve çözümleridir:

  • Hata: Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...

    Çözüm: Hata, modelinizde karşılık gelen bir TFLite uygulamasına sahip olmayan TF işlemleri olduğundan oluşur. Sen bu çözebilirsiniz TFLite modelinde TF op ile (önerilir). Yalnızca TFLite ops sahip bir model oluşturmak istiyorsanız, ya eksik TFLite op için bir istek ekleyebilirsiniz Github sorunu # 21526 (sizin isteğiniz, daha önce bahsedildiği edilmemiş ise Yorum bırakmak) veya TFLite op oluşturmak kendin.

  • Hata: .. is neither a custom op nor a flex op

    Çözüm: Bu TF işlemi ise:

Komut Satırı Aracı

Oldukça kullanmak önerilir Python API mümkünse yerine yukarıda belirtilen.

Eğer ettiyseniz TensorFlow pipten 2.x kurulu , kullanmak tflite_convert aşağıdaki gibi komutu: (eğer verdiyseniz kaynaktan TensorFlow 2.x kurulu o zaman 'yerini alabilir tflite_convert ' ile ' bazel run //tensorflow/lite/python:tflite_convert -- 'aşağıdaki bölümlerde ve verdiyseniz TensorFlow 1.x yüklü sonra Github bakın ( referans , örnekler ))

tflite_convert : Mevcut tüm bayrakları görüntülemek için aşağıdaki komutu kullanın:

$ 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.

SavedModel'i Dönüştürme

tflite_convert \
  --saved_model_dir=/tmp/mobilenet_saved_model \
  --output_file=/tmp/mobilenet.tflite

Keras H5 modelini dönüştürme

tflite_convert \
  --keras_model_file=/tmp/mobilenet_keras_model.h5 \
  --output_file=/tmp/mobilenet.tflite

Sonraki adımlar

Kullanım TensorFlow Lite tercüman bir istemci cihaz üzerinde çalışma çıkarsama (örneğin mobil, gömülü).