Bu sayfada, LiteRT dönüştürücüyü kullanarak TensorFlow modelini LiteRT modeline (.tflite dosya uzantısıyla tanımlanan, optimize edilmiş bir FlatBuffer biçimi) nasıl dönüştüreceğiniz açıklanmaktadır.
Dönüşüm iş akışı
Aşağıdaki şemada, modelinizi dönüştürmeye yönelik genel iş akışı gösterilmektedir:

Şekil 1. Dönüştürücü iş akışı.
Aşağıdaki seçeneklerden birini kullanarak modelinizi dönüştürebilirsiniz:
- Python API (önerilir): Bu API, dönüşümü geliştirme hattınıza entegre etmenize, optimizasyonlar uygulamanıza, meta veriler eklemenize ve dönüşüm sürecini basitleştiren diğer birçok görevi gerçekleştirmenize olanak tanır.
- Komut satırı: Yalnızca temel model dönüştürme desteklenir.
Python API
Yardımcı kod: LiteRT dönüştürücü API hakkında daha fazla bilgi edinmek için
print(help(tf.lite.TFLiteConverter)) komutunu çalıştırın.
tf.lite.TFLiteConverter kullanarak TensorFlow modelini dönüştürün. TensorFlow modeli, SavedModel biçiminde depolanır ve yüksek düzey tf.keras.* API'leri (Keras modeli) veya düşük düzey tf.* API'leri (somut işlevler oluşturduğunuz) kullanılarak oluşturulur. Bu nedenle, aşağıdaki üç seçeneğiniz vardır (örnekler sonraki birkaç bölümde verilmiştir):
tf.lite.TFLiteConverter.from_saved_model()(önerilir): Bir SavedModel'i dönüştürür.tf.lite.TFLiteConverter.from_keras_model(): Keras modelini dönüştürür.tf.lite.TFLiteConverter.from_concrete_functions(): Somut işlevleri dönüştürür.
SavedModel'i dönüştürme (önerilir)
Aşağıdaki örnekte, SavedModel'in TensorFlow Lite modeline nasıl dönüştürüleceği gösterilmektedir.
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 örnekte, Keras modelinin TensorFlow Lite modeline nasıl dönüştürüleceği gösterilmektedir.
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 işlevleri dönüştürme
Aşağıdaki örnekte, somut işlevlerin nasıl LiteRT modeline dönüştürüleceği gösterilmektedir.
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)
Diğer özellikler
Optimizasyonlar uygulayın. Yaygın olarak kullanılan bir optimizasyon yöntemi olan eğitim sonrası nicemleme, doğrulukta minimum kayıpla modelinizin gecikme süresini ve boyutunu daha da azaltabilir.
Cihazlara model dağıtırken platforma özgü sarmalayıcı kodu oluşturmayı kolaylaştıran meta veriler ekleyin.
Dönüşüm hataları
Sık karşılaşılan dönüşüm hataları ve çözümleri aşağıda verilmiştir:
Hata:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.Çözüm: Hata, modelinizde karşılık gelen bir TFLite uygulaması olmayan TF işlemleri olduğu için oluşur. Bu sorunu TFLite modelinde TF op'u kullanarak (önerilir) çözebilirsiniz. Yalnızca TFLite işlemleri içeren bir model oluşturmak istiyorsanız GitHub sorunu #21526'da eksik TFLite işlemi için istekte bulunabilir (isteğiniz daha önce belirtilmediyse yorum bırakın) veya TFLite işlemini kendiniz oluşturabilirsiniz.
Hata:
.. is neither a custom op nor a flex opÇözüm: Bu TF işlemi:
- TF'de desteklenir: Hata, TF op'un izin verilenler listesinde (TFLite tarafından desteklenen TF op'larının kapsamlı listesi) eksik olmasından kaynaklanır. Bu sorunu aşağıdaki şekilde çözebilirsiniz:
- İzin verilenler listesine eksik işlemler ekleyin. 2. TF modelini TFLite modeline dönüştürün ve çıkarım çalıştırın.
- TF'de desteklenmiyor: Hata, TFLite'ın sizin tanımladığınız özel TF operatöründen haberdar olmaması nedeniyle oluşur. Bu sorunu aşağıdaki şekilde çözebilirsiniz:
- TF operasyonunu oluşturun.
- TF modelini TFLite modeline dönüştürün.
- TFLite işlemini oluşturun ve TFLite çalışma zamanına bağlayarak çıkarım gerçekleştirin.
Komut Satırı Aracı
TensorFlow 2.x'i pip'ten yüklediyseniz tflite_convert komutunu kullanın.
Kullanılabilir tüm işaretleri 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.
TensorFlow 2.x kaynağını indirdiyseniz ve paketi oluşturup yüklemeden dönüştürücüyü bu kaynaktan çalıştırmak istiyorsanız komuttaki "tflite_convert"yı "bazel run
tensorflow/lite/python:tflite_convert --" ile değiştirebilirsiniz.
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