You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/hi/3-Web-App/1-Web-App/README.md

29 KiB

वेब ऐप बनाएं जो ML मॉडल का उपयोग करे

इस पाठ में, आप एक डेटा सेट पर ML मॉडल को प्रशिक्षित करेंगे जो अद्भुत है: पिछली सदी में UFO देखे जाने की घटनाएं, जो NUFORC के डेटाबेस से ली गई हैं।

आप सीखेंगे:

  • प्रशिक्षित मॉडल को 'पिकल' कैसे करें
  • उस मॉडल का उपयोग Flask ऐप में कैसे करें

हम नोटबुक्स का उपयोग जारी रखेंगे ताकि डेटा को साफ किया जा सके और मॉडल को प्रशिक्षित किया जा सके, लेकिन आप इस प्रक्रिया को एक कदम आगे ले जा सकते हैं और मॉडल को 'वाइल्ड' में उपयोग करने का अनुभव प्राप्त कर सकते हैं, यानी एक वेब ऐप में।

इसके लिए, आपको Flask का उपयोग करके एक वेब ऐप बनाना होगा।

प्री-लेक्चर क्विज़

ऐप बनाना

मशीन लर्निंग मॉडल को उपयोग करने के लिए वेब ऐप बनाने के कई तरीके हैं। आपकी वेब आर्किटेक्चर आपके मॉडल के प्रशिक्षण के तरीके को प्रभावित कर सकती है। कल्पना करें कि आप एक व्यवसाय में काम कर रहे हैं जहां डेटा साइंस समूह ने एक मॉडल प्रशिक्षित किया है जिसे वे ऐप में उपयोग करना चाहते हैं।

विचार करने योग्य बातें

आपको कई सवाल पूछने की आवश्यकता होगी:

  • क्या यह वेब ऐप है या मोबाइल ऐप? यदि आप मोबाइल ऐप बना रहे हैं या मॉडल को IoT संदर्भ में उपयोग करने की आवश्यकता है, तो आप TensorFlow Lite का उपयोग कर सकते हैं और मॉडल को Android या iOS ऐप में उपयोग कर सकते हैं।
  • मॉडल कहां रहेगा? क्लाउड में या लोकल?
  • ऑफ़लाइन समर्थन। क्या ऐप को ऑफ़लाइन काम करना होगा?
  • मॉडल को प्रशिक्षित करने के लिए कौन सी तकनीक का उपयोग किया गया था? चुनी गई तकनीक आपके उपयोग किए जाने वाले टूलिंग को प्रभावित कर सकती है।
    • TensorFlow का उपयोग। यदि आप TensorFlow का उपयोग करके मॉडल को प्रशिक्षित कर रहे हैं, तो उदाहरण के लिए, यह इकोसिस्टम TensorFlow.js का उपयोग करके वेब ऐप में उपयोग के लिए TensorFlow मॉडल को कनवर्ट करने की क्षमता प्रदान करता है।
    • PyTorch का उपयोग। यदि आप PyTorch जैसी लाइब्रेरी का उपयोग करके मॉडल बना रहे हैं, तो आपके पास इसे ONNX (Open Neural Network Exchange) फॉर्मेट में एक्सपोर्ट करने का विकल्प है ताकि इसे JavaScript वेब ऐप्स में उपयोग किया जा सके जो Onnx Runtime का उपयोग कर सकते हैं। इस विकल्प को भविष्य के पाठ में Scikit-learn-प्रशिक्षित मॉडल के लिए एक्सप्लोर किया जाएगा।
    • Lobe.ai या Azure Custom Vision का उपयोग। यदि आप Lobe.ai या Azure Custom Vision जैसे ML SaaS (Software as a Service) सिस्टम का उपयोग करके मॉडल को प्रशिक्षित कर रहे हैं, तो इस प्रकार का सॉफ़्टवेयर कई प्लेटफार्मों के लिए मॉडल को एक्सपोर्ट करने के तरीके प्रदान करता है, जिसमें क्लाउड में आपके ऑनलाइन एप्लिकेशन द्वारा क्वेरी किए जाने वाले एक bespoke API का निर्माण शामिल है।

