TensorFlow.js: Python savedModel को TensorFlow.js फ़ॉर्मैट में बदलना

1. परिचय

आपने TensorFlow.js का इस्तेमाल शुरू कर दिया है. आपने हमारे पहले से बने मॉडल आज़माए हैं या शायद आपने अपना मॉडल भी बनाया है. हालांकि, आपने देखा कि Python में कुछ बेहतरीन रिसर्च हुई है. अब आपको यह जानना है कि क्या यह रिसर्च वेब ब्राउज़र में काम करेगी, ताकि आपके शानदार आइडिया को लाखों लोगों तक पहुंचाया जा सके. क्या आपको यह जाना-पहचाना लग रहा है? अगर हां, तो यह कोडलैब आपके लिए है!

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

आपको क्या सीखने को मिलेगा

इस कोड लैब में, आपको यह जानने को मिलेगा कि Python से जनरेट किए गए SavedModel को, मॉडल.json फ़ॉर्मैट में पोर्ट करने के लिए, TensorFlow.js कमांड लाइन कन्वर्टर का इस्तेमाल कैसे किया जाता है. मॉडल.json फ़ॉर्मैट, वेब ब्राउज़र में क्लाइंट साइड पर एक्ज़ीक्यूट करने के लिए ज़रूरी होता है.

खास तौर पर, इस बारे में जानकारी मिलती है:

  • एक आसान Python ML मॉडल बनाने और उसे TensorFlow.js कनवर्टर के लिए ज़रूरी फ़ॉर्मैट में सेव करने का तरीका.
  • Python से एक्सपोर्ट किए गए SavedModel पर, TensorFlow.js कनवर्टर को इंस्टॉल और इस्तेमाल करने का तरीका.
  • कन्वर्ज़न से मिली फ़ाइलों को लें और उनका इस्तेमाल अपने JS वेब ऐप्लिकेशन में करें.
  • जानें कि गड़बड़ी होने पर क्या करना है (सभी मॉडल कनवर्ट नहीं होंगे) और आपके पास कौन-कौनसे विकल्प हैं.

मान लें कि आपने हाल ही में रिलीज़ हुई किसी रिसर्च के आधार पर कोई मॉडल बनाया है. अब आपको इस मॉडल को दुनिया भर के लाखों JS डेवलपर के लिए उपलब्ध कराना है. इसके अलावा, हो सकता है कि आप इसका इस्तेमाल खुद अपनी क्रिएशन में करें. अगर यह वेब ब्राउज़र में चलता है, तो दुनिया में कोई भी व्यक्ति इसका अनुभव कर सकता है. इसके लिए, किसी जटिल डिपेंडेंसी या एनवायरमेंट सेटअप की ज़रूरत नहीं होती. क्या आप हैकिंग के लिए तैयार हैं? चलिए, शुरू करते हैं!

आपने जो भी फ़ाइलें बदली हैं उनके बारे में हमें बताएं!

आज हमने जो कुछ भी सीखा है उसका इस्तेमाल करके, अपने कुछ पसंदीदा मॉडल को Python से कन्वर्ट किया जा सकता है. अगर आपने ऐसा कर लिया है और मॉडल की डेमो वेबसाइट बना ली है, तो हमें सोशल मीडिया पर टैग करें. इसके लिए, #MadeWithTFJS हैशटैग का इस्तेमाल करें. इससे आपके प्रोजेक्ट को हमारे TensorFlow ब्लॉग या आने वाले समय में होने वाले शो ऐंड टेल इवेंट में शामिल किया जा सकता है. हम चाहते हैं कि वेब पर और भी बेहतरीन रिसर्च उपलब्ध हो. साथ ही, ज़्यादा से ज़्यादा लोग इन मॉडल का इस्तेमाल, नए और क्रिएटिव तरीकों से कर पाएं. जैसे, इस बेहतरीन उदाहरण में दिखाया गया है.

2. TensorFlow.js क्या है?

1aee0ede85885520.png

TensorFlow.js एक ओपन सोर्स मशीन लर्निंग लाइब्रेरी है. यह JavaScript की मदद से कहीं भी रन की जा सकती है. यह Python में लिखी गई ओरिजनल TensorFlow लाइब्रेरी पर आधारित है. इसका मकसद, डेवलपर के अनुभव को फिर से तैयार करना और JavaScript के इकोसिस्टम के लिए एपीआई का सेट तैयार करना है.

इसका इस्तेमाल कहां किया जा सकता है?

