Bu sayfada, TensorFlow Lite dönüştürücü kullanılarak bir TensorFlow modelinin bir TensorFlow Lite modeline ( .tflite
dosya uzantısıyla tanımlanan optimize edilmiş bir FlatBuffer formatı) nasıl dönüştürüleceği açıklanmaktadır.
Dönüşüm iş akışı
Aşağıdaki diyagram, modelinizi dönüştürmek için üst düzey iş akışını göstermektedir:
Ş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, dönüşümü geliştirme hattınıza entegre etmenize, optimizasyonlar uygulamanıza, meta veriler eklemenize ve dönüştürme sürecini basitleştiren diğer birçok göreve olanak tanır.
- Komut satırı : Bu yalnızca temel model dönüştürmeyi destekler.
Python API'si
Yardımcı kod: TensorFlow Lite dönüştürücü API'si hakkında daha fazla bilgi edinmek için print(help(tf.lite.TFLiteConverter))
çalıştırın.
tf.lite.TFLiteConverter
kullanarak bir TensorFlow modelini dönüştürün. Bir TensorFlow modeli, SavedModel formatı kullanılarak depolanır ve ya yüksek seviyeli tf.keras.*
API'leri (bir Keras modeli) ya da düşük seviyeli tf.*
API'leri (somut işlevler oluşturduğunuz) kullanılarak oluşturulur. Sonuç olarak, aşağıdaki üç seçeneğe sahipsiniz (örnekler sonraki birkaç bölümde yer almaktadır):
-
tf.lite.TFLiteConverter.from_saved_model()
( önerilen ): SavedModel'i dönüştürür. -
tf.lite.TFLiteConverter.from_keras_model()
: Bir 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ürün (önerilir)
Aşağıdaki örnek, SavedModel'in TensorFlow Lite modeline nasıl dönüştürüleceğini gösterir.
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 bir 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ürün
Aşağıdaki örnek, somut fonksiyonların TensorFlow Lite modeline nasıl dönüştürüleceğini gösterir.
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. Kullanılan yaygın bir optimizasyon, eğitim sonrası nicelemedir ; bu, doğrulukta minimum kayıpla modelinizin gecikmesini ve boyutunu daha da azaltabilir.
Modelleri cihazlara dağıtırken platforma özel sarmalayıcı kod oluşturmayı kolaylaştıran meta veriler ekleyin.
Dönüşüm hataları
Aşağıda yaygın dönüştürme hataları ve bunların çözümleri yer almaktadır:
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: Modelinizde karşılık gelen bir TFLite uygulaması olmayan TF işlemleri bulunduğundan hata oluşur. Bunu TFLite modelindeki TF op'u kullanarak çözebilirsiniz (önerilir). Yalnızca TFLite operasyonları içeren bir model oluşturmak istiyorsanız Github sayı #21526'ya eksik TFLite operasyonu için bir istek ekleyebilir (isteğinizden daha önce bahsedilmediyse yorum bırakın) veya TFLite operasyonunu kendiniz oluşturabilirsiniz .
Hata:
.. is neither a custom op nor a flex op
Çözüm: Eğer bu TF operasyonu:
TF'de desteklenir: Hata, TF işleminin izin verilenler listesinde (TFLite tarafından desteklenen kapsamlı bir TF işlemleri listesi) eksik olması nedeniyle oluşur. Bunu şu şekilde çözebilirsiniz:
TF'de desteklenmiyor: Hata, TFLite'ın sizin tarafınızdan tanımlanan özel TF operatöründen habersiz olması nedeniyle oluşur. Bunu şu şekilde çözebilirsiniz:
- TF operasyonunu oluşturun .
- TF modelini TFLite modeline dönüştürün .
- TFLite operasyonunu oluşturun ve TFLite çalışma zamanına bağlayarak çıkarımı çalıştırın.
Komut Satırı Aracı
TensorFlow 2.x'i pip'ten yüklediyseniz tflite_convert
komutunu kullanın. 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.
TensorFlow 2.x kaynağını indirdiyseniz ve paketi oluşturup kurmadan dönüştürücüyü bu kaynaktan çalıştırmak istiyorsanız, komutta ' tflite_convert
' yerine ' bazel run tensorflow/lite/python:tflite_convert --
' yazabilirsiniz.
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
Bir istemci cihazında (örn. mobil, yerleşik) çıkarım yapmak için TensorFlow Lite yorumlayıcısını kullanın.