आपके पास एक पूरा Flask वेब ऐप बनाने का अवसर भी है जो वेब ब्राउज़र में ही मॉडल को प्रशिक्षित कर सकता है। इसे JavaScript संदर्भ में TensorFlow.js का उपयोग करके भी किया जा सकता है।

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

टूल

इस कार्य के लिए, आपको दो टूल्स की आवश्यकता होगी: Flask और Pickle, दोनों Python पर चलते हैं।

Flask क्या है? इसके निर्माताओं द्वारा 'माइक्रो-फ्रेमवर्क' के रूप में परिभाषित, Flask Python का उपयोग करके वेब फ्रेमवर्क की बुनियादी विशेषताएं प्रदान करता है और वेब पेज बनाने के लिए एक टेम्पलेटिंग इंजन का उपयोग करता है। Flask के साथ निर्माण का अभ्यास करने के लिए इस Learn module को देखें।

Pickle क्या है? Pickle 🥒 एक Python मॉड्यूल है जो Python ऑब्जेक्ट संरचना को सीरियलाइज़ और डी-सीरियलाइज़ करता है। जब आप किसी मॉडल को 'पिकल' करते हैं, तो आप उसकी संरचना को वेब पर उपयोग के लिए सीरियलाइज़ या फ्लैटन करते हैं। सावधान रहें: पिकल स्वाभाविक रूप से सुरक्षित नहीं है, इसलिए यदि किसी फ़ाइल को 'अन-पिकल' करने के लिए कहा जाए तो सावधान रहें। एक पिकल्ड फ़ाइल का उपसर्ग .pkl होता है।

अभ्यास - अपने डेटा को साफ करें

इस पाठ में आप 80,000 UFO देखे जाने की घटनाओं के डेटा का उपयोग करेंगे, जिसे NUFORC (The National UFO Reporting Center) द्वारा एकत्र किया गया है। इस डेटा में UFO देखे जाने की कुछ दिलचस्प विवरण हैं, जैसे:

  • लंबा विवरण उदाहरण। "एक आदमी रात में एक घास के मैदान पर चमकने वाली रोशनी की किरण से बाहर निकलता है और वह टेक्सास इंस्ट्रूमेंट्स पार्किंग लॉट की ओर दौड़ता है।"
  • छोटा विवरण उदाहरण। "लाइट्स ने हमारा पीछा किया।"

ufos.csv स्प्रेडशीट में city, state और country जहां घटना हुई, ऑब्जेक्ट का shape और उसका latitude और longitude जैसे कॉलम शामिल हैं।

इस पाठ में शामिल खाली notebook में:

  1. पिछले पाठों में आपने जैसे pandas, matplotlib, और numpy को इम्पोर्ट किया था, वैसे ही करें और ufos स्प्रेडशीट को इम्पोर्ट करें। आप डेटा सेट का नमूना देख सकते हैं:

    import pandas as pd
    import numpy as np
    
    ufos = pd.read_csv('./data/ufos.csv')
    ufos.head()
    
  2. ufos डेटा को नए शीर्षकों के साथ एक छोटे डेटा फ्रेम में बदलें। Country फ़ील्ड में अद्वितीय मानों की जांच करें।

    ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
    
    ufos.Country.unique()
    
  3. अब, आप उन डेटा को कम कर सकते हैं जिनसे हमें निपटना है, किसी भी null मानों को हटाकर और केवल 1-60 सेकंड के बीच की घटनाओं को इम्पोर्ट करके:

    ufos.dropna(inplace=True)
    
    ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
    
    ufos.info()
    
  4. Scikit-learn की LabelEncoder लाइब्रेरी को इम्पोर्ट करें ताकि देशों के टेक्स्ट मानों को एक संख्या में बदल सकें:

    LabelEncoder डेटा को वर्णानुक्रम में एन्कोड करता है

    from sklearn.preprocessing import LabelEncoder
    
    ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
    
    ufos.head()
    

    आपका डेटा ऐसा दिखना चाहिए:

    	Seconds	Country	Latitude	Longitude
    2	20.0	3		53.200000	-2.916667
    3	20.0	4		28.978333	-96.645833
    14	30.0	4		35.823889	-80.253611
    23	60.0	4		45.582778	-122.352222
    24	3.0		3		51.783333	-0.783333
    

