मॉडल सहेजें और लोड करें

TensorFlow.js उन मॉडलों को सहेजने और लोड करने के लिए कार्यक्षमता प्रदान करता है जो Layers एपीआई के साथ बनाए गए हैं या मौजूदा TensorFlow मॉडल से परिवर्तित किए गए हैं। ये वे मॉडल हो सकते हैं जिन्हें आपने स्वयं प्रशिक्षित किया है या जिन्हें दूसरों ने प्रशिक्षित किया है। लेयर्स एपीआई का उपयोग करने का एक प्रमुख लाभ यह है कि इसके साथ बनाए गए मॉडल क्रमबद्ध हैं और यही हम इस ट्यूटोरियल में तलाशेंगे।

यह ट्यूटोरियल TensorFlow.js मॉडल (JSON फ़ाइलों द्वारा पहचाने जाने योग्य) को सहेजने और लोड करने पर केंद्रित होगा। हम TensorFlow Python मॉडल भी आयात कर सकते हैं। इन मॉडलों को लोड करना निम्नलिखित दो ट्यूटोरियल में शामिल है:

एक tf.मॉडल सहेजें

tf.Model और tf.Sequential दोनों एक फ़ंक्शन model.save प्रदान करते हैं जो आपको किसी मॉडल की टोपोलॉजी और वज़न को सहेजने की अनुमति देता है।

  • टोपोलॉजी: यह एक फ़ाइल है जो किसी मॉडल के आर्किटेक्चर का वर्णन करती है (यानी यह किन ऑपरेशनों का उपयोग करती है)। इसमें मॉडलों के वजन के संदर्भ शामिल हैं जो बाहरी रूप से संग्रहीत हैं।

  • वज़न: ये बाइनरी फ़ाइलें हैं जो किसी दिए गए मॉडल के वज़न को एक कुशल प्रारूप में संग्रहीत करती हैं। वे आम तौर पर टोपोलॉजी के समान फ़ोल्डर में संग्रहीत होते हैं।

आइए देखें कि किसी मॉडल को सहेजने के लिए कोड कैसा दिखता है

const saveResult = await model.save('localstorage://my-model-1');

ध्यान देने योग्य कुछ बातें:

  • save विधि एक यूआरएल-जैसी स्ट्रिंग तर्क लेती है जो एक योजना से शुरू होती है। यह वर्णन करता है कि हम किस प्रकार के गंतव्य पर मॉडल को सहेजने का प्रयास कर रहे हैं। उपरोक्त उदाहरण में योजना localstorage:// है
  • योजना का अनुसरण एक पथ द्वारा किया जाता है। उपरोक्त उदाहरण में पथ my-model-1 है।
  • save विधि अतुल्यकालिक है.
  • model.save का रिटर्न वैल्यू एक JSON ऑब्जेक्ट है जो मॉडल की टोपोलॉजी के बाइट आकार और वजन जैसी जानकारी रखता है।
  • मॉडल को सहेजने के लिए उपयोग किया जाने वाला वातावरण इस बात पर प्रभाव नहीं डालता कि कौन सा वातावरण मॉडल को लोड कर सकता है। किसी मॉडल को नोड.जेएस में सहेजने से उसे ब्राउज़र में लोड होने से नहीं रोका जा सकता है।

नीचे हम उपलब्ध विभिन्न योजनाओं की जांच करेंगे।

स्थानीय संग्रहण (केवल ब्राउज़र)

योजना: localstorage://

await model.save('localstorage://my-model');

यह ब्राउज़र के स्थानीय संग्रहण में my-model नाम से एक मॉडल सहेजता है। यह रिफ्रेश के बीच बना रहेगा, हालांकि यदि स्थान चिंता का विषय बन जाता है तो स्थानीय स्टोरेज को उपयोगकर्ताओं या ब्राउज़र द्वारा ही साफ़ किया जा सकता है। प्रत्येक ब्राउज़र किसी दिए गए डोमेन के लिए स्थानीय संग्रहण में कितना डेटा संग्रहीत किया जा सकता है, इसकी अपनी सीमा भी निर्धारित करता है।

IndexedDB (केवल ब्राउज़र)

योजना: indexeddb://

await model.save('indexeddb://my-model');

यह एक मॉडल को ब्राउज़र के IndexedDB स्टोरेज में सहेजता है। स्थानीय भंडारण की तरह यह ताज़ा होने के बीच बना रहता है, इसमें संग्रहीत वस्तुओं के आकार पर बड़ी सीमाएँ भी होती हैं।

