इस पेज पर, TensorFlow मॉडल को बदलने का तरीका बताया गया है
LiteRT मॉडल का इस्तेमाल करते हैं (ऑप्टिमाइज़ किया गया
FlatBuffer फ़ॉर्मैट की पहचान
.tflite
फ़ाइल एक्सटेंशन) को LiteRT कन्वर्टर का इस्तेमाल करता है.
कन्वर्ज़न वर्कफ़्लो
नीचे दिया गया डायग्राम, कन्वर्ज़न के लिए हाई-लेवल वर्कफ़्लो को दिखाता है आपका मॉडल:
पहला डायग्राम. कन्वर्टर वर्कफ़्लो.
नीचे दिए गए विकल्पों में से किसी एक का इस्तेमाल करके, मॉडल को बदला जा सकता है:
- Python API (सुझाया गया): इसकी मदद से, कन्वर्ज़न को अपनी डेवलपमेंट पाइपलाइन में इंटिग्रेट किया जा सकता है, इसमें ऑप्टिमाइज़ेशन, मेटाडेटा, और कई ऐसे अन्य टास्क जोड़ना कन्वर्ज़न प्रोसेस के बारे में बताना चाहिए.
- कमांड लाइन: यह सिर्फ़ बेसिक मॉडल कन्वर्ज़न के साथ काम करता है.
Python एपीआई
हेल्पर कोड: LiteRT कन्वर्टर के बारे में ज़्यादा जानने के लिए
एपीआई, print(help(tf.lite.TFLiteConverter))
चलाएं.
इसका इस्तेमाल करके TensorFlow मॉडल को बदलना
tf.lite.TFLiteConverter
.
TensorFlow मॉडल को, सेव किए गए मॉडल फ़ॉर्मैट का इस्तेमाल करके स्टोर किया जाता है और
यह हाई-लेवल tf.keras.*
API (Keras मॉडल) का इस्तेमाल करके जनरेट किया जाता है या
लो-लेवल के tf.*
एपीआई (जिनसे कंक्रीट फ़ंक्शन जनरेट किए जाते हैं). बतौर
है, तो आपके पास निम्न तीन विकल्प हैं (उदाहरण अगले कुछ
सेक्शन):
tf.lite.TFLiteConverter.from_saved_model()
(सुझाया गया): ग्राहक में बदलता है a SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: यह कन्वर्ज़न वैल्यू को बदलता है Keras मॉडल.tf.lite.TFLiteConverter.from_concrete_functions()
: फ़ॉर्मैट कॉन्क्रीट फ़ंक्शन.
सेव किए गए मॉडल को बदलना (सुझाया गया)
नीचे दिए गए उदाहरण में TensorFlow में SavedModel लाइट मॉडल.
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)
अन्य सुविधाएं
ऑप्टिमाइज़ेशन लागू करें. एक कॉमन इस्तेमाल किया गया ऑप्टिमाइज़ेशन है पोस्ट ट्रेनिंग क्वांटाइज़ेशन, इस सुविधा की मदद से, मॉडल के लिए इंतज़ार का समय और साइज़ कम हो सकता है. ज़्यादा सटीक होता है.
मेटाडेटा जोड़ें, जिससे प्लैटफ़ॉर्म बनाना आसान हो जाता है खास रैपर कोड का इस्तेमाल करें.
कन्वर्ज़न से जुड़ी गड़बड़ियां
कन्वर्ज़न से जुड़ी सामान्य गड़बड़ियां और उनके समाधान यहां दिए गए हैं:
गड़बड़ी:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
समाधान: गड़बड़ी तब होती है, जब आपके मॉडल में TF ऑपरेशन नहीं होते संबंधित TFLite लागू करना. इस समस्या को हल करने के लिए यह तरीका अपनाएं TFLite मॉडल में TF op का इस्तेमाल करके (सुझाया गया). अगर आपको सिर्फ़ TFLite ऑपरेशन वाला मॉडल जनरेट करना है, तो TFLite के गैर-मौजूदगी में ऐक्सेस करने का अनुरोध GitHub से जुड़ी समस्या #21526 (अगर आपके अनुरोध का पहले कभी उल्लेख नहीं किया गया है, तो टिप्पणी करें) या TFLite ऑप बनाएं खुद को बेहतर बनाएं.
गड़बड़ी:
.. is neither a custom op nor a flex op
समाधान: अगर यह TF op:
TF में काम करता है: गड़बड़ी तब होती है, जब अलाउलिस्ट (उन देशों/इलाकों की पूरी सूची TF ops, TFLite के साथ काम करता है). इस समस्या को ऐसे ठीक किया जा सकता है:
TF में काम नहीं करता: गड़बड़ी तब होती है, जब TFLite को आपके हिसाब से तय किया गया कस्टम TF ऑपरेटर. इस समस्या को ऐसे ठीक किया जा सकता है:
- TF ऑप बनाएं.
- TF मॉडल को TFLite मॉडल में बदलें.
- TFLite ऑप बनाएं और अनुमान को TFLite रनटाइम से लिंक करके चलाएं.
कमांड लाइन टूल
अगर आपको
पीआईपी से TensorFlow 2.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.
अगर आपके पास
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