आपके द्वारा अपने मॉडल में उपयोग किए जाने वाले मशीन लर्निंग (ML) ऑपरेटर एक TensorFlow मॉडल को TensorFlow Lite प्रारूप में बदलने की प्रक्रिया को प्रभावित कर सकते हैं। TensorFlow Lite कनवर्टर सामान्य अनुमान मॉडल में उपयोग किए जाने वाले सीमित संख्या में TensorFlow संचालन का समर्थन करता है, जिसका अर्थ है कि प्रत्येक मॉडल सीधे परिवर्तनीय नहीं है। कनवर्टर टूल आपको अतिरिक्त ऑपरेटरों को शामिल करने की अनुमति देता है, लेकिन इस तरह से एक मॉडल को परिवर्तित करने के लिए आपको अपने मॉडल को निष्पादित करने के लिए उपयोग किए जाने वाले TensorFlow लाइट रनटाइम वातावरण को भी संशोधित करने की आवश्यकता होती है, जो Google Play सेवाओं जैसे मानक रनटाइम परिनियोजन विकल्पों के उपयोग की आपकी क्षमता को सीमित कर सकता है।
TensorFlow लाइट कन्वर्टर को सीधे समर्थित ऑपरेटरों के साथ संगत बनाने के लिए मॉडल संरचना का विश्लेषण करने और अनुकूलन लागू करने के लिए डिज़ाइन किया गया है। उदाहरण के लिए, आपके मॉडल में एमएल ऑपरेटरों के आधार पर, कनवर्टर उन ऑपरेटरों को उनके TensorFlow लाइट समकक्षों के लिए मैप करने के लिए अलग या फ्यूज कर सकता है।
समर्थित संचालन के लिए भी, विशिष्ट उपयोग पैटर्न कभी-कभी प्रदर्शन कारणों से अपेक्षित होते हैं। TensorFlow लाइट के साथ उपयोग किए जा सकने वाले TensorFlow मॉडल को कैसे बनाया जाए, यह समझने का सबसे अच्छा तरीका इस प्रक्रिया द्वारा लगाई गई सीमाओं के साथ-साथ संचालन को कैसे रूपांतरित और अनुकूलित किया जाता है, इस पर ध्यान से विचार करना है।
समर्थित ऑपरेटर
TensorFlow Lite बिल्ट-इन ऑपरेटर उन ऑपरेटरों का एक सबसेट है जो TensorFlow कोर लाइब्रेरी का हिस्सा हैं। आपके TensorFlow मॉडल में कंपोजिट ऑपरेटरों या आपके द्वारा परिभाषित नए ऑपरेटरों के रूप में कस्टम ऑपरेटर भी शामिल हो सकते हैं। नीचे दिया गया चित्र इन ऑपरेटरों के बीच संबंधों को दर्शाता है।
एमएल मॉडल ऑपरेटरों की इस श्रेणी से, रूपांतरण प्रक्रिया द्वारा समर्थित 3 प्रकार के मॉडल हैं:
- केवल TensorFlow Lite बिल्ट-इन ऑपरेटर वाले मॉडल। ( अनुशंसित )
- अंतर्निर्मित ऑपरेटरों के साथ मॉडल और TensorFlow कोर ऑपरेटरों का चयन करें।
- बिल्ट-इन ऑपरेटरों, TensorFlow कोर ऑपरेटरों और/या कस्टम ऑपरेटरों के साथ मॉडल।
यदि आपके मॉडल में केवल ऐसे ऑपरेशन हैं जो मूल रूप से TensorFlow Lite द्वारा समर्थित हैं, तो आपको इसे परिवर्तित करने के लिए किसी अतिरिक्त फ़्लैग की आवश्यकता नहीं है। यह अनुशंसित पथ है क्योंकि इस प्रकार का मॉडल आसानी से परिवर्तित हो जाएगा और डिफ़ॉल्ट TensorFlow लाइट रनटाइम का उपयोग करके अनुकूलित करने और चलाने के लिए आसान है। आपके पास अपने मॉडल के लिए Google Play सेवाओं जैसे अधिक परिनियोजन विकल्प भी हैं। आप TensorFlow Lite कनवर्टर गाइड के साथ शुरुआत कर सकते हैं। अंतर्निहित ऑपरेटरों की सूची के लिए TensorFlow Lite Ops पृष्ठ देखें।
यदि आपको कोर लाइब्रेरी से चुनिंदा TensorFlow संचालन शामिल करने की आवश्यकता है, तो आपको यह निर्दिष्ट करना होगा कि रूपांतरण पर और सुनिश्चित करें कि आपके रनटाइम में वे ऑपरेशन शामिल हैं। विस्तृत चरणों के लिए TensorFlow ऑपरेटरों का चयन करें विषय देखें।
जब भी संभव हो, अपने परिवर्तित मॉडल में कस्टम ऑपरेटरों को शामिल करने के अंतिम विकल्प से बचें। कस्टम ऑपरेटर या तो कई आदिम TensorFlow कोर ऑपरेटरों को मिलाकर बनाए गए ऑपरेटर हैं या पूरी तरह से नए को परिभाषित करते हैं। जब कस्टम ऑपरेटरों को परिवर्तित किया जाता है, तो वे अंतर्निहित TensorFlow Lite लाइब्रेरी के बाहर निर्भरता उत्पन्न करके समग्र मॉडल का आकार बढ़ा सकते हैं। कस्टम ऑप्स, यदि विशेष रूप से मोबाइल या डिवाइस परिनियोजन के लिए नहीं बनाए गए हैं, तो सर्वर परिवेश की तुलना में संसाधन सीमित डिवाइस पर परिनियोजित करने पर खराब प्रदर्शन हो सकता है। अंत में, चुनिंदा TensorFlow कोर ऑपरेटरों को शामिल करने की तरह, कस्टम ऑपरेटरों के लिए आपको मॉडल रनटाइम वातावरण को संशोधित करने की आवश्यकता होती है जो आपको मानक रनटाइम सेवाओं जैसे Google Play सेवाओं का लाभ लेने से सीमित करता है।
समर्थित प्रकार
अधिकांश TensorFlow लाइट संचालन फ़्लोटिंग-पॉइंट ( float32
) और मात्रात्मक ( uint8
, int8
) अनुमान दोनों को लक्षित करते हैं, लेकिन कई ऑप्स अभी तक अन्य प्रकारों जैसे tf.float16
और स्ट्रिंग्स के लिए नहीं हैं।
संचालन के विभिन्न संस्करणों का उपयोग करने के अलावा, फ्लोटिंग-पॉइंट और मात्रात्मक मॉडल के बीच अन्य अंतर उनके परिवर्तित होने का तरीका है। परिमाणित रूपांतरण के लिए टेंसरों के लिए गतिशील श्रेणी की जानकारी की आवश्यकता होती है। इसके लिए मॉडल प्रशिक्षण के दौरान "नकली-परिमाणीकरण" की आवश्यकता होती है, एक अंशांकन डेटा सेट के माध्यम से श्रेणी की जानकारी प्राप्त करना, या "ऑन-द-फ्लाई" रेंज अनुमान करना। अधिक विवरण के लिए परिमाणीकरण देखें।
सीधे-आगे रूपांतरण, निरंतर-तह और फ़्यूज़िंग
कई TensorFlow संचालन को TensorFlow Lite द्वारा संसाधित किया जा सकता है, भले ही उनके पास कोई प्रत्यक्ष समकक्ष न हो। यह उन ऑपरेशनों का मामला है जिन्हें केवल ग्राफ़ ( tf.identity
) से हटाया जा सकता है, जिसे टेंसर ( tf.placeholder
) द्वारा प्रतिस्थापित किया जा सकता है, या अधिक जटिल संचालन ( tf.nn.bias_add
) में जोड़ा जा सकता है। कभी-कभी इनमें से किसी एक प्रक्रिया के माध्यम से कुछ समर्थित संचालन को भी हटाया जा सकता है।
यहाँ TensorFlow संचालन की एक गैर-विस्तृत सूची है जिसे आमतौर पर ग्राफ़ से हटा दिया जाता है:
-
tf.add
-
tf.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