JavaScript को आसानी से एक प्लैटफ़ॉर्म से दूसरे प्लैटफ़ॉर्म पर ले जाया जा सकता है. इसलिए, अब एक ही भाषा में कोड लिखा जा सकता है. साथ ही, मशीन लर्निंग को इन सभी प्लैटफ़ॉर्म पर आसानी से लागू किया जा सकता है:

  • वैनिला JavaScript का इस्तेमाल करके, वेब ब्राउज़र में क्लाइंट साइड
  • Node.js का इस्तेमाल करके, सर्वर साइड और Raspberry Pi जैसे IoT डिवाइसों पर
  • Electron का इस्तेमाल करने वाले डेस्कटॉप ऐप्लिकेशन
  • React Native का इस्तेमाल करके बनाए गए नेटिव मोबाइल ऐप्लिकेशन

TensorFlow.js, इन सभी एनवायरमेंट में एक से ज़्यादा बैकएंड के साथ काम करता है. जैसे, सीपीयू या WebGL. इस संदर्भ में "बैकएंड" का मतलब सर्वर साइड एनवायरमेंट नहीं है. उदाहरण के लिए, WebGL में एक्ज़ीक्यूशन के लिए बैकएंड, क्लाइंट साइड हो सकता है. ऐसा इसलिए, ताकि यह पक्का किया जा सके कि यह सुविधा काम करती है और तेज़ी से काम करती रहे. फ़िलहाल, TensorFlow.js इन पर काम करता है:

  • डिवाइस के ग्राफ़िक्स कार्ड (जीपीयू) पर WebGL एक्ज़ीक्यूशन - यह जीपीयू ऐक्सेलरेटर की मदद से, बड़े मॉडल (साइज़ में 3 एमबी से ज़्यादा) को एक्ज़ीक्यूट करने का सबसे तेज़ तरीका है.
  • सीपीयू पर Web Assembly (WASM) को लागू करना - इससे सीपीयू की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. जैसे, पुरानी जनरेशन के मोबाइल फ़ोन पर. यह छोटे मॉडल (साइज़ में 3 एमबी से कम) के लिए ज़्यादा सही है. ऐसा इसलिए, क्योंकि ग्राफ़िक्स प्रोसेसर पर कॉन्टेंट अपलोड करने में लगने वाले समय की वजह से, WASM के साथ सीपीयू पर WebGL की तुलना में ज़्यादा तेज़ी से काम किया जा सकता है.
  • सीपीयू एक्ज़ीक्यूशन - अगर कोई दूसरा एनवायरमेंट उपलब्ध नहीं है, तो फ़ॉलबैक होना चाहिए. यह तीनों में सबसे धीमी है, लेकिन यह हमेशा आपके लिए उपलब्ध रहती है.

ध्यान दें: अगर आपको पता है कि आपको किस डिवाइस पर कोड चलाना है, तो इनमें से किसी एक बैकएंड को फ़ोर्स किया जा सकता है. इसके अलावा, अगर आपने यह जानकारी नहीं दी है, तो TensorFlow.js को आपके लिए फ़ैसला लेने दें.

क्लाइंट साइड की बेहतरीन सुविधाएं

क्लाइंट मशीन पर वेब ब्राउज़र में TensorFlow.js चलाने से कई फ़ायदे मिल सकते हैं.

निजता

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

स्पीड

आपको किसी रिमोट सर्वर को डेटा नहीं भेजना होता है. इसलिए, अनुमान लगाने (डेटा को कैटगरी में बांटने की प्रोसेस) की प्रोसेस तेज़ी से हो सकती है. इससे भी अच्छी बात यह है कि अगर उपयोगकर्ता आपको ऐक्सेस देता है, तो आपके पास डिवाइस के सेंसर का सीधा ऐक्सेस होता है. जैसे, कैमरा, माइक्रोफ़ोन, जीपीएस, एक्सलरोमीटर वगैरह.

पहुंच और बड़े पैमाने पर इंटिग्रेशन

आपके भेजे गए लिंक पर दुनिया भर में कोई भी व्यक्ति एक क्लिक में पहुंच सकता है. साथ ही, वह अपने ब्राउज़र में वेब पेज खोलकर, आपके बनाए गए कॉन्टेंट का इस्तेमाल कर सकता है. मशीन लर्निंग सिस्टम का इस्तेमाल करने के लिए, CUDA ड्राइवर और अन्य सुविधाओं के साथ सर्वर साइड Linux को सेटअप करने की ज़रूरत नहीं है.

लागत

