Bu sayfada, TensorFlow modelinin nasıl dönüştürüleceği açıklanmaktadır.
bir LiteRT modeline (optimize edilmiş
FlatBuffer,
.tflite
dosya uzantısı) kullandığınızdan emin olun.
Dönüşüm iş akışı
Aşağıdaki şemada, dönüşüm hunisinin üst kısmındaki modeliniz:
Şekil 1. Dönüştürücü iş akışı.
Aşağıdaki seçeneklerden birini kullanarak modelinizi dönüştürebilirsiniz:
- Python API (önerilir): Böylece dönüşümü, geliştirme ardışık düzeninize entegre edebilirsiniz. optimizasyonlar uygulama, meta veriler ekleme ve diğer birçok görevi basitleştiren sürecidir.
- Komut satırı: Bu yalnızca temel model dönüştürme işlemini destekler.
Python API
Yardımcı kodu: LiteRT dönüştürücüsü hakkında daha fazla bilgi edinmek için
API, print(help(tf.lite.TFLiteConverter))
çalıştırın.
Şunu kullanarak bir TensorFlow modelini dönüştürün:
tf.lite.TFLiteConverter
.
Bir TensorFlow modeli, SavedModel biçimi kullanılarak depolanır ve
üst düzey tf.keras.*
API'leri (bir Keras modeli) veya
(bunlardan somut işlevler oluşturduğunuz alt düzey tf.*
API'leri). Kullanıcı
üç seçenek sunulur (örnekler sonraki birkaç hafta içinde
bölümler):
tf.lite.TFLiteConverter.from_saved_model()
(önerilir): Dönüşüm sağlar SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: Şuna dönüştürür: Keras modeli.tf.lite.TFLiteConverter.from_concrete_functions()
: Dönüştürmeler somut fonksiyonlar.
SavedModel'i dönüştürme (önerilir)
Aşağıdaki örnekte bir SavedModel'i TensorFlow'a dönüştürme Basit model.
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 modelinden TensorFlow'a Basit model.
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 dönüşüm işleminin nasıl yapılacağı gösterilmektedir somut fonksiyonların LiteRT modeli.
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 bir kullanılan optimizasyon eğitim sonrası niceleme, Bu da modelinizin gecikmesini ve boyutunu daha da azaltarak emin olun.
Platform oluşturmayı kolaylaştıran meta veriler ekleyin sarmalayıcı kodu kullanabilirsiniz.
Dönüşüm hataları
Sık karşılaşılan dönüşüm hataları ve bunların çözümleri aşağıda açıklanmıştır:
Hata:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
Çözüm: Hata, modelinizde ilgili TFLite uygulamasıdır. Bu sorunu şu şekilde çözebilirsiniz: (önerilir). Yalnızca TFLite operasyonlarıyla bir model oluşturmak istiyorsanız eksik TFLite operasyonunu GitHub sorunu #21526 (isteğinizden bahsedilmediyse yorum bırakın) veya TFLite operasyonunu oluşturun kendiniz.
Hata:
.. is neither a custom op nor a flex op
Çözüm: Bu TF işlemi şöyleyse:
TF'de destekleniyor: Hata, TF operasyonunun izin verilenler listesi TFite tarafından desteklenen TF işlemleri). Bu sorunu aşağıdaki şekilde çözebilirsiniz:
TF'de desteklenmiyor: Hata, TFLite'ın tanımladığınız özel TF operatörü. Bu sorunu aşağıdaki şekilde çözebilirsiniz:
- TF işlemini oluşturun.
- TF modelini TFLite modeline dönüştürün.
- TFLite işlemini oluşturma TFLite çalışma zamanına bağlayarak çıkarım yapın.
Komut Satırı Aracı
Şu anda
pip üzerinden TensorFlow 2.x yükleyebilirsiniz,
tflite_convert
komutunu kullanın. Mevcut tüm işaretleri görüntülemek için
şu 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ğı
ve dönüştürücüyü, uygulama geliştirmeden ve
yükleme sırasında
'tflite_convert
' öğesini değiştirebilirsiniz şununla:
"bazel run tensorflow/lite/python:tflite_convert --
" yazın.
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