এই পৃষ্ঠায় বর্ণনা করা হয়েছে কিভাবে LiterRT কনভার্টার ব্যবহার করে একটি TensorFlow মডেলকে LiterRT মডেলে ( .tflite ফাইল এক্সটেনশন দ্বারা চিহ্নিত একটি অপ্টিমাইজড FlatBuffer ফর্ম্যাট) রূপান্তর করা যায়।
রূপান্তর কর্মপ্রবাহ
নিচের চিত্রটি আপনার মডেল রূপান্তরের জন্য উচ্চ-স্তরের কর্মপ্রবাহ চিত্রিত করে:

চিত্র ১. কনভার্টার ওয়ার্কফ্লো।
আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে আপনার মডেল রূপান্তর করতে পারেন:
- পাইথন এপিআই ( প্রস্তাবিত ): এটি আপনাকে আপনার ডেভেলপমেন্ট পাইপলাইনে রূপান্তরকে একীভূত করতে, অপ্টিমাইজেশন প্রয়োগ করতে, মেটাডেটা যোগ করতে এবং রূপান্তর প্রক্রিয়াকে সহজতর করার জন্য আরও অনেক কাজ করতে দেয়।
- কমান্ড লাইন : এটি শুধুমাত্র মৌলিক মডেল রূপান্তর সমর্থন করে।
পাইথন এপিআই
সাহায্যকারী কোড: LiterRT কনভার্টার API সম্পর্কে আরও জানতে, print(help(tf.lite.TFLiteConverter)) চালান।
tf.lite.TFLiteConverter ব্যবহার করে একটি TensorFlow মডেল রূপান্তর করুন। একটি TensorFlow মডেল SavedModel ফর্ম্যাট ব্যবহার করে সংরক্ষণ করা হয় এবং উচ্চ-স্তরের tf.keras.* API (একটি Keras মডেল) অথবা নিম্ন-স্তরের tf.* API (যা থেকে আপনি কংক্রিট ফাংশন তৈরি করেন) ব্যবহার করে তৈরি করা হয়। ফলস্বরূপ, আপনার কাছে নিম্নলিখিত তিনটি বিকল্প রয়েছে (উদাহরণগুলি পরবর্তী কয়েকটি বিভাগে রয়েছে):
-
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 মডেলকে 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)
কংক্রিট ফাংশন রূপান্তর করুন
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে কংক্রিট ফাংশনগুলিকে LiterRT মডেলে রূপান্তর করতে হয়।
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 ops আছে যার সাথে সম্পর্কিত TFLite বাস্তবায়ন নেই। আপনি TFLite মডেলে TF op ব্যবহার করে এটি সমাধান করতে পারেন (প্রস্তাবিত)। আপনি যদি শুধুমাত্র TFLite ops দিয়ে একটি মডেল তৈরি করতে চান, তাহলে আপনি GitHub ইস্যু #21526- এ অনুপস্থিত TFLite op-এর জন্য একটি অনুরোধ যোগ করতে পারেন (যদি আপনার অনুরোধটি ইতিমধ্যে উল্লেখ না করা থাকে তবে একটি মন্তব্য করুন) অথবা নিজেই TFLite op তৈরি করতে পারেন ।
ত্রুটি:
.. is neither a custom op nor a flex opসমাধান: যদি এই TF অপটি হয়:
- TF-তে সমর্থিত: ত্রুটিটি ঘটে কারণ TF op allowlist থেকে অনুপস্থিত (TFLite দ্বারা সমর্থিত TF ops এর একটি সম্পূর্ণ তালিকা)। আপনি নিম্নলিখিতভাবে এটি সমাধান করতে পারেন:
- অ্যালোলিস্টে অনুপস্থিত অপশন যোগ করুন । 2. TF মডেলটিকে TFLite মডেলে রূপান্তর করুন এবং ইনফারেন্স চালান ।
- TF-তে অসমর্থিত: ত্রুটিটি ঘটে কারণ TFLite আপনার দ্বারা সংজ্ঞায়িত কাস্টম TF অপারেটর সম্পর্কে অবগত নয়। আপনি নিম্নলিখিতভাবে এটি সমাধান করতে পারেন:
- TF op তৈরি করুন ।
- TF মডেলটিকে TFLite মডেলে রূপান্তর করুন ।
- TFLite রানটাইমের সাথে লিঙ্ক করে TFLite অপশন তৈরি করুন এবং ইনফারেন্স রান করুন।
কমান্ড লাইন টুল
যদি আপনি pip থেকে 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