सर्वर न होने का मतलब है कि आपको सिर्फ़ सीडीएन के लिए पेमेंट करना होगा. इससे एचटीएमएल, सीएसएस, JS, और मॉडल फ़ाइलों को होस्ट किया जा सकेगा. किसी सर्वर को 24 घंटे चालू रखने (इसमें ग्राफ़िक्स कार्ड भी शामिल हो सकता है) की लागत के मुकाबले, सीडीएन की लागत काफ़ी कम होती है.

सर्वर साइड की सुविधाएं

TensorFlow.js के Node.js वर्शन का इस्तेमाल करने से, ये सुविधाएं मिलती हैं.

CUDA की पूरी सुविधा

सर्वर साइड पर, ग्राफ़िक्स कार्ड की मदद से तेज़ी से काम करने के लिए, आपको NVIDIA CUDA ड्राइवर इंस्टॉल करने होंगे. इससे TensorFlow, ग्राफ़िक्स कार्ड के साथ काम कर पाएगा. ब्राउज़र में ऐसा नहीं होता, क्योंकि यह WebGL का इस्तेमाल करता है. इसलिए, इसे इंस्टॉल करने की ज़रूरत नहीं होती. हालांकि, CUDA के साथ काम करने वाले ग्राफ़िक्स कार्ड की मदद से, ट्रेनिंग और अनुमान लगाने की प्रोसेस को कम समय में पूरा किया जा सकता है. परफ़ॉर्मेंस, Python TensorFlow के साथ काम करने वाले वर्शन के बराबर है, क्योंकि दोनों एक ही C++ बैकएंड का इस्तेमाल करते हैं.

मॉडल का साइज़

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

आईओटी

Node.js, Raspberry Pi जैसे लोकप्रिय सिंगल बोर्ड कंप्यूटर पर काम करता है. इसका मतलब है कि इन डिवाइसों पर TensorFlow.js मॉडल भी इस्तेमाल किए जा सकते हैं.

स्पीड

Node.js को JavaScript में लिखा गया है. इसका मतलब है कि इसे जस्ट इन टाइम कंपाइलेशन का फ़ायदा मिलता है. इसका मतलब है कि Node.js का इस्तेमाल करने पर, आपको अक्सर परफ़ॉर्मेंस में सुधार दिखेगा. ऐसा इसलिए, क्योंकि इसे रनटाइम पर ऑप्टिमाइज़ किया जाएगा. खास तौर पर, किसी भी तरह की प्रीप्रोसेसिंग के लिए. इसका एक बेहतरीन उदाहरण इस केस स्टडी में देखा जा सकता है. इसमें दिखाया गया है कि Hugging Face ने Node.js का इस्तेमाल करके, अपने नैचुरल लैंग्वेज प्रोसेसिंग मॉडल की परफ़ॉर्मेंस को दो गुना कैसे किया.

अब आपको TensorFlow.js के बारे में बुनियादी जानकारी मिल गई है. साथ ही, यह भी पता चल गया है कि इसे कहां इस्तेमाल किया जा सकता है और इसके क्या फ़ायदे हैं. तो चलिए, अब इसका इस्तेमाल शुरू करते हैं!

3. सिस्टम सेट अप करना

इस ट्यूटोरियल के लिए, हम Ubuntu का इस्तेमाल करेंगे. यह Linux का एक लोकप्रिय डिस्ट्रिब्यूशन है, जिसका इस्तेमाल कई लोग करते हैं. अगर आपको क्लाउड पर आधारित वर्चुअल मशीन पर इसका इस्तेमाल करना है, तो यह Google Cloud Compute Engine पर बेस इमेज के तौर पर उपलब्ध है.

इस लेख को लिखते समय, नया वैनिला Compute Engine इंस्टेंस बनाते समय Ubuntu 18.04.4 LTS की इमेज चुनी जा सकती है. हम इसका इस्तेमाल करेंगे. आपके पास अपनी मशीन या किसी दूसरे ऑपरेटिंग सिस्टम का इस्तेमाल करने का विकल्प होता है. हालांकि, सिस्टम के हिसाब से इंस्टॉलेशन के निर्देश और ज़रूरी शर्तें अलग-अलग हो सकती हैं.

TensorFlow (Python वर्शन) इंस्टॉल करना

अब, हो सकता है कि आपको Python पर आधारित किसी ऐसे मॉडल को बदलना हो जो आपको मिला है या जिसे आपको लिखना है. Python से "SavedModel" फ़ाइल एक्सपोर्ट करने से पहले, आपको अपने इंस्टेंस पर TensorFlow का Python वर्शन सेटअप करना होगा. ऐसा तब करना होगा, जब "SavedModel" पहले से डाउनलोड करने के लिए उपलब्ध न हो.

