आपके मॉडल में इस्तेमाल किए जाने वाले मशीन लर्निंग (एमएल) ऑपरेटर, TensorFlow मॉडल को TensorFlow Lite फ़ॉर्मैट में बदलने की प्रोसेस पर असर डाल सकते हैं. TensorFlow Lite कन्वर्टर सामान्य अनुमान मॉडल में इस्तेमाल की जाने वाली TensorFlow के ऑपरेशनों की सीमित संख्या के साथ काम करता है. इसका मतलब है कि हर मॉडल सीधे तौर पर कन्वर्ट नहीं किया जा सकता. कन्वर्टर टूल की मदद से, अतिरिक्त ऑपरेटर शामिल किए जा सकते हैं. हालांकि, मॉडल को इस तरह से बदलने के लिए, आपको अपना मॉडल चलाने के लिए TensorFlow Lite रनटाइम एनवायरमेंट को बदलना पड़ता है. इससे Google Play services जैसे स्टैंडर्ड रनटाइम डिप्लॉयमेंट विकल्पों का इस्तेमाल करने की सुविधा सीमित हो सकती है.
TensorFlow Lite Converter को मॉडल की बनावट का विश्लेषण करने और ऑप्टिमाइज़ेशन लागू करने के लिए डिज़ाइन किया गया है, ताकि यह सीधे तौर पर काम करने वाले ऑपरेटर के साथ काम कर सके. उदाहरण के लिए, आपके मॉडल में एमएल ऑपरेटर के आधार पर, कन्वर्टर इन ऑपरेटर को अपने TensorFlow Lite काउंटर से मैप करने के लिए, एलाइड या फ़्यूज़ कर सकता है.
यहां तक कि काम करने वाली कार्रवाइयों के लिए भी, कभी-कभी परफ़ॉर्मेंस की वजहों से, इस्तेमाल के खास पैटर्न की उम्मीद होती है. TensorFlow Lite के साथ इस्तेमाल किया जा सकने वाला TensorFlow मॉडल बनाने का सबसे अच्छा तरीक़ा है, इस प्रोसेस की सीमाओं के साथ-साथ इस पर ध्यान से देखना कि ऑपरेशन को कैसे बदलना और ऑप्टिमाइज़ करना है.
इस्तेमाल किए जा सकने वाले ऑपरेटर
TensorFlow Lite में पहले से मौजूद ऑपरेटर, उन ऑपरेटर का सबसेट हैं जो TensorFlow की कोर लाइब्रेरी का हिस्सा हैं. आपके TensorFlow के मॉडल में, कंपोज़िट ऑपरेटर या आपके तय किए गए नए ऑपरेटर के रूप में कस्टम ऑपरेटर शामिल हो सकते हैं. नीचे दिया गया डायग्राम इन ऑपरेटर के बीच संबंध को दिखाता है.
एमएल मॉडल ऑपरेटर की इस रेंज में, कन्वर्ज़न प्रोसेस के साथ काम करने वाले तीन तरह के मॉडल होते हैं:
- ऐसे मॉडल जिनमें सिर्फ़ TensorFlow Lite पहले से मौजूद ऑपरेटर होता है. (सुझाया गया)
- ऐसे मॉडल जिनमें पहले से मौजूद ऑपरेटर होते हैं और जिनमें TensorFlow कोर ऑपरेटर होते हैं.
- पहले से मौजूद ऑपरेटर, TensorFlow के कोर ऑपरेटर, और/या कस्टम ऑपरेटर वाले मॉडल.
अगर आपके मॉडल में सिर्फ़ ऐसी कार्रवाइयां हैं जो मूल रूप से TensorFlow Lite पर काम करती हैं, तो आपको इसे बदलने के लिए किसी और फ़्लैग की ज़रूरत नहीं है. यह सुझाया गया पाथ है, क्योंकि इस तरह का मॉडल आसानी से ग्राहक में बदलता है. साथ ही, डिफ़ॉल्ट TensorFlow Lite रनटाइम का इस्तेमाल करके, इसे ऑप्टिमाइज़ करना और चलाना आसान होता है. आपके पास अपने मॉडल के लिए डिप्लॉयमेंट के ज़्यादा विकल्प भी हैं, जैसे कि Google Play services. शुरुआत करने के लिए, TensorFlow Lite की कन्वर्टर गाइड देखें. पहले से मौजूद ऑपरेटर की सूची के लिए, TensorFlow Lite Ops पेज देखें.
अगर आपको मुख्य लाइब्रेरी से चुनिंदा TensorFlow कार्रवाइयों को शामिल करना है, तो आपको कन्वर्ज़न के समय यह बताना होगा और पक्का करना होगा कि आपके रनटाइम में वे ऑपरेशन शामिल हों. ज़्यादा जानकारी के लिए, TensorFlow ऑपरेटर चुनें विषय देखें.
जब भी संभव हो, तब अपने कन्वर्टेड मॉडल में कस्टम ऑपरेटर को शामिल करने के आखिरी विकल्प से बचें. कस्टम ऑपरेटर ऐसे ऑपरेटर होते हैं जिन्हें कई पुराने TensorFlow के कोर ऑपरेटर को मिलाकर या पूरी तरह से नया बनाया जाता है. जब कस्टम ऑपरेटर को बदला जाता है, तो वे पहले से मौजूद TensorFlow Lite लाइब्रेरी के बाहर डिपेंडेंसी लेकर, पूरे मॉडल का साइज़ बढ़ा सकते हैं. कस्टम ऑपरेशन, अगर खास तौर पर मोबाइल या डिवाइस डिप्लॉयमेंट के लिए नहीं बनाए गए हैं, तो सर्वर एनवायरमेंट की तुलना में सीमित सुविधाओं वाले डिवाइसों पर डिप्लॉय करने पर, उनकी परफ़ॉर्मेंस खराब हो सकती है. आखिरी बात, TensorFlow के चुनिंदा मुख्य ऑपरेटर शामिल करने की तरह ही, कस्टम ऑपरेटर के लिए आपको मॉडल रनटाइम एनवायरमेंट में बदलाव करना होगा. इससे आपको Google Play services जैसी स्टैंडर्ड रनटाइम सेवाओं का फ़ायदा नहीं मिलेगा.
इस तरह के कोड काम करते हैं
TensorFlow Lite की ज़्यादातर कार्रवाइयों में, फ़्लोटिंग-पॉइंट (float32
) और संख्या वाला (uint8
, int8
) अनुमान, दोनों होते हैं. हालांकि, कई ऑपरेशन tf.float16
और स्ट्रिंग जैसे अन्य टाइप के लिए अब तक नहीं किए गए हैं.
ऑपरेशन के अलग-अलग वर्शन का इस्तेमाल करने के अलावा, फ़्लोटिंग-पॉइंट और क्वांटाइज़ किए गए मॉडल के बीच एक और अंतर है, वह तरीका है जिससे उन्हें बदला जाता है. क्वांटाइज़्ड कन्वर्ज़न के लिए, टेंसर के लिए डाइनैमिक रेंज की जानकारी की ज़रूरत होती है. इसके लिए, मॉडल ट्रेनिंग के दौरान "फ़ेक-क्वांटाइज़ेशन", कैलिब्रेशन डेटा सेट से रेंज की जानकारी पाना या "ऑन-द-फ़्लाई" रेंज का अनुमान लगाना ज़रूरी होता है. ज़्यादा जानकारी के लिए संख्या तय करना देखें.
स्ट्रेट-फ़ॉरवर्ड कन्वर्ज़न, कॉन्सटेंट-फ़ोल्डिंग, और फ़्यूज़िंग
TensorFlow Lite की मदद से, TensorFlow की कई कार्रवाइयां की जा सकती हैं,
भले ही वे सीधे तौर पर ऐसी कार्रवाइयां न करती हों. यह उन कार्रवाइयों के मामले में होता है जिन्हें
आसानी से ग्राफ़ (tf.identity
) से हटाया जा सकता है, उनकी जगह पर टेंसर (tf.placeholder
) का इस्तेमाल किया जा सकता है या ज़्यादा जटिल ऑपरेशन (tf.nn.bias_add
) में जोड़ा जा सकता है. ऐसा भी हो सकता है कि कभी-कभी इनमें से किसी एक प्रोसेस से, काम करने वाले कुछ ऑपरेशन हटाए जा सकें.
यहां TensorFlow से जुड़ी कार्रवाइयों की एक सूची दी गई है, जिसे आम तौर पर ग्राफ़ से हटा दिया जाता है:
tf.add
tf.debugging.check_numerics
tf.constant
tf.div
tf.divide
tf.fake_quant_with_min_max_args
tf.fake_quant_with_min_max_vars
tf.identity
tf.maximum
tf.minimum
tf.multiply
tf.no_op
tf.placeholder
tf.placeholder_with_default
tf.realdiv
tf.reduce_max
tf.reduce_min
tf.reduce_sum
tf.rsqrt
tf.shape
tf.sqrt
tf.square
tf.subtract
tf.tile
tf.nn.batch_norm_with_global_normalization
tf.nn.bias_add
tf.nn.fused_batch_norm
tf.nn.relu
tf.nn.relu6
एक्सपेरिमेंटल ऑपरेशंस
TensorFlow Lite की ये कार्रवाइयां मौजूद हैं, लेकिन ये कस्टम मॉडल के लिए तैयार नहीं हैं:
CALL
CONCAT_EMBEDDINGS
CUSTOM
EMBEDDING_LOOKUP_SPARSE
HASHTABLE_LOOKUP
LSH_PROJECTION
SKIP_GRAM
SVDF