16 KiB
MÖ Modeli istifadə etmək üçün veb tətbiq yaradaq
Bu dərsdə MÖ modelini dünyamızdan tamamilə kənar data toplusu ilə məşq etdirəcəyik: Ötən əsrdə UFO müşahidələri, nümunəsi NUFORC verilənlər bazasından mənbə götürmüşdür.
Nələr öyrənəcəksiniz:
- Təlim edilmiş modeli necə pikl etmək ("turşuya qoymaq") (uzunmüddətli istifadə üçün) olar.
- Bu modeli Flask proqramında necə istifadə etmək olar
Məlumatları təmizləmək və modelimizi öyrətmək üçün noutbuklardan istifadəni davam etdirəcəyik. Prosesi bir addım irəli aparıb modeli “yabanı mühitdə” istifadə etməklə təcrübə apara bilərsiniz: Veb tətbiq daxilində bunu etmək üçün Flask istifadə edərək veb proqram qurmalısınız.
Mühazirədən əvvəl test
Proqram yaratmaq
Maşın öyrənmə modellərini emal etmək üçün veb tətbiq yaratmağın bir neçə üsulu var. Veb arxitekturası modelin öyrədilməsinə birbaşa təsir göstərə bilər. Fərz edin ki, data ilə bağlı elmi qrupda proqram daxilində istifadə etməyinizi istədikləri modeli öyrədiblər.
Mülahizələr
Soruşmalı olduğunuz çoxlu suallar var:
- Bu veb yoxsa mobil tətbiqdir? Əgər mobil tətbiq yaradırsınızsa və tətbiqi Əİ konteksində istifadə edəcəksinizsə, modeli Android və ya iOS tətbiqdə istifadə edə edərək TensorFlow Lite işlədə bilərsiniz.
- Model harada yerləşəcək? Bulud yoxsa lokal yaddaşda?
- Oflayn dəstək. Tətbiq oflayn da işləməlidirmi?
- Modeli öyrətmək üçün hansı texnologiya istifadə edilmişdir? Seçilmiş texnologiya istifadə etməli olduğunuz alətlərə təsir göstərə bilər.
- TensorFlow. Məsələn, modeli TensorFlow istifadə edərək öyrədirsinizsə, ekosistem TensorFlow modelini veb proqramında istifadə etmək üçün çevirmək/dəyişdirmək imkanı verir. TensorFlow.js.
- PyTorch. Əgər modeli PyTorch ilə öyrədirsinizsə, onu ONNX istifadə edərək JavaScript veb tətbiqində Onnx Runtime işlədə bilən xüsusi (Open Neural Network Exchange) formata eksport edə bilərsiniz. Bu seçim növbəti dərsdə Scikit tərəfindən öyrənilən model üçün araşdırılacaq.
- Lobe.ai və ya Azure Custom Vision Əgər modeli MÖ SaaS (Xidmət kimi Program) sistemi kimi Lobe.ai və ya Azure Custom Vision istifadə edərək öyrədirsinizsə, bu tip proqram təminatı bir çox platformalar üçün onu eksport etmək imkanı, həmçinin onlayn tətbiq tərəfindən buludda sorğulanan növbəli API yaradılmasını təmin edir.
Bütöv bir Flask veb tətbiqi yaradaraq veb brauzerdə modeli öyrətmək imkanınız var. Bunu həm də, JavaScript konteksində TensorFlow.js istifadə edərək də edə bilərsiniz.
Məqsədə uyğun olaraq, Python əsaslı noutbuklarla işlədiyimizə görə öyrədilmiş modeli Python-da qurulmuş veb tətbiqi ilə oxuna bilən formatda daxil etmək üçün atmalı olduğunuz addımları araşdıraq.
Alət
Bu tapşırığı yerinə yetirmək üçün iki alətə ehtiyacınız var: Python-da işləyən Flask və Pickle.
✅ Flask nədir? Yaradıcıları tərəfindən 'mikro-çərçivə' kimi adlandırılan Flask, Python istifadə edərək veb çərçivələrin əsas xüsusiyyətlərini və veb səhifələr yaratmaq üçün şablon mexanizmini təmin edir. Flask yaratmaq üçün bu öyrənmə moduluna nəzər yetirin.
✅ Pickle nədir? Pickle 🥒, Python obyekt strukturunu seriallaşdıran və deseriallaşdıran bir Python moduludur. Modeli 'pickle' etdiyiniz zaman, onun strukturunu veb üçün seriallaşdırır və dəqiqləşdirirsiniz. Diqqət edin ki pickle mahiyətcə təhlükəsiz deyil. Bu səbəbdən faylı 'un-pickle' etməyə çağrıldıqda diqqətli olmaq lazımdır. 'pickle' edilmiş fayl .pkl uzantısına sahib olur.
Məşğələ - datanı təmizlə
Bu dərsdə NUFORC (Milli UFO Melumatlar Mərkəzi) tərəfindən toplanmış 80,000 UFO görülməsi məlumatlarından istifadə edəcəksiniz. Bu məlumatlar UFO görmələrin maraqlı təsvirlərini əhatə edir, məsələn:
- Əhatəli nümunə. "Bir adam gecə otlu bir tarlada parlayan işıq şüasından çıxır və Texas Instruments dayanacağına tərəf qaçır".
- Qısa nümunə. "İşıq bizi təqib edir".
ufos.csv cədvəli görülmənin baş verdiyi şəhər, ştat and ölkə, obyektin forması, coğrafi enlik və çoğrafi uzunluq sütunlarına bölün.
Bu dərsə daxil olan boş qeyd dəftəri verilmişdir.
-
pandas,matplotlib, vənumpykitabxanalarını və ufolar cədvəlini keçən dərs olduğu kimi daxil edin. Sadə verilənlər toplusuna nəzər yetirin:import pandas as pd import numpy as np ufos = pd.read_csv('./data/ufos.csv') ufos.head() -
UFO məlumatlarını yeni başlıqlarla kiçik dataframə çevirin.
Ölkəsütununda unikal dəyərləri yoxlayın.ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) ufos.Country.unique() -
İndi isə, prosesi işlənməli olan datada lazımsız null dəyərləri silməklə və ancaq 1-60 saniyə arası görülmələri daxil etməklə qısalda bilərik:
ufos.dropna(inplace=True) ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] ufos.info() -
Scikit- öyrənilməsi
LabelEncoderkitabxanası ölkələr üçün növbəti dəyərləri rəqəmlərə keçirtmək üçündür:✅ LabelEncoder datanı əlifba sırası ilə kodlaşdırır.
from sklearn.preprocessing import LabelEncoder ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) ufos.head()Datanız belə görünməlidir:
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
Məşğələ - modelini yarat
Artıq modeli öyrətmək üçün məlumatları tədris və sınaq qruplarına bölməyə başlaya bilərsiniz.
-
X vektorunda öyrətmək istədiyiniz 3 xüsusiyyəti seçin, və Y vektoru
Ölkəolacaq.Saniyələr,Coğrafi enlik,Coğrafi uzunluqdaxil edə bilməli və ölkə id-i geri qaytara bilməlisiniz.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) -
Məntiqi reqrasiya testi istifadə etməklə modelinizi öyrədin:
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))
Dəqiqlik o qədər də pis deyil (təxminən 95%). Təəcüblü deyil ki Ölkə və Coğrafi enlik, Coğrafi uzunluq məlumatları əlaqəlidir.
Yaratdığımız model o qədər də inqilabi deyil, çünki Ölkəni Coğrafi enlik və Coğrafi uzunluqdan çıxara bilməliyik. Bununla belə, təmizlədiyiniz, daxil etdiyiniz, daha sonra ilkin məlumatlardan öyrətməyə çalışdığımız məlumat datanı məşq etdirmək üçün faydalıdır. Bu modeli veb proqramında istifadə edək.
Məşğələ - modelini 'pikl' edək
İndi, modelinizi pikl etməyin vaxtıdır! Bunu bir neçə kod sətiri ilə edə bilərsiniz. Pikl(turşu) halına gələndən sonra, pikl modelinizi yükləyin və onu saniyə, coğrafi enlik və coğrafi uzunluq dəyərlərini ehtiva edən məlumat massivi ilə sınaqdan keçirin.
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]]))
Model '3' qaytarır, Hansıki Birləşmiş Krallığın kodudur. İnanılmaz! 👽
Məşğələ - Flask tətbiq yarat
İndi isə modeli çağırmaq və oxşar nəticələri qaytarmaq üçün Flask proqramı yarada bilərsiniz, lakin vizual olaraq daha xoşagəlimli olmalıdır.
-
web-app adlanan bir qovluq yaratmaqla başlayın. Qovluq notebook.ipynb faylının yanında ufo-model.pkl faylınızın yerləşdiyi yerdə olmalıdır.
-
Həmin qovluqda daha üç qovluq yaradın: daxilində css olan static qovluğu və templates. İndi aşağıdakı formada fayl və istiqamətlər olmalıdır:
web-app/ static/ css/ templates/ notebook.ipynb ufo-model.pkl✅ Yekunlaşmış tətbiq üçün mənbə faylına nəzər yetirin.
-
web-app qovluğunda yaratmalı olduğunuz ilk fayl requirements.txt faylıdır. JavaScript tətbiqində package.json faylı kimi, tətbiq tərəfindən tələb olunan faylları sıralayır. requirements.txt faylında aşağıdakı sətirləri əlavə edin:
scikit-learn pandas numpy flask -
İndi isə, web-app faylına keçməklə tətbiqi işə salın:
cd web-app -
Terminalınızda requirements.txt faylında qeyd olunmuş kitabxanaları yükləmək üçün
pip installyazın:pip install -r requirements.txt -
Artıq daha üç fayl yaradaraq tətbiqi hazırlamağı yekunlaşdıra bilərik:
- app.py faylını əsas qovluqda yaradın.
- index.html faylını templates kataloqunda yaradın.
- styles.css faylını static/css kataloqunda yaradın.
-
styles.css faylını aşağıdakı bir neçə dizayn skriptləri ilə yaradın:
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; } -
Daha sonra, index.html faylını yaradın:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>🛸 UFO görülməsini öncədən müəyyən etmək! 👽</title> <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> </head> <body> <div class="grid"> <div class="box"> <p>Saniyə dəyəri, coğrafi enlik və corafi uzunluğa görə, hansı ölkə UFO gördüyünü bildirmişdir?</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>Bu faylda şablonlaşdırmaya diqqət yetirin. Tətbiq tərəfindən dəyişənlər ətrafında 'saqqal' sintaksisini görəcəksiniz, məsələn öngörmə mətni kimi:
{{}}. Həmçinin, öngörməni/predictistiqamətinə göndərən xüsusi form da var.Yekunda, modelin emalı və proqnozların göstərilməsini təmin edən python faylını yaratmağa hazırsınız:
-
app.pyfaylında aşağıdakıları əlavə edin: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)💡 Ipucu: Flask istifadə edərək veb tətbiqi işə salanda
debug=Trueəlavə edərkən, proqramınıza etdiyiniz istənilən dəyişiklik ani olaraq tətbiq olunacaq. Serveri yenidən başlatmağa ehtiyac olmayacaq. Ehtiyyatlı olun! Bu formatı real istehsalatda aktiv etmək doğru olmaz.
Əgər python app.py və ya python3 app.py işlədirsinizsə - veb-serveriniz daxili serverdə (lokalda) işə başlayır və bu zaman UFO-ların harada göründüyü barədə sualınıza cavab almaq üçün qısa formanı doldura bilərsiniz!
Bunu etmədən öncə, app.py faylına nəzər yetirək:
- Əvvəlcə, lazimi resurslar yüklənir və proqram başlayır.
- Sonra, model daxil edilir.
- Daha sonra, index.html lokal dövrədə göstərilir.
/predict istiqamətində, form yerləşdirilərkən, birdən çox proses baş verir:
- Forma dəyişənləri toplanır və numpy massivinə çevrilir. Daha sonra modelə göndərilir və proqnoz geri qaytarılır.
- Göstərilməsini istədiyimiz ölkələr onların proqnozlaşdırılan ölkə kodundan istifadə etməklə oxunaqlı mətn kimi yenidən göstərilir və həmin dəyər şablonda göstərilmək üçün index.html-ə geri göndərilir.
Flask və pikl(turşu) model ilə bu şəkildə bir model istifadə etmək nisbətən sadədir. Ən çətini, proqnoz almaq üçün modelə göndərilməli olan məlumatların hansı formada olduğunu başa düşməkdir. Bütün bunlar modelin necə öyrədildiyindən asılıdır. Proqnoz əldə etmək üçün daxil edilməli üç məlumat nöqtəsi var.
Peşəkar şəraitdə modeli öyrədən insanlarla onu veb və ya mobil proqramda istifadə edənlər arasında yaxşı ünsiyyətin nə qədər zəruri olduğunu görmək olar. Bizim şərtlər daxilində bu yalnız bir nəfərdir, siz!
🚀 Rubrika
Noutbukda işləyərək modeli Flask proqramına daxil etmək yerinə, onu birbaşa Flask proqramında öyrədə bilərsiniz! Modeli qatar adlı istiqamət üzrə proqram daxilində öyrətmək üçün, məsələn, məlumatlarınız təmizləndikdən sonra, Python kodunuzu notebookda çevirməyə cəhd edin. Bu metodu tətbiq etməyin müsbət və mənfi tərəfləri nələrdir?
Mühazirə sonrası test
Təkrarla və Özün öyrən
MÖ modellərini dərk etmək üçün veb tətbiq yaratmağın bir çox üsulu var. Maşın öyrənməsində istifadə etmək üçün veb tətbiqi yaratmağa JavaScript və ya Python-dan istifadə edə biləcəyiniz üsulların siyahısını hazırlayın. Arxitekturaya nəzər salın: model proqramda qalmalıdır, yoxsa buludda? Ən son versiyaya necə daxil olardınız? Tətbiq olunan MÖ veb həlli üçün arxitektura modelini çəkin.