अभ्यास - अपना मॉडल बनाएं

अब आप डेटा को प्रशिक्षण और परीक्षण समूह में विभाजित करके मॉडल को प्रशिक्षित करने के लिए तैयार हो सकते हैं।

  1. तीन फीचर्स चुनें जिन पर आप प्रशिक्षण देना चाहते हैं, जो आपका X वेक्टर होगा, और y वेक्टर Country होगा। आप Seconds, Latitude और Longitude को इनपुट करना चाहते हैं और एक देश का आईडी प्राप्त करना चाहते हैं।

    from sklearn.model_selection import train_test_split
    
    Selected_features = ['Seconds','Latitude','Longitude']
    
    X = ufos[Selected_features]
    y = ufos['Country']
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
    
  2. अपने मॉडल को लॉजिस्टिक रिग्रेशन का उपयोग करके प्रशिक्षित करें:

    from sklearn.metrics import accuracy_score, classification_report
    from sklearn.linear_model import LogisticRegression
    model = LogisticRegression()
    model.fit(X_train, y_train)
    predictions = model.predict(X_test)
    
    print(classification_report(y_test, predictions))
    print('Predicted labels: ', predictions)
    print('Accuracy: ', accuracy_score(y_test, predictions))
    

सटीकता बुरी नहीं है (लगभग 95%), जो आश्चर्यजनक नहीं है, क्योंकि Country और Latitude/Longitude सहसंबद्ध हैं।

आपका बनाया गया मॉडल बहुत क्रांतिकारी नहीं है क्योंकि आप Latitude और Longitude से देश का अनुमान लगा सकते हैं, लेकिन यह कच्चे डेटा से प्रशिक्षण देने, उसे साफ करने, एक्सपोर्ट करने और फिर इस मॉडल का वेब ऐप में उपयोग करने का एक अच्छा अभ्यास है।

अभ्यास - अपने मॉडल को 'पिकल' करें

अब, समय है अपने मॉडल को पिकल करने का! आप इसे कुछ लाइनों के कोड में कर सकते हैं। एक बार जब यह पिकल हो जाए, तो अपने पिकल्ड मॉडल को लोड करें और इसे सेकंड, अक्षांश और देशांतर के मानों वाले नमूना डेटा ऐरे के खिलाफ परीक्षण करें।

import pickle
model_filename = 'ufo-model.pkl'
pickle.dump(model, open(model_filename,'wb'))

model = pickle.load(open('ufo-model.pkl','rb'))
print(model.predict([[50,44,-12]]))

मॉडल '3' लौटाता है, जो UK का देश कोड है। अद्भुत! 👽

अभ्यास - Flask ऐप बनाएं

