تحويل TensorFlow لايت يأخذ نموذج TensorFlow ويولد نموذجا TensorFlow لايت (وهو الأمثل FlatBuffer شكل حددها .tflite
ملف التمديد). لديك الخياران التاليان لاستخدام المحول:
- بيثون API (موصى به): هذا يجعل من السهل تحويل النماذج كجزء من خط أنابيب نموذج التنمية، وتطبيق أمثل، إضافة البيانات الوصفية ولديها العديد من الميزات.
- سطر الأوامر : هذا يعتمد فقط تحويل النموذج الأساسي.
واجهة برمجة تطبيقات Python
مساعد كود: تحديد TensorFlow الإصدار المثبت، تشغيل print(tf.__version__)
ولمعرفة المزيد عن تحويل API TensorFlow لايت، تشغيل print(help(tf.lite.TFLiteConverter))
.
إذا كنت قد تثبيت TensorFlow الإصدار 2.x ، لديك الخيارين التاليين: (إذا كنت قد تثبيت TensorFlow 1.X ، الرجوع إلى جيثب )
تحويل نموذج TensorFlow الإصدار 2.x باستخدام
tf.lite.TFLiteConverter
. يتم تخزين TensorFlow نموذج الإصدار 2.x باستخدام التنسيق 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()
: تحويل وظائف محددة .
-
تحويل نموذج TensorFlow 1.X باستخدام
tf.compat.v1.lite.TFLiteConverter
(الأمثلة على جيثب ):-
tf.compat.v1.lite.TFLiteConverter.from_saved_model()
: تحويل ل SavedModel . -
tf.compat.v1.lite.TFLiteConverter.from_keras_model_file()
: تحويل ل Keras نموذج. -
tf.compat.v1.lite.TFLiteConverter.from_session()
: تحويل لGraphDef من الدورة. -
tf.compat.v1.lite.TFLiteConverter.from_frozen_graph()
: تحويل لGraphDef المجمدة من ملف. إذا كان لديك نقاط التفتيش، ثم أولا تحويله إلى ملف المجمدة GraphDef ومن ثم استخدام هذا API كما هو موضح هنا .
-
تحويل SavedModel (مستحسن)
يظهر المثال التالي كيفية تحويل 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)
تحويل وظائف ملموسة
يظهر المثال التالي كيفية تحويل وظائف محددة في نموذج TensorFlow لايت.
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.
# Notes that for the versions earlier than TensorFlow 2.7, the
# from_concrete_functions API is able to work when there is only the first
# argument given:
# > converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
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)
ميزات أخرى
تطبيق أمثل . A الأمثل شيوعا هو تكميم التدريب بعد ، والتي يمكن زيادة خفض الكمون النموذج الخاص بك وحجم مع فقدان الحد الادنى في الدقة.
إضافة الفوقية ، مما يجعل من الأسهل لإنشاء كود المجمع منصة محددة عند نشر النماذج على الأجهزة.
أخطاء التحويل
فيما يلي أخطاء التحويل الشائعة وحلولها:
خطأ:
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 في نموذج TFLite (مستحسن). إذا كنت ترغب في إنشاء نموذج مع مكتب خدمات المشاريع TFLite فقط، يمكنك إما إضافة طلب عن المفقودين المرجع TFLite في قضية جيثب # 21526 (ترك تعليق إذا لم يرد ذكرها طلبك بالفعل) أو خلق TFLite المرجع نفسك.
خطأ:
.. is neither a custom op nor a flex op
الحل: إذا كان هذا TF op هو:
معتمدة في TF: يحدث خطأ لأن TF المرجع مفقود من allowlist (قائمة شاملة من التقاط TF بدعم من TFLite). يمكنك حل هذا على النحو التالي:
غير مدعوم في TF: يحدث الخطأ لأن TFLite غير مدرك لمشغل TF المخصص الذي حددته. يمكنك حل هذا على النحو التالي:
- إنشاء TF المرجع .
- تحويل نموذج TF إلى نموذج TFLite .
- إنشاء المرجع TFLite وتشغيل الاستدلال من خلال ربطها وقت التشغيل TFLite.
أداة سطر الأوامر
ينصح بشدة أن استخدام API بيثون المذكورة أعلاه بدلا من ذلك، إذا كان ذلك ممكنا.
إذا كنت قد تثبيت TensorFlow الإصدار 2.x من نقطة ، استخدام tflite_convert
الأوامر كما يلي: (إذا كنت قد تثبيت الإصدار 2.x TensorFlow من مصدر ثم يمكنك استبدال ' tflite_convert
' مع ' bazel run //tensorflow/lite/python:tflite_convert --
'في المقاطع التالية، وإذا كنت قد تثبيت TensorFlow 1.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.
تحويل 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 لايت للاستدلال تعمل على جهاز العميل (مثل الجوال، جزءا لا يتجزأ).