एक वेब वर्कर का उपयोग करके एक मॉडल को प्रशिक्षित करें, एक वेब वर्कर का उपयोग करके एक मॉडल को प्रशिक्षित करें

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

बेशक, यह दो पूर्णांकों को जोड़ने का सबसे प्रभावी तरीका नहीं है! लेकिन ट्यूटोरियल वेब एमएल में एक महत्वपूर्ण तकनीक को प्रदर्शित करता है: मुख्य थ्रेड को अवरुद्ध किए बिना लंबे समय तक चलने वाली गणना कैसे करें, जो यूआई तर्क को संभालती है।

इस ट्यूटोरियल के लिए उदाहरण एप्लिकेशन ऑनलाइन उपलब्ध है, इसलिए आपको कोई कोड डाउनलोड करने या विकास वातावरण स्थापित करने की आवश्यकता नहीं है। यदि आप कोड को स्थानीय रूप से चलाना चाहते हैं, तो स्थानीय रूप से उदाहरण चलाएँ में वैकल्पिक चरणों को पूरा करें। यदि आप एक विकास वातावरण स्थापित नहीं करना चाहते हैं, तो आप उदाहरण का अन्वेषण करना छोड़ सकते हैं।

उदाहरण कोड GitHub पर उपलब्ध है।

(वैकल्पिक) उदाहरण को स्थानीय रूप से चलाएँ

आवश्यक शर्तें

उदाहरण ऐप को स्थानीय रूप से चलाने के लिए, आपको अपने विकास परिवेश में निम्नलिखित इंस्टॉल करना होगा:

उदाहरण ऐप इंस्टॉल करें और चलाएं

  1. tfjs-examples भंडार को क्लोन करें या डाउनलोड करें।
  2. addition-rnn-webworker निर्देशिका में बदलें:

    cd tfjs-examples/addition-rnn-webworker
    
  3. निर्भरताएँ स्थापित करें:

    yarn
    
  4. विकास सर्वर प्रारंभ करें:

    yarn run watch
    

उदाहरण का अन्वेषण करें