ऊपर बनाई गई क्लाउड मशीन में एसएसएच करें. इसके बाद, टर्मिनल विंडो में यह टाइप करें:

टर्मिनल विंडो:

sudo apt update
sudo apt-get install python3

इससे यह पक्का हो जाएगा कि मशीन पर Python 3 इंस्टॉल है. TensorFlow का इस्तेमाल करने के लिए, Python 3.4 या इसके बाद का वर्शन इंस्टॉल होना चाहिए.

यह पुष्टि करने के लिए कि सही वर्शन इंस्टॉल है, यह टाइप करें:

टर्मिनल विंडो:

python3 --version

आपको वर्शन नंबर दिखाने वाला कुछ आउटपुट दिखेगा. जैसे, Python 3.6.9. अगर आपको यह वैल्यू सही तरीके से प्रिंट की हुई दिखती है और यह 3.4 से ज़्यादा है, तो हम आगे बढ़ सकते हैं.

इसके बाद, हम Python 3 के लिए PIP इंस्टॉल करेंगे. यह Python का पैकेज मैनेजर है. इसके बाद, हम इसे अपडेट करेंगे. प्रकार:

टर्मिनल विंडो:

sudo apt install python3-pip
pip3 install --upgrade pip

हम फिर से pip3 इंस्टॉलेशन की पुष्टि कर सकते हैं. इसके लिए, यह तरीका अपनाएं:

टर्मिनल विंडो:

pip3 --version

इस कमांड को चलाने के बाद, हमें टर्मिनल पर pip 20.2.3 प्रिंट होता हुआ दिखता है.

TensorFlow को इंस्टॉल करने से पहले, यह ज़रूरी है कि Python पैकेज "setuptools" का वर्शन 41.0.0 या इसके बाद का हो. यह पक्का करने के लिए कि यह सबसे नए वर्शन पर अपडेट हो गया है, यहां दिया गया कमांड चलाएं:

टर्मिनल विंडो:

pip3 install -U setuptools

आखिर में, अब हम Python के लिए TensorFlow इंस्टॉल कर सकते हैं:

टर्मिनल विंडो:

pip3 install tensorflow

इस प्रोसेस को पूरा होने में कुछ समय लग सकता है. इसलिए, कृपया इसके पूरा होने तक इंतज़ार करें.

आइए, देखते हैं कि TensorFlow सही तरीके से इंस्टॉल हुआ है या नहीं. अपनी मौजूदा डायरेक्ट्री में test.py नाम की Python फ़ाइल बनाएं:

टर्मिनल विंडो:

nano test.py

nano खुलने के बाद, इंस्टॉल किए गए TensorFlow के वर्शन को प्रिंट करने के लिए, कुछ Python कोड लिखा जा सकता है:

test.py:

import tensorflow as tf
print(tf.__version__)

डिस्क में बदलाव लिखने के लिए CTRL + O दबाएं. इसके बाद, nano एडिटर से बाहर निकलने के लिए CTRL + X दबाएं.

अब हम इस Python फ़ाइल को चलाकर, स्क्रीन पर प्रिंट किए गए TensorFlow के वर्शन को देख सकते हैं:

टर्मिनल विंडो:

python3 test.py

इस लेख को लिखते समय, हमें इंस्टॉल किए गए TensorFlow Python के वर्शन के लिए, कंसोल पर 2.3.1 प्रिंट किया हुआ दिखता है.

4. Python मॉडल बनाना

इस कोडलैब के अगले चरण में, हम एक सामान्य Python मॉडल बनाने का तरीका बताएंगे. इससे यह पता चलेगा कि ट्रेनिंग के बाद तैयार हुए मॉडल को "SavedModel" फ़ॉर्मैट में कैसे सेव किया जा सकता है. इसके बाद, इसे TensorFlow.js के कमांड लाइन कन्वर्टर के साथ इस्तेमाल किया जा सकता है. इसी तरह, किसी भी Python मॉडल को बदलने के लिए भी यही सिद्धांत लागू होगा. हालांकि, हम इस कोड को आसान रखेंगे, ताकि हर कोई इसे समझ सके.

आइए, पहले सेक्शन में बनाई गई test.py फ़ाइल में बदलाव करें और कोड को इस तरह अपडेट करें:

test.py:

import tensorflow as tf
print(tf.__version__)

# Import NumPy - package for working with arrays in Python.
import numpy as np

# Import useful keras functions - this is similar to the
# TensorFlow.js Layers API functionality.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

