मॉडल रूपांतरण

TensorFlow.js विभिन्न प्रकार के पूर्व-प्रशिक्षित मॉडलों के साथ आता है जो ब्राउज़र में उपयोग के लिए तैयार हैं - वे हमारे मॉडल रेपो में पाए जा सकते हैं। हालाँकि आपको कहीं और TensorFlow मॉडल मिल गया होगा या लिखा होगा जिसे आप अपने वेब एप्लिकेशन में उपयोग करना चाहेंगे। TensorFlow.js इस उद्देश्य के लिए एक मॉडल कनवर्टर प्रदान करता है। TensorFlow.js कनवर्टर के दो घटक हैं:

  1. एक कमांड लाइन उपयोगिता जो TensorFlow.js में उपयोग के लिए Keras और TensorFlow मॉडल को परिवर्तित करती है।
  2. TensorFlow.js के साथ ब्राउज़र में मॉडल को लोड करने और निष्पादित करने के लिए एक एपीआई।

अपना मॉडल परिवर्तित करें

TensorFlow.js कनवर्टर कई अलग-अलग मॉडल प्रारूपों के साथ काम करता है:

SaveModel : यह डिफ़ॉल्ट प्रारूप है जिसमें TensorFlow मॉडल सहेजे जाते हैं। सेव्डमॉडल प्रारूप यहां प्रलेखित है।

केरस मॉडल : केरस मॉडल आम तौर पर एचडीएफ5 फ़ाइल के रूप में सहेजे जाते हैं। केरस मॉडल को सहेजने के बारे में अधिक जानकारी यहां पाई जा सकती है।

टेन्सरफ्लो हब मॉड्यूल : ये ऐसे मॉडल हैं जिन्हें टेन्सरफ्लो हब पर वितरण के लिए पैक किया गया है, जो मॉडल साझा करने और खोजने के लिए एक मंच है। मॉडल लाइब्रेरी यहां पाई जा सकती है।

आप किस प्रकार के मॉडल को परिवर्तित करने का प्रयास कर रहे हैं, इसके आधार पर आपको कनवर्टर को विभिन्न तर्क पारित करने की आवश्यकता होगी। उदाहरण के लिए, मान लें कि आपने model.h5 नामक एक केरस मॉडल को अपनी tmp/ निर्देशिका में सहेजा है। TensorFlow.js कनवर्टर का उपयोग करके अपने मॉडल को परिवर्तित करने के लिए, आप निम्न कमांड चला सकते हैं:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

यह मॉडल को /tmp/model.h5 पर परिवर्तित करेगा और बाइनरी वेट फ़ाइलों के साथ एक model.json फ़ाइल को आपकी tmp/tfjs_model/ निर्देशिका में आउटपुट करेगा।

विभिन्न मॉडल प्रारूपों के अनुरूप कमांड लाइन तर्कों के बारे में अधिक विवरण TensorFlow.js कनवर्टर README पर पाया जा सकता है।

रूपांतरण प्रक्रिया के दौरान हम मॉडल ग्राफ़ को पार करते हैं और जांचते हैं कि प्रत्येक ऑपरेशन TensorFlow.js द्वारा समर्थित है। यदि ऐसा है, तो हम ग्राफ़ को ऐसे प्रारूप में लिखते हैं जिसे ब्राउज़र उपभोग कर सकता है। हम वज़न को 4एमबी फ़ाइलों में विभाजित करके वेब पर प्रस्तुत किए जाने वाले मॉडल को अनुकूलित करने का प्रयास करते हैं - इस तरह उन्हें ब्राउज़र द्वारा कैश किया जा सकता है। हम ओपन सोर्स ग्रैपलर प्रोजेक्ट का उपयोग करके मॉडल ग्राफ़ को सरल बनाने का भी प्रयास करते हैं। ग्राफ़ सरलीकरण में आसन्न संचालन को एक साथ जोड़ना, सामान्य सबग्राफ को हटाना आदि शामिल है। इन परिवर्तनों का मॉडल के आउटपुट पर कोई प्रभाव नहीं पड़ता है। आगे के अनुकूलन के लिए, उपयोगकर्ता एक तर्क दे सकते हैं जो कनवर्टर को मॉडल को एक निश्चित बाइट आकार में परिमाणित करने का निर्देश देता है। क्वांटाइजेशन कम बिट्स के साथ वजन का प्रतिनिधित्व करके मॉडल आकार को कम करने की एक तकनीक है। उपयोगकर्ताओं को यह सुनिश्चित करने के लिए सावधान रहना चाहिए कि उनका मॉडल परिमाणीकरण के बाद सटीकता की स्वीकार्य डिग्री बनाए रखता है।

यदि हम रूपांतरण के दौरान एक असमर्थित ऑपरेशन का सामना करते हैं, तो प्रक्रिया विफल हो जाती है और हम उपयोगकर्ता के लिए ऑपरेशन का नाम प्रिंट कर लेते हैं। हमें इसके बारे में बताने के लिए बेझिझक हमारे GitHub पर एक मुद्दा प्रस्तुत करें - हम उपयोगकर्ता की मांग के जवाब में नए संचालन को लागू करने का प्रयास करते हैं।

सर्वोत्तम प्रथाएं

यद्यपि हम रूपांतरण के दौरान आपके मॉडल को अनुकूलित करने के लिए हर संभव प्रयास करते हैं, अक्सर यह सुनिश्चित करने का सबसे अच्छा तरीका है कि आपका मॉडल अच्छा प्रदर्शन करे, इसे संसाधन-बाधित वातावरण को ध्यान में रखकर बनाया जाए। इसका मतलब है अत्यधिक जटिल आर्किटेक्चर से बचना और जब संभव हो तो मापदंडों (वजन) की संख्या को कम करना।

अपना मॉडल चलाएँ

अपने मॉडल को सफलतापूर्वक परिवर्तित करने पर, आपके पास वेट फ़ाइलों का एक सेट और एक मॉडल टोपोलॉजी फ़ाइल होगी। TensorFlow.js मॉडल लोडिंग एपीआई प्रदान करता है जिसका उपयोग आप इन मॉडल संपत्तियों को लाने और ब्राउज़र में अनुमान चलाने के लिए कर सकते हैं।

परिवर्तित TensorFlow SavedModel या TensorFlow हब मॉड्यूल के लिए API इस प्रकार दिखता है:

const model = await tf.loadGraphModel(‘path/to/model.json’);

और परिवर्तित केरस मॉडल के लिए यह कैसा दिखता है:

const model = await tf.loadLayersModel(‘path/to/model.json’);

tf.loadGraphModel API एक tf.FrozenModel लौटाता है, जिसका अर्थ है कि पैरामीटर तय हो गए हैं और आप नए डेटा के साथ अपने मॉडल को ठीक नहीं कर पाएंगे। tf.loadLayersModel API एक tf.Model लौटाता है, जिसे प्रशिक्षित किया जा सकता है। टीएफ.मॉडल को प्रशिक्षित करने के तरीके के बारे में जानकारी के लिए, ट्रेन मॉडल गाइड देखें।

रूपांतरण के बाद, कुछ बार अनुमान चलाना और अपने मॉडल की गति को बेंचमार्क करना एक अच्छा विचार है। हमारे पास एक स्टैंडअलोन बेंचमार्किंग पेज है जिसका उपयोग इस उद्देश्य के लिए किया जा सकता है: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html आप देख सकते हैं कि हम प्रारंभिक वार्मअप रन से माप को हटा देते हैं - ऐसा इसलिए है क्योंकि (सामान्य तौर पर) आपके मॉडल का पहला अनुमान बनावट बनाने और शेडर्स संकलित करने के ओवरहेड के कारण बाद के अनुमानों की तुलना में कई गुना धीमा होगा।