फ़ाइल डाउनलोड (केवल ब्राउज़र)

योजना: downloads://

await model.save('downloads://my-model');

इससे ब्राउज़र उपयोगकर्ता की मशीन पर मॉडल फ़ाइलें डाउनलोड कर सकेगा। दो फ़ाइलें तैयार की जाएंगी:

  1. [my-model].json नाम की एक टेक्स्ट JSON फ़ाइल, जिसमें नीचे वर्णित वेट फ़ाइल की टोपोलॉजी और संदर्भ होता है।
  2. [my-model].weights.bin नामक वजन मानों को ले जाने वाली एक बाइनरी फ़ाइल।

भिन्न नाम वाली फ़ाइलें प्राप्त करने के लिए आप नाम [my-model] बदल सकते हैं।

चूँकि .json फ़ाइल एक सापेक्ष पथ का उपयोग करके .bin की ओर इंगित करती है, इसलिए दोनों फ़ाइलें एक ही फ़ोल्डर में होनी चाहिए।

HTTP(एस) अनुरोध

योजना: http:// या https://

await model.save('http://model-server.domain/upload')

यह किसी मॉडल को दूरस्थ सर्वर पर सहेजने के लिए एक वेब अनुरोध बनाएगा। आपके पास उस दूरस्थ सर्वर का नियंत्रण होना चाहिए ताकि आप यह सुनिश्चित कर सकें कि वह अनुरोध को संभालने में सक्षम है।

मॉडल को POST अनुरोध के माध्यम से निर्दिष्ट HTTP सर्वर पर भेजा जाएगा। POST का मुख्य भाग multipart/form-data प्रारूप में है और इसमें दो फ़ाइलें हैं

  1. एक टेक्स्ट JSON फ़ाइल जिसका नाम model.json है, जिसमें नीचे वर्णित वज़न फ़ाइल की टोपोलॉजी और संदर्भ है।
  2. वजन मानों को ले जाने वाली एक बाइनरी फ़ाइल जिसका नाम model.weights.bin है।

ध्यान दें कि दोनों फ़ाइलों का नाम हमेशा बिल्कुल वैसा ही होगा जैसा ऊपर बताया गया है (नाम फ़ंक्शन में अंतर्निहित है)। इस एपीआई दस्तावेज़ में एक पायथन कोड स्निपेट है जो दर्शाता है कि कोई save से उत्पन्न अनुरोध को संभालने के लिए फ्लास्क वेब फ्रेमवर्क का उपयोग कैसे कर सकता है।

अक्सर आपको अपने HTTP सर्वर पर अधिक तर्क पारित करने होंगे या हेडर का अनुरोध करना होगा (उदाहरण के लिए प्रमाणीकरण के लिए या यदि आप एक फ़ोल्डर निर्दिष्ट करना चाहते हैं जिसमें मॉडल को सहेजा जाना चाहिए)। आप tf.io.browserHTTPRequest में URL स्ट्रिंग तर्क को प्रतिस्थापित करके save से अनुरोधों के इन पहलुओं पर बढ़िया नियंत्रण प्राप्त कर सकते हैं। यह एपीआई HTTP अनुरोधों को नियंत्रित करने में अधिक लचीलापन प्रदान करता है।

उदाहरण के लिए:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

नेटिव फ़ाइल सिस्टम (केवल Node.js)

योजना: file://

await model.save('file:///path/to/my-model');

Node.js पर चलते समय हमारे पास फ़ाइल सिस्टम तक सीधी पहुंच होती है और हम वहां मॉडल सहेज सकते हैं। उपरोक्त आदेश scheme के बाद निर्दिष्ट path पर दो फ़ाइलों को सहेजेगा।

  1. [model].json नाम की एक टेक्स्ट JSON फ़ाइल, जिसमें नीचे वर्णित वेट फ़ाइल की टोपोलॉजी और संदर्भ होता है।
  2. वजन मान रखने वाली एक बाइनरी फ़ाइल जिसका नाम [model].weights.bin

ध्यान दें कि दोनों फ़ाइलों का नाम हमेशा बिल्कुल वैसा ही होगा जैसा ऊपर बताया गया है (नाम फ़ंक्शन में अंतर्निहित है)।

एक tf.मॉडल लोड हो रहा है

