تحويل نماذج TensorFlow

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

تصف هذه الصفحة كيفية تحويل نموذج TensorFlow إلى نموذج TensorFlow Lite (تنسيق FlatBuffer محسن محدد بامتداد الملف .tflite ) باستخدام محول TensorFlow Lite.

سير عمل التحويل

يوضح الرسم التخطيطي أدناه سير العمل عالي المستوى لتحويل النموذج الخاص بك:

سير عمل محول TFLite

الشكل 1. سير عمل المحول.

يمكنك تحويل النموذج الخاص بك باستخدام أحد الخيارات التالية:

  1. Python API ( موصى به ): يتيح لك ذلك دمج التحويل في خط أنابيب التطوير الخاص بك ، وتطبيق التحسينات ، وإضافة البيانات الوصفية والعديد من المهام الأخرى التي تبسط عملية التحويل.
  2. سطر الأوامر : هذا يدعم فقط تحويل النموذج الأساسي.

واجهة برمجة تطبيقات Python

رمز المساعد: لمعرفة المزيد حول واجهة برمجة تطبيقات محول TensorFlow Lite ، قم بتشغيل print(help(tf.lite.TFLiteConverter)) .

قم بتحويل نموذج TensorFlow باستخدام tf.lite.TFLiteConverter . يتم تخزين نموذج TensorFlow باستخدام تنسيق SavedModel ويتم إنشاؤه إما باستخدام مستوى عالٍ من tf.keras.* واجهات برمجة التطبيقات (نموذج Keras) أو واجهات برمجة تطبيقات tf.* ذات المستوى المنخفض (التي تقوم من خلالها بإنشاء وظائف ملموسة). نتيجة لذلك ، لديك الخيارات الثلاثة التالية (الأمثلة في الأقسام القليلة التالية):

يوضح المثال التالي كيفية تحويل 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)

ميزات أخرى

  • تطبيق التحسينات . التحسين الشائع المستخدم هو تكميم ما بعد التدريب ، والذي يمكن أن يقلل من زمن وصول النموذج وحجمه مع الحد الأدنى من الخسارة في الدقة.

  • أضف البيانات الوصفية ، مما يسهل إنشاء كود غلاف خاص بالنظام الأساسي عند نشر النماذج على الأجهزة.

أخطاء التحويل

فيما يلي أخطاء التحويل الشائعة وحلولها:

أداة سطر الأوامر

إذا قمت بتثبيت 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 -- " في الأمر.

تحويل 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

الخطوات التالية

استخدم مترجم TensorFlow Lite لتشغيل الاستدلال على جهاز عميل (على سبيل المثال ، محمول ، مضمن).