अब आप एक Flask ऐप बना सकते हैं जो आपके मॉडल को कॉल करता है और समान परिणाम लौटाता है, लेकिन अधिक आकर्षक तरीके से।

  1. web-app नामक एक फ़ोल्डर बनाएं, जो notebook.ipynb फ़ाइल के बगल में हो, जहां आपका ufo-model.pkl फ़ाइल स्थित है।

  2. उस फ़ोल्डर में तीन और फ़ोल्डर बनाएं: static, जिसमें css नामक एक फ़ोल्डर हो, और templates। अब आपके पास निम्नलिखित फ़ाइलें और डायरेक्टरी होनी चाहिए:

    web-app/
      static/
        css/
      templates/
    notebook.ipynb
    ufo-model.pkl
    

    समाधान फ़ोल्डर को अंतिम ऐप का दृश्य देखने के लिए देखें

  3. web-app फ़ोल्डर में बनाने वाली पहली फ़ाइल requirements.txt है। JavaScript ऐप में package.json की तरह, यह फ़ाइल ऐप द्वारा आवश्यक डिपेंडेंसी को सूचीबद्ध करती है। requirements.txt में निम्नलिखित पंक्तियां जोड़ें:

    scikit-learn
    pandas
    numpy
    flask
    
  4. अब, इस फ़ाइल को web-app में नेविगेट करके चलाएं:

    cd web-app
    
  5. अपने टर्मिनल में pip install टाइप करें, ताकि requirements.txt में सूचीबद्ध लाइब्रेरीज़ को इंस्टॉल किया जा सके:

    pip install -r requirements.txt
    
  6. अब, आप ऐप को पूरा करने के लिए तीन और फ़ाइलें बनाने के लिए तैयार हैं:

    1. app.py को रूट में बनाएं।
    2. index.html को templates डायरेक्टरी में बनाएं।
    3. styles.css को static/css डायरेक्टरी में बनाएं।
  7. styles.css फ़ाइल को कुछ स्टाइल्स के साथ बनाएं:

    body {
    	width: 100%;
    	height: 100%;
    	font-family: 'Helvetica';
    	background: black;
    	color: #fff;
    	text-align: center;
    	letter-spacing: 1.4px;
    	font-size: 30px;
    }
    
    input {
    	min-width: 150px;
    }
    
    .grid {
    	width: 300px;
    	border: 1px solid #2d2d2d;
    	display: grid;
    	justify-content: center;
    	margin: 20px auto;
    }
    
    .box {
    	color: #fff;
    	background: #2d2d2d;
    	padding: 12px;
    	display: inline-block;
    }
    
  8. अगला, index.html फ़ाइल बनाएं:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>🛸 UFO Appearance Prediction! 👽</title>
        <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
      </head>
    
      <body>
        <div class="grid">
    
          <div class="box">
    
            <p>According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?</p>
    
            <form action="{{ url_for('predict')}}" method="post">
              <input type="number" name="seconds" placeholder="Seconds" required="required" min="0" max="60" />
              <input type="text" name="latitude" placeholder="Latitude" required="required" />
              <input type="text" name="longitude" placeholder="Longitude" required="required" />
              <button type="submit" class="btn">Predict country where the UFO is seen</button>
            </form>
    
            <p>{{ prediction_text }}</p>
    
          </div>
    
        </div>
    
      </body>
    </html>
    

    इस फ़ाइल में टेम्पलेटिंग को देखें। ध्यान दें कि ऐप द्वारा प्रदान किए जाने वाले वेरिएबल्स के चारों ओर 'मस्टाच' सिंटैक्स है, जैसे कि प्रेडिक्शन टेक्स्ट: {{}}। इसमें /predict रूट पर पोस्ट करने वाला एक फॉर्म भी है।

    अंत में, आप उस Python फ़ाइल को बनाने के लिए तैयार हैं जो मॉडल की खपत और प्रेडिक्शन के प्रदर्शन को संचालित करती है:

  9. app.py में जोड़ें:

    import numpy as np
    from flask import Flask, request, render_template
    import pickle
    
    app = Flask(__name__)
    
    model = pickle.load(open("./ufo-model.pkl", "rb"))
    
    
    @app.route("/")
    def home():
        return render_template("index.html")
    
    
    @app.route("/predict", methods=["POST"])
    def predict():
    
        int_features = [int(x) for x in request.form.values()]
        final_features = [np.array(int_features)]
        prediction = model.predict(final_features)
    
        output = prediction[0]
    
        countries = ["Australia", "Canada", "Germany", "UK", "US"]
    
        return render_template(
            "index.html", prediction_text="Likely country: {}".format(countries[output])
        )
    
    
    if __name__ == "__main__":
        app.run(debug=True)
    

    💡 टिप: जब आप Flask का उपयोग करके वेब ऐप चलाते समय debug=True जोड़ते हैं, तो आपके एप्लिकेशन में किए गए किसी भी बदलाव तुरंत प्रतिबिंबित होंगे, बिना सर्वर को पुनः आरंभ किए। सावधान रहें! इस मोड को प्रोडक्शन ऐप में सक्षम न करें।