# Create a new dense layer with 1 unit, and input shape of [1].
layer0 = Dense(units=1, input_shape=[1])
model = Sequential([layer0])

# Compile the model using stochastic gradient descent as optimiser
# and the mean squared error loss function.
model.compile(optimizer='sgd', loss='mean_absolute_error')

# Provide some training data! Here we are using some fictional data 
# for house square footage and house price (which is simply 1000x the 
# square footage) which our model must learn for itself.
xs = np.array([800.0, 850.0, 900.0, 950.0, 980.0, 1000.0, 1050.0, 1075.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0], dtype=float)

ys = np.array([800000.0, 850000.0, 900000.0, 950000.0, 980000.0, 1000000.0, 1050000.0, 1075000.0, 1100000.0, 1150000.0, 1200000.0,  1250000.0, 1300000.0, 1400000.0, 1500000.0, 1600000.0, 1700000.0, 1800000.0, 1900000.0, 2000000.0], dtype=float)

# Train the model for 500 epochs.
model.fit(xs, ys, epochs=500, verbose=0)

# Test the trained model on a test input value
print(model.predict([1200.0]))

# Save the model we just trained to the "SavedModel" format to the
# same directory our test.py file is located.
tf.saved_model.save(model, './')

यह कोड, एक सामान्य लीनियर रिग्रेशन को ट्रेनिंग देगा. इससे वह दिए गए x (इनपुट) और y (आउटपुट) के बीच के संबंध का अनुमान लगाना सीख पाएगा. इसके बाद, हम ट्रेनिंग के बाद तैयार हुए मॉडल को डिस्क में सेव करेंगे. हर लाइन के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, इनलाइन टिप्पणियां देखें.

इस प्रोग्राम को चलाने के बाद, अगर हम अपनी डायरेक्ट्री की जांच करते हैं (python3 test.py को कॉल करके), तो हमें अपनी मौजूदा डायरेक्ट्री में बनाई गई कुछ नई फ़ाइलें और फ़ोल्डर दिखने चाहिए:

  • test.py
  • saved_model.pb
  • एसेट
  • वैरिएबल

हमने अब उन फ़ाइलों को जनरेट कर दिया है जिनका इस्तेमाल TensorFlow.js कनवर्टर को इस मॉडल को ब्राउज़र में चलाने के लिए करना होगा!

5. SavedModel को TensorFlow.js फ़ॉर्मैट में बदलना

TensorFlow.js कनवर्टर इंस्टॉल करना

कन्वर्टर को इंस्टॉल करने के लिए, यह कमांड चलाएं:

टर्मिनल विंडो:

pip3 install tensorflowjs

यह बहुत आसान था.

मान लें कि हम ऊपर दिखाए गए विज़र्ड वर्शन के बजाय, कमांड लाइन कन्वर्टर (tensorflowjs_converter) का इस्तेमाल कर रहे थे. ऐसे में, हमने अभी जो सेव किया गया मॉडल बनाया है उसे बदलने के लिए, हम यहां दी गई कमांड को कॉल कर सकते हैं. साथ ही, कन्वर्टर को पैरामीटर साफ़ तौर पर पास कर सकते हैं:

टर्मिनल विंडो:

tensorflowjs_converter \
    --input_format=keras_saved_model \
    ./ \
    ./predict_houses_tfjs

यहां क्या हो रहा है? यहां हमने अभी-अभी इंस्टॉल किए गए tensorflowjs_converter बाइनरी को कॉल किया है. साथ ही, यह बताया है कि हम Keras के सेव किए गए मॉडल को बदलने की कोशिश कर रहे हैं.

ऊपर दिए गए हमारे उदाहरण कोड में, आपको दिखेगा कि हमने Keras को इंपोर्ट किया है और अपने मॉडल को बनाने के लिए, इसके हायर लेवल लेयर एपीआई का इस्तेमाल किया है. अगर आपने अपने Python कोड में keras का इस्तेमाल नहीं किया है, तो आपको किसी दूसरे इनपुट फ़ॉर्मैट का इस्तेमाल करना पड़ सकता है:

  • keras - keras फ़ॉर्मैट (HDF5 फ़ाइल टाइप) लोड करने के लिए
  • tf_saved_model - इसका इस्तेमाल, ऐसे मॉडल को लोड करने के लिए किया जाता है जो Keras के बजाय TensorFlow Core API का इस्तेमाल करता है.
  • tf_frozen_model - इस विकल्प का इस्तेमाल, फ़्रोज़न वेट वाला मॉडल लोड करने के लिए किया जाता है.
  • tf_hub - इसका इस्तेमाल, TensorFlow Hub से जनरेट किए गए मॉडल को लोड करने के लिए किया जाता है.

