تحويل نماذج TensorFlow

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

سير عمل الإحالات الناجحة

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

سير عمل محوّل TFLite

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

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

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

Python API

رمز المساعدة: مزيد من المعلومات حول أداة تحويل LiteRT من خلال واجهة برمجة التطبيقات، يمكنك تشغيل print(help(tf.lite.TFLiteConverter)).

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

يوضح المثال التالي كيفية تحويل SavedModel في TensorFlow نموذج بسيط

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 نموذج بسيط

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)

ميزات أخرى

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

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

أخطاء الإحالات الناجحة

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

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

إذا كنت مثبت 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