تصف هذه الصفحة كيفية تحويل نموذج TensorFlow إلى نموذج TensorFlow Lite (تنسيق FlatBuffer المحسّن المحدد بواسطة ملحق الملف .tflite
) باستخدام محول TensorFlow Lite.
سير عمل التحويل
يوضح الرسم البياني أدناه سير العمل عالي المستوى لتحويل النموذج الخاص بك:
الشكل 1. سير عمل المحول.
يمكنك تحويل النموذج الخاص بك باستخدام أحد الخيارات التالية:
- Python API ( موصى به ): يسمح لك هذا بدمج التحويل في مسار التطوير الخاص بك، وتطبيق التحسينات، وإضافة البيانات الوصفية والعديد من المهام الأخرى التي تعمل على تبسيط عملية التحويل.
- سطر الأوامر : هذا يدعم فقط تحويل النموذج الأساسي.
واجهة برمجة تطبيقات بايثون
رمز المساعد: لمعرفة المزيد حول واجهة برمجة تطبيقات محول TensorFlow Lite، قم بتشغيل 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 إلى نموذج 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. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...
الحل: يحدث الخطأ لأن النموذج الخاص بك يحتوي على عمليات TF لا تحتوي على تطبيق TFLite مطابق. يمكنك حل هذه المشكلة باستخدام TF op في نموذج 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 op وقم بتشغيل الاستدلال عن طريق ربطه بوقت تشغيل TFLite.
أداة سطر الأوامر
إذا قمت بتثبيت TensorFlow 2.x من النقطة ، فاستخدم الأمر 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
الخطوات التالية
استخدم مترجم TensorFlow Lite لتشغيل الاستدلال على جهاز عميل (على سبيل المثال، محمول، مضمن).