इन अन्य फ़ॉर्मैट के बारे में यहां ज़्यादा जानें.

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

ऊपर दी गई कमांड चलाने पर, मौजूदा डायरेक्ट्री में predict_houses_tfjs नाम का एक नया फ़ोल्डर बन जाता है. इसमें: शामिल होता है

  • model.json
  • Group1-shard1of1.bin

वेब ब्राउज़र में मॉडल चलाने के लिए, हमें इन फ़ाइलों की ज़रूरत होती है. इन फ़ाइलों को सेव करें, क्योंकि हम इनका इस्तेमाल अगले सेक्शन में करेंगे.

6. ब्राउज़र में, बदले गए मॉडल का इस्तेमाल करना

बदली गई फ़ाइलों को होस्ट करना

सबसे पहले, हमें वेब सर्वर पर जनरेट हुई model.json और *.bin फ़ाइलों को रखना होगा, ताकि हम उन्हें अपने वेब पेज के ज़रिए ऐक्सेस कर सकें. इस डेमो के लिए, हम Glitch.com का इस्तेमाल करेंगे, ताकि आपको इसे समझने में आसानी हो. हालांकि, अगर आप वेब इंजीनियरिंग बैकग्राउंड से हैं, तो इसके बजाय अपने मौजूदा Ubuntu सर्वर इंस्टेंस पर एक सामान्य एचटीटीपी सर्वर शुरू किया जा सकता है. यह आपको तय करना है.

Glitch पर फ़ाइलें अपलोड करना

  1. Glitch.com में साइन इन करें
  2. हमारे बॉयलरप्लेट TensorFlow.js प्रोजेक्ट को क्लोन करने के लिए, इस लिंक का इस्तेमाल करें. इसमें एचटीएमएल, सीएसएस, और जेएस फ़ाइलें शामिल होती हैं. ये फ़ाइलें, TensorFlow.js लाइब्रेरी को इंपोर्ट करती हैं, ताकि हम इसका इस्तेमाल कर सकें.
  3. बाईं ओर दिए गए पैनल में, "ऐसेट" फ़ोल्डर पर क्लिक करें.
  4. "ऐसेट अपलोड करें" पर क्लिक करें. इसके बाद, इस फ़ोल्डर में अपलोड करने के लिए group1-shard1of1.bin को चुनें. अपलोड होने के बाद, यह ऐसा दिखेगा: 25a2251c7f165184.png
  5. अभी अपलोड की गई group1-shard1of1.bin फ़ाइल पर क्लिक करने से, आपको उसकी जगह का यूआरएल कॉपी करने का विकल्प मिलेगा. अब इस पाथ को इस तरह कॉपी करें: 92ded8d46442c404.png
  6. अब अपनी लोकल मशीन पर अपने पसंदीदा टेक्स्ट एडिटर का इस्तेमाल करके model.json में बदलाव करें. इसके बाद, CTRL+F का इस्तेमाल करके group1-shard1of1.bin फ़ाइल खोजें. यह फ़ाइल, model.json में कहीं मौजूद होगी.

इस फ़ाइल के नाम को उस यूआरएल से बदलें जिसे आपने पांचवें चरण में कॉपी किया था. हालांकि, कॉपी किए गए पाथ से गड़बड़ी की वजह से जनरेट हुए शुरुआती https://cdn.glitch.com/ को मिटा दें.

बदलाव करने के बाद, यह कुछ इस तरह दिखना चाहिए (ध्यान दें कि सर्वर पाथ को हटा दिया गया है, ताकि सिर्फ़ अपलोड की गई फ़ाइल का नाम रखा जा सके): d5a338f2dc1f31d4.png 7. अब बदलाव की गई इस model.json फ़ाइल को सेव करें और glitch पर अपलोड करें. इसके लिए, ऐसेट पर क्लिक करें. इसके बाद, "ऐसेट अपलोड करें" बटन (ज़रूरी) पर क्लिक करें. अगर फ़िज़िकल बटन का इस्तेमाल नहीं किया जाता है और ड्रैग और ड्रॉप किया जाता है, तो इसे सीडीएन पर अपलोड करने के बजाय, बदलाव की जा सकने वाली फ़ाइल के तौर पर अपलोड किया जाएगा. यह फ़ाइल उसी फ़ोल्डर में नहीं होगी. साथ ही, जब TensorFlow.js किसी मॉडल के लिए बाइनरी फ़ाइलें डाउनलोड करने की कोशिश करता है, तो रिलेटिव पाथ का इस्तेमाल किया जाता है. अगर आपने इसे सही तरीके से किया है, तो आपको assets फ़ोल्डर में दो फ़ाइलें दिखेंगी. ये फ़ाइलें इस तरह दिखेंगी: 51a6dbd5d3097ffc.png