उदाहरण ऐप खोलें . (या, यदि आप स्थानीय रूप से उदाहरण चला रहे हैं, तो अपने ब्राउज़र में http://localhost:1234 पर जाएं।)

आपको TensorFlow.js: Addition RNN शीर्षक वाला एक पेज देखना चाहिए। ऐप को आज़माने के लिए निर्देशों का पालन करें।

वेब फॉर्म का उपयोग करके, आप मॉडल को प्रशिक्षित करने के लिए उपयोग किए जाने वाले कुछ मापदंडों को अपडेट कर सकते हैं, जिनमें निम्नलिखित शामिल हैं:

  • अंक : जोड़े जाने वाले पदों में अंकों की अधिकतम संख्या।
  • प्रशिक्षण का आकार : उत्पन्न करने के लिए प्रशिक्षण उदाहरणों की संख्या।
  • आरएनएन प्रकार : SimpleRNN , GRU , या LSTM में से एक।
  • आरएनएन छिपी परत का आकार : आउटपुट स्पेस की आयामता (एक सकारात्मक पूर्णांक होना चाहिए)।
  • बैच का आकार : प्रति ग्रेडिएंट अपडेट नमूनों की संख्या।
  • ट्रेन पुनरावृत्तियाँ : model.fit() लागू करके मॉडल को प्रशिक्षित करने की संख्या
  • परीक्षण उदाहरणों की # : उत्पन्न करने के लिए उदाहरण स्ट्रिंग की संख्या (उदाहरण के लिए, 27+41 )।

विभिन्न मापदंडों के साथ मॉडल को प्रशिक्षित करने का प्रयास करें, और देखें कि क्या आप अंकों के विभिन्न सेटों के लिए भविष्यवाणियों की सटीकता में सुधार कर सकते हैं। यह भी देखें कि मॉडल फिट समय विभिन्न मापदंडों से कैसे प्रभावित होता है।

कोड का अन्वेषण करें

उदाहरण ऐप कुछ मापदंडों को प्रदर्शित करता है जिन्हें आप आरएनएन के प्रशिक्षण के लिए कॉन्फ़िगर कर सकते हैं। यह मुख्य थ्रेड से एक मॉडल को प्रशिक्षित करने के लिए एक वेब वर्कर के उपयोग को भी प्रदर्शित करता है। वेब एमएल में वेब वर्कर महत्वपूर्ण हैं क्योंकि वे आपको पृष्ठभूमि थ्रेड पर कम्प्यूटेशनल रूप से महंगे प्रशिक्षण कार्य चलाने देते हैं, जिससे मुख्य थ्रेड पर संभावित उपयोगकर्ता-प्रभावित प्रदर्शन समस्याओं से बचा जा सकता है। मुख्य और कार्यकर्ता धागे संदेश घटनाओं के माध्यम से एक दूसरे के साथ संवाद करते हैं।

वेब वर्कर्स के बारे में अधिक जानने के लिए, वेब वर्कर्स एपीआई और वेब वर्कर्स का उपयोग करना देखें।

उदाहरण ऐप के लिए मुख्य मॉड्यूल index.js है। index.js स्क्रिप्ट एक वेब वर्कर बनाती है जो worker.js मॉड्यूल चलाता है:

const worker =
    new Worker(new URL('./worker.js', import.meta.url), {type: 'module'});

index.js काफी हद तक एक ही फ़ंक्शन, runAdditionRNNDemo से बना है, जो फॉर्म सबमिशन को संभालता है, फॉर्म डेटा को संसाधित करता है, फॉर्म डेटा को कार्यकर्ता को भेजता है, कार्यकर्ता द्वारा मॉडल को प्रशिक्षित करने और परिणाम वापस करने की प्रतीक्षा करता है, और फिर पृष्ठ पर परिणाम प्रदर्शित करता है .

कार्यकर्ता को फॉर्म डेटा भेजने के लिए, स्क्रिप्ट कार्यकर्ता पर postMessage आमंत्रित करती है :

worker.postMessage({
  digits,
  trainingSize,
  rnnType,
  layers,
  hiddenSize,
  trainIterations,
  batchSize,
  numTestExamples
});

कार्यकर्ता इस संदेश को सुनता है और फॉर्म डेटा को उन कार्यों तक भेजता है जो डेटा तैयार करते हैं और प्रशिक्षण शुरू करते हैं:

self.addEventListener('message', async (e) => {
  const { digits, trainingSize, rnnType, layers, hiddenSize, trainIterations, batchSize, numTestExamples } = e.data;
  const demo = new AdditionRNNDemo(digits, trainingSize, rnnType, layers, hiddenSize);
  await demo.train(trainIterations, batchSize, numTestExamples);
})

प्रशिक्षण के दौरान, कार्यकर्ता दो अलग-अलग प्रकार के संदेश भेज सकता है, एक isPredict true पर सेट है

self.postMessage({
  isPredict: true,
  i, iterations, modelFitTime,
  lossValues, accuracyValues,
});

और दूसरा isPredict के साथ false पर सेट है।

self.postMessage({
  isPredict: false,
  isCorrect, examples
});

जब यूआई थ्रेड ( index.js ) संदेश घटनाओं को संभालता है, तो यह कार्यकर्ता से लौटाए गए डेटा के आकार को निर्धारित करने के लिए isPredict ध्वज की जांच करता है । यदि isPredict सत्य है, तो डेटा को एक भविष्यवाणी का प्रतिनिधित्व करना चाहिए, और स्क्रिप्ट tfjs-vis का उपयोग करके पृष्ठ को अपडेट करती है । यदि isPredict गलत है, तो स्क्रिप्ट कोड का एक ब्लॉक चलाती है जो मानती है कि डेटा उदाहरणों का प्रतिनिधित्व करता है। यह डेटा को HTML में लपेटता है और HTML को पेज में सम्मिलित करता है।

आगे क्या होगा

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

TensorFlow.js मॉडल के प्रशिक्षण के बारे में अधिक जानने के लिए, प्रशिक्षण मॉडल देखें।