उपरोक्त विधियों में से किसी एक का उपयोग करके सहेजे गए मॉडल को देखते हुए, हम इसे tf.loadLayersModel API का उपयोग करके लोड कर सकते हैं।

आइए देखें कि किसी मॉडल को लोड करने का कोड कैसा दिखता है

const model = await tf.loadLayersModel('localstorage://my-model-1');

ध्यान देने योग्य कुछ बातें:

  • model.save() की तरह, loadLayersModel फ़ंक्शन एक URL-जैसा स्ट्रिंग तर्क लेता है जो एक स्कीम से शुरू होता है। यह वर्णन करता है कि हम किस प्रकार के गंतव्य से मॉडल लोड करने का प्रयास कर रहे हैं।
  • योजना का अनुसरण एक पथ द्वारा किया जाता है। उपरोक्त उदाहरण में पथ my-model-1 है।
  • यूआरएल जैसी स्ट्रिंग को IOHandler इंटरफ़ेस से मेल खाने वाले ऑब्जेक्ट द्वारा प्रतिस्थापित किया जा सकता है।
  • tf.loadLayersModel() फ़ंक्शन अतुल्यकालिक है।
  • tf.loadLayersModel का रिटर्न मान tf.Model है

नीचे हम उपलब्ध विभिन्न योजनाओं की जांच करेंगे।

स्थानीय संग्रहण (केवल ब्राउज़र)

योजना: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

यह ब्राउज़र के स्थानीय संग्रहण से my-model नामक मॉडल को लोड करता है।

IndexedDB (केवल ब्राउज़र)

योजना: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

यह ब्राउज़र के IndexedDB स्टोरेज से एक मॉडल लोड करता है।

HTTP(एस)

योजना: http:// या https://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

यह http एंडपॉइंट से एक मॉडल लोड करता है। json फ़ाइल लोड करने के बाद फ़ंक्शन संबंधित .bin फ़ाइलों के लिए अनुरोध करेगा जो json फ़ाइल संदर्भित करती है।

नेटिव फ़ाइल सिस्टम (केवल Node.js)

योजना: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

Node.js पर चलते समय हमारे पास फाइल सिस्टम तक सीधी पहुंच होती है और हम वहां से मॉडल लोड कर सकते हैं। ध्यान दें कि उपरोक्त फ़ंक्शन कॉल में हम model.json फ़ाइल को ही संदर्भित करते हैं (जबकि सहेजते समय हम एक फ़ोल्डर निर्दिष्ट करते हैं)। संबंधित .bin फ़ाइल json फ़ाइल के समान फ़ोल्डर में होनी चाहिए।

IOHandlers के साथ मॉडल लोड हो रहा है

यदि उपरोक्त योजनाएं आपकी आवश्यकताओं के लिए पर्याप्त नहीं हैं तो आप IOHandler के साथ कस्टम लोडिंग व्यवहार लागू कर सकते हैं। TensorFlow.js द्वारा प्रदान किया जाने वाला एक IOHandler tf.io.browserFiles है जो ब्राउज़र उपयोगकर्ताओं को ब्राउज़र में मॉडल फ़ाइलें अपलोड करने की अनुमति देता है। अधिक जानकारी के लिए दस्तावेज़ देखें.

कस्टम IOHandlers के साथ मॉडल सहेजना और लोड करना

यदि उपरोक्त योजनाएं आपकी लोडिंग या बचत आवश्यकताओं के लिए पर्याप्त नहीं हैं तो आप IOHandler लागू करके कस्टम क्रमांकन व्यवहार लागू कर सकते हैं।

IOHandler save और load विधि वाला एक ऑब्जेक्ट है।

save फ़ंक्शन एक पैरामीटर लेता है जो मॉडलआर्टफैक्ट्स इंटरफ़ेस से मेल खाता है और उसे एक वादा वापस करना चाहिए जो सेवरिजल्ट ऑब्जेक्ट को हल करता है।

load फ़ंक्शन कोई पैरामीटर नहीं लेता है और उसे एक वादा वापस करना चाहिए जो मॉडलआर्टफैक्ट्स ऑब्जेक्ट को हल करता है। यह वही ऑब्जेक्ट है जिसे save के लिए पास किया जाता है।

IOHandler को कार्यान्वित करने के तरीके के उदाहरण के लिए ब्राउज़रHTTPRequest देखें।