बढ़िया! अब हम ब्राउज़र में सेव की गई फ़ाइलों को कुछ असल कोड के साथ इस्तेमाल करने के लिए तैयार हैं.

मॉडल लोड हो रहा है

अब हमने अपनी बदली गई फ़ाइलों को होस्ट कर लिया है. इसलिए, हम इन फ़ाइलों को लोड करने के लिए एक सामान्य वेबपेज लिख सकते हैं. साथ ही, इनका इस्तेमाल अनुमान लगाने के लिए कर सकते हैं. Glitch प्रोजेक्ट फ़ोल्डर में script.js खोलें. इसके बाद, इस फ़ाइल के कॉन्टेंट को इससे बदलें. हालांकि, इससे पहले आपको const MODEL_URL को बदलकर, Glitch.com पर अपलोड की गई अपनी model.json फ़ाइल के लिए जनरेट किए गए Glitch.com लिंक पर ले जाना होगा:

script.js:

// Grab a reference to our status text element on the web page.
// Initially we print out the loaded version of TFJS.
const status = document.getElementById('status');
status.innerText = 'Loaded TensorFlow.js - version: ' + tf.version.tfjs;

// Specify location of our Model.json file we uploaded to the Glitch.com CDN.
const MODEL_URL = YOUR MODEL.JSON URL HERE! CHANGE THIS!';
// Specify a test value we wish to use in our prediction.
// Here we use 950, so we expect the result to be close to 950,000.
const TEST_VALUE = 950.0

// Create an asynchronous function.
async function run() {
    // Load the model from the CDN.
    const model = await tf.loadLayersModel(MODEL_URL);

    // Print out the architecture of the loaded model.
    // This is useful to see that it matches what we built in Python.
    console.log(model.summary());

    // Create a 1 dimensional tensor with our test value.
    const input = tf.tensor1d([TEST_VALUE]);

    // Actually make the prediction.
    const result = model.predict(input);

    // Grab the result of prediction using dataSync method
    // which ensures we do this synchronously.
    status.innerText = 'Input of ' + TEST_VALUE + 
        'sqft predicted as $' + result.dataSync()[0];
}

// Call our function to start the prediction!
run();

MODEL_URL कॉन्स्टेंट को बदलकर, अपने model.json पाथ पर ले जाने के बाद, ऊपर दिए गए कोड को चलाने पर, आपको नीचे दिखाया गया आउटपुट मिलेगा.

c5e8457213058ec3.png

अगर हम वेब ब्राउज़र के कंसोल की जांच करते हैं (ब्राउज़र में डेवलपर टूल खोलने के लिए F12 दबाएं), तो हमें लोड किए गए मॉडल का ब्यौरा भी दिखता है. इसमें यह प्रिंट होता है:

35e79d70dbd66f27.png

इस कोड की तुलना, इस कोडलैब की शुरुआत में दिए गए Python कोड से करने पर, हम पुष्टि कर सकते हैं कि यह वही नेटवर्क है जिसे हमने एक डेंस इनपुट और एक डेंस लेयर के साथ बनाया था. इसमें एक नोड है.

बधाई हो! आपने वेब ब्राउज़र में, Python के कनवर्ट किए गए ट्रेन किए गए मॉडल को अभी-अभी चलाया है!

7. ऐसे मॉडल जो कन्वर्ट नहीं होते

ऐसा हो सकता है कि कुछ मामलों में, ज़्यादा जटिल मॉडल को कन्वर्ज़न के लिए इस्तेमाल न किया जा सके. ये मॉडल, कम इस्तेमाल होने वाले ऑपरेशनों को कंपाइल करते हैं. ब्राउज़र पर काम करने वाला TensorFlow.js, TensorFlow का पूरी तरह से नया वर्शन है. इसलिए, फ़िलहाल हम उन सभी लो लेवल ऑपरेशंस के साथ काम नहीं करते जो TensorFlow C++ API में उपलब्ध हैं. इनकी संख्या हज़ारों में है. हालांकि, समय के साथ-साथ हम और भी ऑपरेशंस जोड़ रहे हैं, क्योंकि हम लगातार आगे बढ़ रहे हैं और कोर ऑपरेशंस ज़्यादा स्टेबल हो रहे हैं.

