توضّح هذه الصفحة كيفية تحويل نموذج TensorFlow
إلى نموذج TensorFlow Lite (وهو تنسيق
FlatBuffer محسّن محدَّد من خلال
امتداد الملف .tflite
) باستخدام محوّل TensorFlow Lite.
سير عمل الإحالة الناجحة
يوضِّح المخطّط أدناه سير العمل عالي المستوى لتحويل النموذج:
الشكل 1. سير عمل المحوّل
يمكنك تحويل النموذج باستخدام أحد الخيارات التالية:
- Python API (موصى بها): يتيح لك ذلك دمج الإحالة الناجحة في مسار التطوير، وتطبيق التحسينات، وإضافة البيانات الوصفية والعديد من المهام الأخرى التي تبسّط عملية التحويل.
- سطر الأوامر: لا يدعم هذا سوى تحويل النموذج الأساسي.
واجهة برمجة تطبيقات Python
رمز المساعد: لمعرفة المزيد من المعلومات عن واجهة برمجة تطبيقات محوّل TensorFlow Lite،
عليك تشغيل print(help(tf.lite.TFLiteConverter))
.
حوِّل نموذج TensorFlow باستخدام
tf.lite.TFLiteConverter
.
يتم تخزين نموذج TensorFlow باستخدام تنسيق SaveModel ويتم إنشاؤه إما باستخدام واجهات برمجة تطبيقات tf.keras.*
عالية المستوى (نموذج Keras) أو واجهات برمجة تطبيقات tf.*
المنخفضة المستوى (التي تنشئ منها دوال ملموسة). ونتيجةً لذلك، تتوفّر لك الخيارات الثلاثة التالية (تتوفّر الأمثلة في الأقسام القليلة التالية):
tf.lite.TFLiteConverter.from_saved_model()
(يُنصح بها): تحوِّل SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: لتحويل نموذج Kerastf.lite.TFLiteConverter.from_concrete_functions()
: لتحويل الدوال الملموسة.
تحويل نموذج محفوظ (يُنصح به)
يوضّح المثال التالي كيفية تحويل 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)
تحويل الدوال الملموسة
يوضح المثال التالي كيفية تحويل الدوال الملموسة إلى نموذج TensorFlow Lite.
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.
الحل: يحدث الخطأ عندما يحتوي النموذج على عمليات TF التي لا يتوفّر لها تنفيذ مطابق لإطار TFLite. يمكنك حلّ هذه المشكلة من خلال استخدام عملية TF في نموذج TFLite (إجراء يُنصح به). إذا أردت إنشاء نموذج باستخدام عمليات TFLite فقط، يمكنك إضافة طلب بشأن عملية TFLite غير المتوفّرة في مشكلة GitHub رقم 21526 (اترك تعليقًا إذا لم يسبق لك ذكر طلبك) أو إنشاء عملية TFLite بنفسك.
الخطأ:
.. is neither a custom op nor a flex op
الحل: إذا كانت عملية TF هذه:
متوافقة مع TF: يحدث الخطأ بسبب عدم توفّر عملية TF القائمة المسموح بها (وهي قائمة شاملة بعمليات TF المتوافقة مع فريق TFLite). يمكنك حل هذه المشكلة على النحو التالي:
غير متوافقة في TF: يحدث الخطأ بسبب عدم معرفة TFLite بعامل تشغيل TF المخصّص الذي حدّدته. يمكنك حل هذه المشكلة على النحو التالي:
- أنشئ عملية TF.
- حوِّل نموذج TF إلى نموذج 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 --
" في الأمر.
تحويل نموذج محفوظ
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