تبدیل مدل های TensorFlow

این صفحه نحوه تبدیل یک مدل TensorFlow به یک مدل LiteRT (یک فرمت FlatBuffer بهینه شده که با پسوند فایل .tflite شناسایی می‌شود) را با استفاده از مبدل LiteRT شرح می‌دهد.

گردش کار تبدیل

نمودار زیر گردش کار سطح بالا برای تبدیل مدل شما را نشان می‌دهد:

گردش کار مبدل TFLite

شکل 1. گردش کار مبدل.

شما می‌توانید مدل خود را با استفاده از یکی از گزینه‌های زیر تبدیل کنید:

  1. API پایتون ( پیشنهادی ): این به شما امکان می‌دهد تبدیل را در خط توسعه خود ادغام کنید، بهینه‌سازی‌ها را اعمال کنید، ابرداده اضافه کنید و بسیاری از کارهای دیگر که فرآیند تبدیل را ساده می‌کنند.
  2. خط فرمان : این فقط از تبدیل مدل پایه پشتیبانی می‌کند.

رابط برنامه‌نویسی پایتون

کد کمکی: برای کسب اطلاعات بیشتر در مورد API مبدل LiteRT، print(help(tf.lite.TFLiteConverter)) را اجرا کنید.

تبدیل یک مدل TensorFlow با استفاده از tf.lite.TFLiteConverter . یک مدل TensorFlow با استفاده از فرمت SavedModel ذخیره می‌شود و یا با استفاده از APIهای سطح بالا tf.keras.* (یک مدل Keras) یا APIهای سطح پایین 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)

تبدیل توابع عینی

مثال زیر نحوه تبدیل توابع عینی به مدل 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