लिखते समय, TensorFlow Python में ऐसा एक फ़ंक्शन linalg.diag है. इसे savedmodel के तौर पर एक्सपोर्ट करने पर, यह एक ऐसा ऑप जनरेट करता है जिसका इस्तेमाल नहीं किया जा सकता. अगर हम Python में इस सुविधा का इस्तेमाल करने वाले किसी savedmodel को बदलने की कोशिश करते हैं, तो हमें नीचे दी गई गड़बड़ी जैसा मैसेज दिखेगा. Python, इस सुविधा से जनरेट होने वाले ऑपरेशनों के साथ काम करती है:

5df94fc652393e00.png

यहां हम देख सकते हैं कि लाल रंग में हाइलाइट किया गया linalg.diag कॉल, MatrixDiagV3 नाम का एक ऑप बनाता है. यह ऑप, इस कोडलैब को लिखते समय वेब ब्राउज़र में TensorFlow.js के साथ काम नहीं करता.

क्या करें?

आपके पास दो विकल्प हैं.

  1. TensorFlow.js में इस ओप को लागू करें. हम एक ओपन सोर्स प्रोजेक्ट हैं. हम नए ओप जैसे कामों में योगदान का स्वागत करते हैं. TensorFlow.js के लिए, नए ऑप लिखने के बारे में जानकारी देने वाली यह गाइड देखें. अगर ऐसा हो जाता है, तो इस गड़बड़ी को अनदेखा करने के लिए, हमारे कमांड लाइन कनवर्टर पर Skip_op_check फ़्लैग का इस्तेमाल किया जा सकता है. इससे, कन्वर्ज़न जारी रहेगा. यह मान लिया जाएगा कि यह ऑप, TensorFlow.js के उस नए बिल्ड में उपलब्ध है जिसे आपने बनाया है और जिसमें मौजूद ऑप काम नहीं कर रहा है.
  2. यह पता लगाएं कि आपके Python कोड के किस हिस्से की वजह से, एक्सपोर्ट की गई savedmodel फ़ाइल में काम नहीं किया जा सका. कोड के छोटे सेट में इसे आसानी से ढूंढा जा सकता है. हालांकि, ज़्यादा जटिल मॉडल में इसकी जांच करने में काफ़ी समय लग सकता है, क्योंकि फ़िलहाल savedmodel फ़ाइल फ़ॉर्मैट में, दिए गए ऑप को जनरेट करने वाले हाई लेवल के Python फ़ंक्शन कॉल की पहचान करने का कोई तरीका नहीं है. हालांकि, जगह की जानकारी का पता चलने के बाद, इसे बदलकर कोई दूसरा तरीका इस्तेमाल किया जा सकता है.

8. बधाई हो

बधाई हो, आपने वेब ब्राउज़र में TensorFlow.js के ज़रिए Python मॉडल का इस्तेमाल करने की शुरुआत कर दी है!

रीकैप

इस कोड लैब में, हमने इन कामों को करने का तरीका सीखा:

  1. Python पर आधारित TensorFlow को इंस्टॉल करने के लिए, Linux एनवायरमेंट सेट अप करना
  2. Python ‘SavedModel' को एक्सपोर्ट करना
  3. TensorFlow.js कमांड लाइन कन्वर्टर इंस्टॉल करना
  4. ज़रूरी क्लाइंट साइड फ़ाइलें बनाने के लिए, TensorFlow.js कमांड लाइन कन्वर्टर का इस्तेमाल करें
  5. जनरेट की गई फ़ाइलों का इस्तेमाल, असली वेब ऐप्लिकेशन में करना
  6. उन मॉडल की पहचान करें जो कन्वर्ट नहीं होंगे. साथ ही, यह भी पता लगाएं कि आने वाले समय में उन्हें कन्वर्ट करने के लिए क्या लागू करना होगा.

आगे क्या करना है?

#MadeWithTFJS का इस्तेमाल करके बनाई गई किसी भी चीज़ में हमें टैग करना न भूलें. इससे आपको सोशल मीडिया पर या आने वाले समय में होने वाले TensorFlow इवेंट में शामिल होने का मौका मिल सकता है. हमें यह देखने में खुशी होगी कि आपने ब्राउज़र में क्लाइंट साइड पर क्या बदला और उसका इस्तेमाल कैसे किया!

ज़्यादा जानकारी पाने के लिए, TensorFlow.js के अन्य कोडलैब

एक्सप्लोर करने के लिए वेबसाइटें