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/mr/3-Web-App/1-Web-App/README.md

29 KiB

वेब अ‍ॅप तयार करा ज्यामध्ये ML मॉडेल वापरता येईल

या धड्यात, तुम्ही एका अनोख्या डेटासेटवर ML मॉडेल ट्रेन कराल: गेल्या शतकातील UFO दिसण्याच्या घटना, ज्याचे स्रोत NUFORC च्या डेटाबेसमधून घेतले आहे.

तुम्ही शिकाल:

  • प्रशिक्षित मॉडेल 'pickle' कसे करायचे
  • 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) प्रणालीचा वापर करून मॉडेल ट्रेन करत असाल, तर हे सॉफ्टवेअर अनेक प्लॅटफॉर्मसाठी मॉडेल निर्यात करण्याचे मार्ग प्रदान करते, ज्यामध्ये क्लाउडमध्ये तुमच्या ऑनलाइन अ‍ॅपद्वारे क्वेरी करण्यासाठी एक API तयार करणे समाविष्ट आहे.

तुम्हाला संपूर्ण Flask वेब अ‍ॅप तयार करण्याची संधी देखील आहे जे वेब ब्राउझरमध्ये स्वतःच मॉडेल ट्रेन करू शकेल. हे TensorFlow.js वापरून JavaScript संदर्भात देखील करता येते.

आमच्या उद्देशासाठी, कारण आम्ही Python-आधारित नोटबुक्ससह काम करत आहोत, चला अशा नोटबुकमधून Python-निर्मित वेब अ‍ॅपद्वारे वाचण्यायोग्य स्वरूपात प्रशिक्षित मॉडेल निर्यात करण्यासाठी आवश्यक पायऱ्या शोधूया.

टूल

या कार्यासाठी तुम्हाला दोन टूल्सची आवश्यकता आहे: Flask आणि Pickle, जे दोन्ही Python वर चालतात.

Flask म्हणजे काय? त्याच्या निर्मात्यांनी 'मायक्रो-फ्रेमवर्क' म्हणून परिभाषित केलेले, Flask Python वापरून वेब फ्रेमवर्कची मूलभूत वैशिष्ट्ये आणि वेब पृष्ठे तयार करण्यासाठी टेम्पलेटिंग इंजिन प्रदान करते. Flask वापरून तयार करण्याचा सराव करण्यासाठी हा Learn मॉड्यूल पहा.

Pickle म्हणजे काय? Pickle 🥒 हा एक Python मॉड्यूल आहे जो Python ऑब्जेक्ट स्ट्रक्चरचे सिरियलायझेशन आणि डी-सिरियलायझेशन करतो. जेव्हा तुम्ही मॉडेल 'pickle' करता, तेव्हा तुम्ही त्याचे स्ट्रक्चर वेबवर वापरण्यासाठी सिरियलायझ किंवा फ्लॅटन करता. काळजी घ्या: pickle स्वाभाविकपणे सुरक्षित नाही, त्यामुळे जर एखाद्या फाइलला 'un-pickle' करण्यास सांगितले गेले तर काळजी घ्या. Pickled फाइलला .pkl हा प्रत्यय असतो.

व्यायाम - तुमचा डेटा साफ करा

या धड्यात तुम्ही NUFORC (The National UFO Reporting Center) कडून गोळा केलेल्या 80,000 UFO दिसण्याच्या घटनांचा डेटा वापराल. या डेटामध्ये 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. Logistic Regression वापरून तुमचे मॉडेल ट्रेन करा:

    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 वरून Country अंदाज करू शकता, पण कच्च्या डेटावरून ट्रेनिंग करण्याचा, डेटा साफ करण्याचा, निर्यात करण्याचा आणि नंतर वेब अ‍ॅपमध्ये मॉडेल वापरण्याचा सराव करण्यासाठी हे एक चांगले व्यायाम आहे.

व्यायाम - तुमचे मॉडेल 'pickle' करा

आता, तुमचे मॉडेल pickle करण्याची वेळ आली आहे! तुम्ही ते काही ओळींच्या कोडमध्ये करू शकता. एकदा ते pickled झाले की, तुमचे pickled मॉडेल लोड करा आणि सेकंद, 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. notebook.ipynb फाइलच्या शेजारी web-app नावाचा फोल्डर तयार करा जिथे तुमची 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. templates डिरेक्टरीमध्ये index.html तयार करा.
    3. static/css डिरेक्टरीमध्ये styles.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>
    

    या फाइलमधील टेम्पलेटिंग पहा. लक्ष द्या की अ‍ॅपद्वारे प्रदान केलेल्या व्हेरिएबल्सभोवती 'mustache' सिंटॅक्स आहे, जसे की प्रेडिक्शन टेक्स्ट: {{}}. येथे एक फॉर्म आहे जो /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 आणि pickled मॉडेलसह मॉडेल वापरणे तुलनेने सोपे आहे. सर्वात कठीण गोष्ट म्हणजे मॉडेलला प्रेडिक्शन मिळवण्यासाठी पाठवले जाणारे डेटा कोणत्या स्वरूपात आहे हे समजून घेणे. ते सर्व मॉडेल कसे ट्रेन केले गेले यावर अवलंबून असते. या मॉडेलमध्ये प्रेडिक्शन मिळवण्यासाठी तीन डेटा पॉइंट्स इनपुट करणे आवश्यक आहे.

व्यावसायिक सेटिंगमध्ये, तुम्ही पाहू शकता की मॉडेल ट्रेन करणाऱ्या लोकांमध्ये आणि वेब किंवा मोबाइल अ‍ॅपमध्ये ते वापरणाऱ्या लोकांमध्ये चांगला संवाद किती आवश्यक आहे. आमच्या बाबतीत, तो फक्त एक व्यक्ती आहे, तुम्ही!


🚀 आव्हान

नोटबुकमध्ये काम करण्याऐवजी आणि Flask अ‍ॅपमध्ये मॉडेल आयात करण्याऐवजी, तुम्ही Flask अ‍ॅपमध्येच मॉडेल ट्रेन करू शकता! तुमच्या Python कोडला नोटबुकमध्ये रूपांतरित करण्याचा प्रयत्न करा, कदाचित तुमचा डेटा साफ केल्यानंतर, अ‍ॅपमध्येच train नावाच्या रूटवर मॉडेल ट्रेन करण्यासाठी. या पद्धतीचा अवलंब करण्याचे फायदे आणि तोटे काय आहेत?

व्याख्यानानंतरची प्रश्नमंजूषा

पुनरावलोकन आणि स्व-अभ्यास

ML मॉडेल्स वापरण्यासाठी वेब अ‍ॅप तयार करण्याचे अनेक मार्ग आहेत. JavaScript किंवा Python वापरून मशीन लर्निंगचा लाभ घेण्यासाठी वेब अ‍ॅप तयार करण्याचे मार्गांची यादी तयार करा. आर्किटेक्चर विचार करा: मॉडेल अ‍ॅपमध्ये राहावे की क्लाउडमध्ये? जर क्लाउडमध्ये असेल, तर तुम्ही त्याचा कसा उपयोग कराल? लागू ML वेब सोल्यूशनसाठी आर्किटेक्चरल मॉडेल काढा.

असाइनमेंट

वेगळे मॉडेल वापरून पहा


अस्वीकरण:
हा दस्तऐवज AI भाषांतर सेवा Co-op Translator चा वापर करून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण होणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.