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

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. एक पाठ JSON नामक फ़ाइल [my-model].json वजन फाइल करने के लिए टोपोलॉजी और संदर्भ में किया जाता है, जो नीचे वर्णित है।
  2. एक द्विआधारी नामित वजन मूल्यों को ले जाने फ़ाइल [my-model].weights.bin

आप नाम बदल सकते [my-model] एक अलग नाम के साथ फ़ाइलों को प्राप्त करने के लिए।

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

HTTP (एस) अनुरोध

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

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

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

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

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

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

अक्सर आपको अपने HTTP सर्वर पर अधिक तर्क या अनुरोध हेडर पास करने होंगे (उदाहरण के लिए प्रमाणीकरण के लिए या यदि आप एक फ़ोल्डर निर्दिष्ट करना चाहते हैं जिसमें मॉडल को सहेजा जाना चाहिए)। आप से अनुरोध के इन पहलुओं से अधिक कुशल नियंत्रण हासिल कर सकते हैं save में URL स्ट्रिंग तर्क की जगह tf.io.browserHTTPRequest । यह एपीआई 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 पर चलते समय हमारे पास फाइल सिस्टम तक सीधी पहुंच भी होती है और हम वहां मॉडल सहेज सकते हैं। आदेश ऊपर करने के लिए दो फ़ाइलों की बचत होगी path afer निर्दिष्ट scheme

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

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

एक tf.Model लोड हो रहा है

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

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

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

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

  • जैसा model.save() , loadLayersModel समारोह एक यूआरएल की तरह स्ट्रिंग तर्क लेता है कि एक योजना के साथ शुरू होता है। यह उस गंतव्य के प्रकार का वर्णन करता है जिससे हम एक मॉडल लोड करने का प्रयास कर रहे हैं।
  • योजना एक पथ द्वारा पीछा किया। पथ ऊपर के उदाहरण में है 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:// या 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 । एक IOHandler TensorFlow.js प्रदान करता है tf.io.browserFiles जो ब्राउज़र उपयोगकर्ताओं ब्राउज़र में मॉडल फ़ाइलों को अपलोड करने की अनुमति देता है। देखें प्रलेखन अधिक जानकारी के लिए।

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

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

एक IOHandler एक के साथ एक वस्तु है save और load विधि।

save समारोह एक पैरामीटर है कि एक से मेल खाता है लेता ModelArtifacts इंटरफेस और एक वादा लौट जाना चाहिए कि एक पर ले कर जाता SaveResult वस्तु।

load समारोह कोई पैरामीटर लेता है और एक वादा है कि एक पर ले कर लौट जाना ModelArtifacts आपत्ति है। यह एक ही उद्देश्य यह है कि करने के लिए पारित हो जाता है है save

देखें BrowserHTTPRequest कैसे एक IOHandler को लागू करने का एक उदाहरण के लिए।