Bu sayfada, bir TensorFlow modelinin TensorFlow Lite dönüştürücü kullanılarak nasıl TensorFlow Lite modeline (.tflite
dosya uzantısıyla tanımlanan optimize edilmiş bir FlatBuffer biçimi) nasıl dönüştürüleceği açıklanmaktadır.
Dönüşüm iş akışı
Aşağıdaki şemada, modelinizi dönüştürmek için kullanılan üst düzey 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 yöntem, dönüşümü geliştirme ardışık düzeninize entegre etmenize, optimizasyon uygulamanıza, meta veri eklemenize ve dönüşüm sürecini basitleştiren diğer birçok görevi eklemenize olanak tanır.
- Komut satırı: Bu yalnızca temel model dönüştürmesini destekler.
Python API
Yardımcı kodu: TensorFlow Lite conversioner API hakkında daha fazla bilgi edinmek için print(help(tf.lite.TFLiteConverter))
komutunu çalıştırın.
tf.lite.TFLiteConverter
kullanarak bir TensorFlow modelini dönüştürün.
TensorFlow modeli, SavedModel biçimi kullanılarak depolanır ve üst düzey tf.keras.*
API'leri (Keras modeli) veya alt düzey tf.*
API'leri (somut fonksiyonlar oluşturursunuz) kullanılarak oluşturulur. Sonuç olarak, aşağıdaki üç seçenek sunulur (örnekleri sonraki birkaç bölümde bulabilirsiniz):
tf.lite.TFLiteConverter.from_saved_model()
(önerilir): 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 öğesinin 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ürün
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 fonksiyonları dönüştürme
Aşağıdaki örnekte, somut işlevlerin TensorFlow Lite modeline nasıl 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. Eğitim sonrası niceleme, yaygın olarak kullanılan bir optimizasyon yöntemidir. Bu yöntem, model gecikmenizi ve boyutunuzu minimum doğruluk kaybıyla daha da azaltabilir.
Modelleri cihazlara dağıtırken platforma özel 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ına sahip olmayan TF işlemleri bulunduğundan oluşur. Bu sorunu TFLite modelinde TF seçeneğini kullanarak çözebilirsiniz (önerilir). Yalnızca TFLite işlemlerini içeren bir model oluşturmak istiyorsanız GitHub sorunu #21526'da eksik TFLite işlemi için istek ekleyebilir (isteğinizden daha önce bahsedilmediyse yorum bırakabilirsiniz) veya TFLite seçeneğini kendiniz oluşturabilirsiniz.
Hata:
.. is neither a custom op nor a flex op
Çözüm: Bu TF işlemi:
TF'de desteklenir: Hata, TF işlemi izin verilenler listesinde (TFLite tarafından desteklenen TF işlemlerinin kapsamlı bir listesi) bulunmadığından ortaya çıkar. Bu sorunu aşağıdaki şekilde çözebilirsiniz:
TF'de desteklenmiyor: Hata, TFLite'ın sizin tanımladığınız özel TF operatörünün farkında olmamasından kaynaklanır. Bu sorunu aşağıdaki şekilde çözebilirsiniz:
- TF seçeneğini oluşturun.
- TF modelini TFLite modeline dönüştürün.
- TFLite seçeneğini oluşturun ve TFLite çalışma zamanına bağlayarak çıkarım yapın.
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ız yüklüyse ve dönüştürücüyü paketi oluşturup yüklemeden bu kaynaktan çalıştırmak istiyorsanız komuttaki "tflite_convert
" değerini "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