यदि आप python app.py या python3 app.py चलाते हैं - आपका वेब सर्वर स्थानीय रूप से शुरू हो जाता है, और आप एक छोटा फॉर्म भर सकते हैं ताकि आपको UFO देखे जाने की घटनाओं के बारे में अपने सवाल का जवाब मिल सके!

ऐसा करने से पहले, app.py के भागों पर एक नज़र डालें:

  1. सबसे पहले, डिपेंडेंसी लोड होती हैं और ऐप शुरू होता है।
  2. फिर, मॉडल इम्पोर्ट होता है।
  3. फिर, होम रूट पर index.html रेंडर होता है।

/predict रूट पर, जब फॉर्म पोस्ट किया जाता है, तो कई चीजें होती हैं:

  1. फॉर्म वेरिएबल्स को इकट्ठा किया जाता है और numpy ऐरे में कनवर्ट किया जाता है। फिर उन्हें मॉडल में भेजा जाता है और एक प्रेडिक्शन लौटाया जाता है।
  2. जिन देशों को हम प्रदर्शित करना चाहते हैं, उन्हें उनके प्रेडिक्टेड देश कोड से पठनीय टेक्स्ट के रूप में पुनः रेंडर किया जाता है, और वह मान index.html में टेम्पलेट में रेंडर करने के लिए वापस भेजा जाता है।

इस तरह Flask और पिकल्ड मॉडल के साथ मॉडल का उपयोग करना अपेक्षाकृत सरल है। सबसे कठिन बात यह समझना है कि मॉडल को प्रेडिक्शन प्राप्त करने के लिए किस प्रकार का डेटा भेजा जाना चाहिए। यह पूरी तरह से इस बात पर निर्भर करता है कि मॉडल को कैसे प्रशिक्षित किया गया था। इस मॉडल में प्रेडिक्शन प्राप्त करने के लिए तीन डेटा पॉइंट्स को इनपुट करना होता है।

एक पेशेवर सेटिंग में, आप देख सकते हैं कि मॉडल को प्रशिक्षित करने वाले लोगों और इसे वेब या मोबाइल ऐप में उपयोग करने वाले लोगों के बीच अच्छा संचार कितना आवश्यक है। हमारे मामले में, यह केवल एक व्यक्ति है, आप!


🚀 चुनौती

नोटबुक में काम करने और मॉडल को Flask ऐप में इम्पोर्ट करने के बजाय, आप मॉडल को Flask ऐप के भीतर ही प्रशिक्षित कर सकते हैं! अपने Python कोड को नोटबुक में कनवर्ट करने का प्रयास करें, शायद आपके डेटा को साफ करने के बाद, ताकि ऐप के भीतर train नामक रूट पर मॉडल को प्रशिक्षित किया जा सके। इस विधि को अपनाने के फायदे और नुकसान क्या हैं?

पोस्ट-लेक्चर क्विज़

समीक्षा और स्व-अध्ययन

ML मॉडल को उपयोग करने के लिए वेब ऐप बनाने के कई तरीके हैं। उन तरीकों की सूची बनाएं जिनसे आप JavaScript या Python का उपयोग करके वेब ऐप बना सकते हैं। आर्किटेक्चर पर विचार करें: क्या मॉडल ऐप में रहना चाहिए या क्लाउड में? यदि बाद वाला, तो आप इसे कैसे एक्सेस करेंगे? एक लागू ML वेब समाधान के लिए एक आर्किटेक्चरल मॉडल बनाएं।

असाइनमेंट

एक अलग मॉडल आज़माएं


अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।