המרת דגמי TensorFlow

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

דף זה מתאר כיצד להמיר מודל TensorFlow למודל TensorFlow Lite (פורמט FlatBuffer אופטימלי המזוהה על ידי סיומת הקובץ .tflite ) באמצעות ממיר TensorFlow Lite.

זרימת עבודה של המרה

התרשים שלהלן ממחיש את זרימת העבודה ברמה גבוהה להמרת המודל שלך:

זרימת עבודה של ממיר TFLite

איור 1. זרימת עבודה של ממיר.

אתה יכול להמיר את הדגם שלך באמצעות אחת מהאפשרויות הבאות:

  1. Python API ( מומלץ ): זה מאפשר לך לשלב את ההמרה בצינור הפיתוח שלך, להחיל אופטימיזציות, להוסיף מטא נתונים ומשימות רבות אחרות שמפשטות את תהליך ההמרה.
  2. שורת פקודה : זה תומך רק בהמרת מודל בסיסי.

API של Python

קוד עוזר: למידע נוסף על ה-API לממיר TensorFlow Lite, הפעל 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)

המרת פונקציות קונקרטיות

הדוגמה הבאה מראה כיצד להמיר פונקציות קונקרטיות למודל 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 מ-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 -- ' בפקודה.

המרת 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 כדי להפעיל הסקה במכשיר לקוח (למשל נייד, מוטבע).