توضّح هذه الصفحة كيفية تحويل نموذج TensorFlow إلى نموذج LiteRT (تنسيق FlatBuffer محسّن يتم تحديده من خلال امتداد الملف .tflite) باستخدام محوّل LiteRT.
مسار الإحالة الناجحة
يوضّح الرسم البياني أدناه سير العمل العالي المستوى لتحويل النموذج:

الشكل 1. سير عمل المحوّل
يمكنك تحويل النموذج باستخدام أحد الخيارات التالية:
- واجهة برمجة تطبيقات Python (ننصح بها): تتيح لك هذه الواجهة دمج عملية التحويل في مسار التطوير، وتطبيق التحسينات، وإضافة البيانات الوصفية، وتنفيذ العديد من المهام الأخرى التي تسهّل عملية التحويل.
- سطر الأوامر: يتيح هذا الخيار تحويل النماذج الأساسية فقط.
واجهة Python API
رمز مساعد: لمعرفة المزيد عن واجهة برمجة التطبيقات الخاصة بمحوّل LiteRT، شغِّل
print(help(tf.lite.TFLiteConverter)).
حوِّل نموذج TensorFlow باستخدام
tf.lite.TFLiteConverter. يتم تخزين نموذج TensorFlow باستخدام تنسيق SavedModel، ويتم إنشاؤه إما باستخدام واجهات برمجة التطبيقات tf.keras.* ذات المستوى العالي (نموذج Keras) أو واجهات برمجة التطبيقات tf.* ذات المستوى المنخفض (التي تنشئ منها دوال ملموسة). نتيجةً لذلك، تتوفّر لك الخيارات الثلاثة التالية (تتضمّن الأقسام التالية أمثلة):
tf.lite.TFLiteConverter.from_saved_model()(يُنصح به): يحوّل SavedModel.tf.lite.TFLiteConverter.from_keras_model(): تحويل نموذج Keras-
tf.lite.TFLiteConverter.from_concrete_functions(): تحوّل الدوال الملموسة.
تحويل SavedModel (إجراء مقترَح)
يوضّح المثال التالي كيفية تحويل SavedModel إلى نموذج TensorFlow Lite.
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
يوضّح المثال التالي كيفية تحويل نموذج Keras إلى نموذج TensorFlow Lite.
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)
تحويل الدوال الملموسة
يوضّح المثال التالي كيفية تحويل الدوال المحدّدة إلى نموذج LiteRT.
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)
ميزات أخرى
تطبيق تحسينات من بين عمليات التحسين الشائعة، التكميم بعد التدريب، الذي يمكنه تقليل وقت الاستجابة وحجم النموذج بشكل أكبر مع الحد الأدنى من فقدان الدقة.
أضِف البيانات الوصفية التي تسهّل إنشاء رمز برنامج تضمين خاص بالنظام الأساسي عند نشر النماذج على الأجهزة.
أخطاء الإحالات الناجحة
في ما يلي أخطاء الإحالات الناجحة الشائعة وطرق حلّها:
الخطأ:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.الحلّ: يحدث الخطأ لأنّ النموذج يتضمّن عمليات TensorFlow لا تتوافق معها عمليات TFLite. يمكنك حلّ هذه المشكلة من خلال استخدام عملية TF في نموذج TFLite (يُنصح بذلك). إذا أردت إنشاء نموذج باستخدام عمليات TFLite فقط، يمكنك إما إضافة طلب للحصول على عملية TFLite غير متوفّرة في المشكلة رقم 21526 على GitHub (يمكنك إضافة تعليق إذا لم تتم الإشارة إلى طلبك بعد) أو إنشاء عملية TFLite بنفسك.
الخطأ:
.. is neither a custom op nor a flex opالحل: إذا كانت عملية TensorFlow هذه:
- متوافق مع TensorFlow: يحدث الخطأ لأنّ عملية TensorFlow غير متوفّرة في قائمة السماح (وهي قائمة شاملة بعمليات TensorFlow المتوافقة مع TensorFlow Lite). يمكنك حلّ هذه المشكلة باتّباع الخطوات التالية:
- غير متوافق في TFLite: يحدث الخطأ لأنّ TFLite لا يتعرّف على عامل تشغيل TF المخصّص الذي حدّدته. يمكنك حلّ هذه المشكلة باتّباع الخطوات التالية:
- إنشاء عملية TensorFlow
- حوِّل نموذج TensorFlow إلى نموذج TFLite.
- إنشاء عملية TFLite وتنفيذ الاستدلال من خلال ربطها بوقت تشغيل TFLite
أداة سطر الأوامر
إذا كنت قد ثبّت TensorFlow 2.x من
pip، استخدِم الأمر tflite_convert.
لعرض جميع العلامات المتاحة، استخدِم الأمر التالي:
$ 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تم تنزيله وتريد تشغيل
المحوّل من هذا المصدر بدون إنشاء الحزمة وتثبيتها، يمكنك استبدال 'tflite_convert' بـ 'bazel run
tensorflow/lite/python:tflite_convert --' في الأمر.
تحويل SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
تحويل نموذج Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite