TensorFlow.js विभिन्न प्रकार के पूर्व-प्रशिक्षित मॉडल के साथ आता है जो ब्राउज़र में उपयोग के लिए तैयार हैं - वे हमारे मॉडल रेपो में पाए जा सकते हैं। हालांकि हो सकता है कि आपने कहीं और एक TensorFlow मॉडल पाया या लिखा हो जिसे आप अपने वेब एप्लिकेशन में उपयोग करना चाहते हैं। TensorFlow.js इस उद्देश्य के लिए एक मॉडल कनवर्टर प्रदान करता है। TensorFlow.js कनवर्टर के दो घटक हैं:
- एक कमांड लाइन उपयोगिता जो TensorFlow.js में उपयोग के लिए Keras और TensorFlow मॉडल को परिवर्तित करती है।
- TensorFlow.js के साथ ब्राउज़र में मॉडल को लोड करने और निष्पादित करने के लिए एक एपीआई।
अपना मॉडल बदलें
TensorFlow.js कनवर्टर कई अलग-अलग मॉडल प्रारूपों के साथ काम करता है:
SavedModel : यह डिफ़ॉल्ट प्रारूप है जिसमें TensorFlow मॉडल सहेजे जाते हैं। सहेजे गए मॉडल प्रारूप को यहां प्रलेखित किया गया है।
केरस मॉडल : केरस मॉडल आमतौर पर एचडीएफ5 फाइल के रूप में सहेजे जाते हैं। केरस मॉडल को बचाने के बारे में अधिक जानकारी यहां मिल सकती है।
TensorFlow हब मॉड्यूल : ये ऐसे मॉडल हैं जिन्हें TensorFlow हब पर वितरण के लिए पैक किया गया है, जो मॉडल साझा करने और खोजने के लिए एक मंच है। मॉडल लाइब्रेरी यहां पाई जा सकती है।
आप किस प्रकार के मॉडल को कनवर्ट करने का प्रयास कर रहे हैं, इसके आधार पर आपको कनवर्टर को अलग-अलग तर्क देने होंगे। उदाहरण के लिए, मान लें कि आपने अपने tmp/
निर्देशिका में model.h5
नाम का एक Keras मॉडल सहेजा है। TensorFlow.js कनवर्टर का उपयोग करके अपने मॉडल को परिवर्तित करने के लिए, आप निम्न आदेश चला सकते हैं:
$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model
यह मॉडल को /tmp/model.h5
पर रूपांतरित करेगा और आपके tmp/tfjs_model/
निर्देशिका में बाइनरी वेट फ़ाइलों के साथ एक model.json
फ़ाइल को आउटपुट करेगा।
विभिन्न मॉडल प्रारूपों के अनुरूप कमांड लाइन तर्कों के बारे में अधिक विवरण TensorFlow.js कनवर्टर README पर पाया जा सकता है।
रूपांतरण प्रक्रिया के दौरान हम मॉडल ग्राफ को पार करते हैं और जांचते हैं कि प्रत्येक ऑपरेशन TensorFlow.js द्वारा समर्थित है। यदि ऐसा है, तो हम ग्राफ को उस प्रारूप में लिखते हैं जिसका ब्राउज़र उपभोग कर सकता है। हम भार को 4MB फ़ाइलों में विभाजित करके वेब पर प्रस्तुत किए जाने के लिए मॉडल को अनुकूलित करने का प्रयास करते हैं - इस तरह उन्हें ब्राउज़र द्वारा कैश किया जा सकता है। हम ओपन सोर्स ग्रेपलर प्रोजेक्ट का उपयोग करके मॉडल ग्राफ को सरल बनाने का भी प्रयास करते हैं। ग्राफ़ सरलीकरण में आसन्न संचालन को एक साथ मोड़ना, सामान्य सबग्राफ को समाप्त करना आदि शामिल हैं। इन परिवर्तनों का मॉडल के आउटपुट पर कोई प्रभाव नहीं पड़ता है। आगे अनुकूलन के लिए, उपयोगकर्ता एक तर्क में पारित कर सकते हैं जो कनवर्टर को एक निश्चित बाइट आकार में मॉडल को मापने का निर्देश देता है। परिमाणीकरण कम बिट्स के साथ वजन का प्रतिनिधित्व करके मॉडल के आकार को कम करने की एक तकनीक है। उपयोगकर्ताओं को यह सुनिश्चित करने के लिए सावधान रहना चाहिए कि उनका मॉडल परिमाणीकरण के बाद स्वीकार्य स्तर की सटीकता बनाए रखता है।
यदि हम रूपांतरण के दौरान एक असमर्थित ऑपरेशन का सामना करते हैं, तो प्रक्रिया विफल हो जाती है और हम उपयोगकर्ता के लिए ऑपरेशन का नाम प्रिंट कर लेते हैं। हमें इसके बारे में बताने के लिए हमारे गिटहब पर एक मुद्दा सबमिट करने के लिए स्वतंत्र महसूस करें - हम उपयोगकर्ता की मांग के जवाब में नए संचालन को लागू करने का प्रयास करते हैं।
सर्वोत्तम प्रथाएं
यद्यपि हम रूपांतरण के दौरान आपके मॉडल को अनुकूलित करने के लिए हर संभव प्रयास करते हैं, अक्सर यह सुनिश्चित करने का सबसे अच्छा तरीका है कि आपका मॉडल अच्छा प्रदर्शन करे, इसे संसाधन-विवश वातावरण को ध्यान में रखकर बनाया जाए। इसका मतलब है कि अत्यधिक जटिल आर्किटेक्चर से बचना और जब संभव हो तो मापदंडों (वजन) की संख्या को कम करना।
अपना मॉडल चलाएं
अपने मॉडल को सफलतापूर्वक रूपांतरित करने पर, आपके पास भार फ़ाइलों का एक सेट और एक मॉडल टोपोलॉजी फ़ाइल होगी। 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 लौटाता है, जिसे प्रशिक्षित किया जा सकता है। tf.मॉडल को प्रशिक्षित करने के तरीके के बारे में जानकारी के लिए, ट्रेन मॉडल गाइड देखें।
रूपांतरण के बाद, अनुमान को कुछ बार चलाना और अपने मॉडल की गति को बेंचमार्क करना एक अच्छा विचार है। हमारे पास एक स्टैंडअलोन बेंचमार्किंग पृष्ठ है जिसका उपयोग इस उद्देश्य के लिए किया जा सकता है: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html आप देख सकते हैं कि हम प्रारंभिक वार्मअप रन से माप को त्याग देते हैं - ऐसा इसलिए है क्योंकि (सामान्य तौर पर) बनावट बनाने और शेडर्स को संकलित करने के ऊपरी हिस्से के कारण आपके मॉडल का पहला अनुमान बाद के अनुमानों की तुलना में कई गुना धीमा होगा।