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

شکل 1. گردش کار مبدل.
شما میتوانید مدل خود را با استفاده از یکی از گزینههای زیر تبدیل کنید:
- API پایتون ( پیشنهادی ): این به شما امکان میدهد تبدیل را در خط توسعه خود ادغام کنید، بهینهسازیها را اعمال کنید، ابرداده اضافه کنید و بسیاری از کارهای دیگر که فرآیند تبدیل را ساده میکنند.
- خط فرمان : این فقط از تبدیل مدل پایه پشتیبانی میکند.
رابط برنامهنویسی پایتون
کد کمکی: برای کسب اطلاعات بیشتر در مورد API مبدل LiteRT، print(help(tf.lite.TFLiteConverter)) را اجرا کنید.
تبدیل یک مدل TensorFlow با استفاده از tf.lite.TFLiteConverter . یک مدل TensorFlow با استفاده از فرمت SavedModel ذخیره میشود و یا با استفاده از APIهای سطح بالا tf.keras.* (یک مدل Keras) یا APIهای سطح پایین tf.* (که از آنها توابع عینی تولید میکنید) تولید میشود. در نتیجه، شما سه گزینه زیر را دارید (مثالها در چند بخش بعدی آمده است):
-
tf.lite.TFLiteConverter.from_saved_model()( توصیه شده ): یک SavedModel را تبدیل میکند. -
tf.lite.TFLiteConverter.from_keras_model(): یک مدل Keras را تبدیل میکند. -
tf.lite.TFLiteConverter.from_concrete_functions(): توابع عینی را تبدیل میکند.
تبدیل یک SavedModel (توصیه شده)
مثال زیر نحوه تبدیل یک 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)
سایر ویژگیها
بهینهسازیها را اعمال کنید. یک بهینهسازی رایج مورد استفاده، کوانتیزاسیون پس از آموزش است که میتواند تأخیر و اندازه مدل شما را با حداقل کاهش دقت، بیشتر کاهش دهد.
اضافه کردن متادیتا ، که ایجاد کد پوششی مخصوص پلتفرم را هنگام استقرار مدلها روی دستگاهها آسانتر میکند.
خطاهای تبدیل
خطاهای رایج در تبدیل و راه حل آنها در زیر آمده است:
خطا:
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: این خطا به این دلیل رخ میدهد که 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