[](https://youtu.be/4NGM0U2ZSHU "Yeni başlayanlar üçün ML- Maşın öyrənmə texnikaları")
@ -109,7 +109,7 @@ Bu dərslərdə siz data mühəndisinin istifadə etdiyi jestlərin hamısını
ML təcrübəçisinin addımlarını əks etdirən proses sxemini çəkin. Hazırda prosesin gedişində özünüzü harada görürsünüz? Harada çətinlik çəkəcəyinizi proqnozlaşdırırsınız? Sizə asan görünən nədir?
@ -332,7 +332,7 @@ Peşəkar şəraitdə modeli öyrədən insanlarla onu veb və ya mobil proqramd
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 `train` 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 notbukda çevirməyə cəhd edin. Bu metodu tətbiq etməyin müsbət və mənfi tərəfləri nələrdir?
Bu dərsdə əvvəlki dərslərdə öyrəndiyimiz bəzi üsullar və bu bölmədə istifadə olunan ləzzətli mətbəx data seti ilə təsnifat modeli quracağıq. Bundan əlavə, Onnx-in veb runtime versiyasından istifadə edərək yadda saxlanmış modeli tətbiq etmək üçün kiçik veb tətbiqi yaratmalıyıq.
Bu dərsdə əvvəlki dərslərdə öyrəndiyimiz bəzi üsullar və bu bölmədə istifadə olunan ləzzətli mətbəx data seti ilə qruplaşdırıcı modeli quracağıq. Bundan əlavə, Onnx-in veb runtime versiyasından istifadə edərək yadda saxlanmış modeli tətbiq etmək üçün kiçik veb tətbiqi yaratmalıyıq.
Maşın Öyrənməsinin ən faydalı praktik istifadələrindən biri tövsiyə sistemlərinin qurulmasıdır və biz bu istiqamətdə ilk addımı atacağıq!
Maşın öyrənməsinin ən faydalı praktik istifadələrindən biri tövsiyə sistemlərinin qurulmasıdır və biz bu istiqamətdə ilk addımı atacağıq!
Tətbiq olunan MÖ sistemlərinin yaradılması biznes sistemləri üçün bu texnologiyalardan istifadə etməyin vacib hissəsidir. Onnx-dən istifadə etməklə veb proqramlar daxilində modellərdən istifadə etmək olar (ehtiyac olduqda onları oflayn kontekstdə istifadə etmək lazımdır).
Tətbiq olunan ML sistemlərinin yaradılması biznes sistemləri üçün bu texnologiyalardan istifadə etməyin vacib hissəsidir. Onnx-dən istifadə etməklə veb proqramlar daxilində modellərdən istifadə etmək olar (ehtiyac olduqda onları oflayn mühitdə istifadə etmək lazımdır).
[Əvvəlki dərsdə](../../../3-Web-App/1-Web-App/README.md), UFO ilə bağlı reqresiya modelini yaradıb, "pickle" edib, və Flask tətbiqi daxilində istifadə etmişdik. Bu arxitekturanı bilmək çox faydalı olsa da, tamamilə Python proqramıdır. Lakin, sizdən Javascript tətbiqi də yazmaq tələb oluna bilər.
[Əvvəlki dərsdə](../../../3-Web-App/1-Web-App/translations/README.az.md) UFO ilə bağlı reqresiya modelini yaradıb, "pickle" edib Flask tətbiqi daxilində istifadə etmişdik. Bu arxitekturanı bilmək çox faydalı olsa da, tamamilə Python proqramıdır. Lakin, sizdən Javascript tətbiqi də yazmaq tələb oluna bilər.
Bu dərsdə nəticə almaq üçün Javascript əsasında veb tətbiq yarada bilərik. Əvvəlcə, modeli öyrətmək və Onnx ilə işləməsi üçün hazırlamaq lazımdır.
Bu dərsdə nəticə almaq üçün Javascript əsasında veb tətbiq yarada bilərik. Əvvəlcə modeli öyrətmək və Onnx ilə işləməsi üçün hazırlamaq lazımdır.
## Tapşırıq - klassifikasiya modelini öyrədin
## Tapşırıq - qruplaşdırıcı modelini öyrədin
İlk öncə, klassifikasiya modelini təmizlənmiş mətbəxlər data dəstini istifadə etməklə öyrədək
İlk öncə qruplaşdırıcı modeli təmizlənmiş mətbəxlər data dəstini istifadə etməklə öyrədək.
1. Lazımlı kitabxanaları əlavə etməklə başlayaq:
1. Lazımi kitabxanaları əlavə etməklə başlayaq:
```python
!pip install skl2onnx
import pandas as pd
```
Scikit-learn modelini Onnx formatına keçirmək üçün '[skl2onnx](https://onnx.ai/sklearn-onnx/)'-nun köməyinə ehtiyacımız var.
Scikit-learn modelini Onnx formatına keçirmək üçün '[skl2onnx](https://onnx.ai/sklearn-onnx/)' köməyinə ehtiyacımız var.
1. CSV faylını oxumaq üçün `read_csv()` istifadə etməklə əvvəlki dərsdə etdiyimiz kimi data dəsti ilə işləməliyik:
1. CSV faylını oxumaq üçün `read_csv()` istifadə etməklə əvvəlki dərsdə etdiyimiz kimi dataset ilə işləməliyik:
```python
data = pd.read_csv('../data/cleaned_cuisines.csv')
@ -56,7 +56,6 @@ Bu dərsdə nəticə almaq üçün Javascript əsasında veb tətbiq yarada bil
```python
y = data[['cuisine']]
y.head()
```
### Təlim rutininə başlayaq
@ -91,7 +90,7 @@ Biz yüksək dəqiqliyə malik "SVC" kitabxanasından istifadə edəcəyik.
y_pred = model.predict(X_test)
```
1. Modelin keyfiyyətini yoxlamaq üçün təsnifat hesabatını çap edək:
1. Modelin keyfiyyətini yoxlamaq üçün qruplaşdırıcı hesabatını çap edək:
```python
print(classification_report(y_test,y_pred))
@ -135,20 +134,20 @@ Düzgün Tensor nömrəsi ilə çevirmə etdiyimizə əmin olmalıyıq. Bu data
f.write(onx.SerializeToString())
```
> Konvertasiya skriptində [options](https://onnx.ai/sklearn-onnx/parameterized.html)-ı ötürə bilərik. Bu halda, 'nocl'-nın True və 'zipmap'-ın False olmasını təmin etdik.
Bu təsnifat modeli olduğundan, lüğətlərin siyahısını yaradan ZipMap-ı silmək seçimimiz var (vacib deyil). `nocl` modelə daxil edilmiş sinif məlumatlarına istinad edir. `nocl`-i 'True' olaraq təyin edərək modelinizin ölçüsünü azaldaq.
> Konvertasiya skriptində [options](https://onnx.ai/sklearn-onnx/parameterized.html) ötürə bilərik. Bu halda, 'nocl' True və 'zipmap' False olmasını təmin etdik.
Bu qruplaşdırıcı model olduğundan lüğətlərin siyahısını yaradan ZipMap-ı silmək seçimimiz var (vacib deyil). `nocl` modelə daxil edilmiş sinif məlumatlarına istinad edir. `nocl`-i 'True' olaraq təyin edərək modelinizin ölçüsünü azaldaq.
Bütün notebooku işə salmaqla Onnx modelini yaradaraq onu bu qovluqda yadda saxlaya biləcəyik.
Bütün notbuku işə salmaqla Onnx modelini yaradaraq onu bu qovluqda yadda saxlaya biləcəyik.
## Modelə nəzər yetirək
Onnx modelləri Visual Studio kodunda visual olaraq görünmür. Bir çox tədqiqatçı modelin düzgün qurulmasını təmin etmək üçün onu vizuallaşdırmağa istifadə etdiyi pulsuz proqramlardan istifadə edir. [Netron](https://github.com/lutzroeder/Netron) yükləyək və model.onnx faylını açaq. Sadə modelin 380 girişi və siyahıda göstərilən təsnifatı ilə vizuallaşdırıldığını görə bilərsiniz:
Onnx modelləri Visual Studio kodunda visual olaraq görünmür. Bir çox tədqiqatçı modelin düzgün qurulmasını təmin etmək üçün onu vizuallaşdırmağa istifadə olunan pulsuz proqramlardan istifadə edir. [Netron](https://github.com/lutzroeder/Netron) yükləyək və model.onnx faylını açaq. Sadə modelin 380 girişi və siyahıda göstərilən təsnifatı ilə vizuallaşdırıldığını görə bilərsiniz:


Netron modelləri vizual olaraq görmək üçün bir vasitədir.
İndi bu səliqəli modeli veb proqramında istifadə etməyə hazırıq. Gəlin, soyuducuya baxan zaman işimizə yarayacaq bir proqram yaradaq və modelə görə müəyyən edilmiş mətbəx növünü bişirmək üçün qalıq inqrediyentlərin hansı kombinasiyasından istifadə edə biləcəyinizi anlamağa çalışaq.
İndi bu səliqəli modeli veb proqramda istifadə etməyə hazırıq. Gəlin soyuducuya baxan zaman işimizə yarayacaq bir proqram yaradaq və modelə görə müəyyən edilmiş mətbəx növünü bişirmək üçün qalıq inqrediyentlərin hansı kombinasiyasından istifadə edə biləcəyinizi anlamağa çalışaq.
## Tövsiyə verən bir veb tətbiq yaradaq
@ -168,44 +167,44 @@ Modeli birbaşa veb proqramında istifadə edə bilərik. Bu arxitektura həm d
</html>
```
1. İndi isə `body` taqları ilə işləyərək, ingridientləri əks etdirən bölmələri əlavə edək:
1. İndi isə `body` teqləri ilə işləyərək ingridientləri əks etdirən bölmələri əlavə edək:
```html
<h1>Soyuducuya bax. Nə bişirə bilərsən?</h1>
<divid="wrapper">
<divclass="boxCont">
<inputtype="checkbox"value="4"class="checkbox">
<label>apple</label>
<label>alma</label>
</div>
<divclass="boxCont">
<inputtype="checkbox"value="247"class="checkbox">
<label>pear</label>
<label>armud</label>
</div>
<divclass="boxCont">
<inputtype="checkbox"value="77"class="checkbox">
<label>cherry</label>
<label>vişnə</label>
</div>
<divclass="boxCont">
<inputtype="checkbox"value="126"class="checkbox">
<label>fenugreek</label>
<label>çəmən otu</label>
</div>
<divclass="boxCont">
<inputtype="checkbox"value="302"class="checkbox">
<label>sake</label>
<label>düyü şərabı</label>
</div>
<divclass="boxCont">
<inputtype="checkbox"value="327"class="checkbox">
<label>soy sauce</label>
<label>soya sousu</label>
</div>
<divclass="boxCont">
<inputtype="checkbox"value="112"class="checkbox">
<label>cumin</label>
<label>cirə</label>
</div>
</div>
<divstyle="padding-top:10px">
@ -213,17 +212,17 @@ Modeli birbaşa veb proqramında istifadə edə bilərik. Bu arxitektura həm d
</div>
```
Qeyd edək ki, hər bir xanaya dəyər verilir. Bu, verilənlər bazasına uyğun olaraq tərkib hissəsinin tapıldığı indeksi əks etdirir. Məsələn, 'Apple' əlifba siyahısında beşinci sütundadır, ona görə də biz 0-dan saymağa başladığımız zaman verilmiş tərkib indeksinə görə onun dəyəri '4'dür. [inqrediyentlər cədvəli](../../data/ingredient_indexes.csv)-ni nəzərdən keçirməklə verilmiş tərkib hissələrini görə bilərsiniz.
Qeyd edək ki, hər bir xanaya dəyər verilir. Bu, verilənlər bazasına uyğun olaraq tərkib hissəsinin tapıldığı indeksi əks etdirir. Məsələn, 'Alma' əlifba siyahısında beşinci sütundadır, ona görə də biz 0-dan saymağa başladığımız zaman verilmiş tərkib indeksinə görə onun dəyəri '4'dür. [inqrediyentlər cədvəli](../../data/ingredient_indexes.csv)ni nəzərdən keçirməklə verilmiş tərkib hissələrini görə bilərsiniz.
index.html faylında işi davam etdirərək, `</div>` yekunlaşdırıcı bağlandıqdan sonra modelin çağrıldığı skript blokunu əlavə edin.
1. İlk öncə, [Onnx Runtime](https://www.onnxruntime.ai/)-ı əlavə edək:
1. İlk öncə, [Onnx Runtime](https://www.onnxruntime.ai/) əlavə edək:
> Onnx Runtime, Onnx modelləri optimallaşdırmaq və istifadə edə bilmək üçün API daxil olmaqla, geniş çeşidli platformalarında işləməyə imkan vermək üçün istifadə olunur.
> Onnx Runtime, Onnx modelləri optimallaşdırmaq və istifadə edə bilmək üçün API daxil olmaqla geniş çeşidli platformalarda işləməyə imkan vermək üçün istifadə olunur.
1. Runtime yerini aldıqdan sonra işə sala bilərik:
@ -280,31 +279,32 @@ Modeli birbaşa veb proqramında istifadə edə bilərik. Bu arxitektura həm d
Bu kodda eyni anda bir neçə prosses baş verir:
1. Mümkün 380 dəyərdən (1 və ya 0) ibarət massiv yaratdıq və inqrediyentin işarələnib göstərilməsindən asılı olaraq nəticə çıxarmaq üçün modelə göndəriləcək.
2. Qeyd qutuları massivi və onların proqram başlayanda çağırılan `init` funksiyasında yoxlanılıb-yoxlanılmadığını müəyyən etmək üçün bir üsul yaratdıq. Yoxlama qutusu işarələndikdə, `ingredients` massivi seçilmiş inqrediyenti əks etdirmək üçün yenilənir.
3. `testCheckboxes` funksiyası yaradaraq hansısa qeyd qutusunun işarələnibişarələnmədiyini yoxlanılır.
4. `startInference` funksiyasını istifadə edərək, hansısa düymə kliklənəndə və ya hər hansı işarə qutusu seçiləndə hərəkətə keçilir.
2. Qeyd qutuları massivinin proqram başlayanda çağırılan `init` funksiyasında yoxlanılıb-yoxlanılmadığını müəyyən etmək üçün bir üsul yaratdıq. Yoxlama qutusu işarələndikdə, `ingredients` massivi seçilmiş inqrediyenti əks etdirmək üçün yenilənir.
3. `testCheckboxes` funksiyası yaradaraq hansısa qeyd qutusunun işarələnib-işarələnmədiyini yoxlanılır.
4. `startInference` funksiyasını istifadə edərək hansısa düymə basılanda və ya hər hansı işarə qutusu seçiləndə hərəkətə keçilir.
5. Nəticə çıxarma ardıcıllığı aşağıdakıları əhatə edir:
1. Modelin asinxron yükünün qurulması
2. Modelə göndərmək üçün Tensor strukturunun yaradılması
3. Modeli öyrədərkən yaratdığımız `float_input` daxiletməsini əks etdirən `feeds` datasının yaradılması (bu adı yoxlamaq üçün Netron-dan istifadə edə bilərsiniz)
4. `feeds` məlumatını modelə göndərmək və ondan cavab gözləmək
## Proqraqmı test edək
## Proqramı test edək
index.html faylının yerləşdiyi qovluqda Visual Studio-da yeni terminal açaq və qlobalda quraşdırılmış [http-server](https://www.npmjs.com/package/http-server) mövcud olduğundan əmin olaq. Sorğuda `http-server` yazdıqdan sonra Localhost açılacaq. Beləliklə Veb tətbiqə nəzər yetirə bilərik. Müxtəlif inqridiyentlər əsasında hansı mətbəxin tövsiyə olunduğunu yoxlayaq:
index.html faylının yerləşdiyi qovluqda Visual Studio-da yeni terminal açaq və qlobalda quraşdırılmış [http-server](https://www.npmjs.com/package/http-server) mövcud olduğundan əmin olaq. Sorğuda `http-server` yazdıqdan sonra Localhost açılacaq. Beləliklə Veb tətbiqə nəzər yetirə bilərik. Müxtəlif inqrediyentlər əsasında hansı mətbəxin tövsiyə olunduğunu yoxlayaq:

Təbriklər, 'tövsiyyə edən' veb tətbiq yaratdıq. İndi isə sistemi qurmaq üçün daha çox vaxt ayıraq!
## 🚀 Məşğələ
Hazırki veb tətbiq minimal səviyyədədir. Bu səbəbdən inqrediyentlər və onların indekslərinə əsasən [ingredient_indexes](../../data/ingredient_indexes.csv) datasından istifadə etməklə davam etmək lazımdır. Verilmiş milli yeməyi hazırlamaq üçün hansı dadlardan istifadə edilməlidir, müəyyən edək.
Biz bu dərsdə qida maddələri üçün tövsiyə sisteminin yaradılmasına səthi toxunsaq da, MÖ tətbiqlərinin bu sahədə töhvələri çox zəngindir. Bu sistemlərin necə qurulduğu haqqında daha ətraflı oxuyun:
Biz bu dərsdə qida maddələri üçün tövsiyə sisteminin yaradılmasına səthi toxunsaq da, ML tətbiqlərinin bu sahədə töhvələri çox zəngindir. Bu sistemlərin necə qurulduğu haqqında daha ətraflı oxuyun:
Bu dərslərdəki təcrübələrə əsasən, Onnx Runtime və ya çevrilmiş bir Onnx modeli istifadə edərək JavaScript əsaslı veb tətbiqi necə yaratmağı artıq bilirik. Bu dərsdəki məlumatlardan və ya başqa mənbədən (zəhmət olmasa, mənbəni göstərməklə) məlumatları istifadə edərək yeni bir tövsiyə yaratmaqla təcrübələr aparın. Fərqli şəxsiyyət xüsusiyyətlərinə görə müəyyən bir ev heyvanı tövsiyəçisi və ya şəxsin əhvalına uyğun musiqi janrı tövsiyə edən bir sistem yarada bilərsiniz. Kreativ olun!
Bu dərslərdəki təcrübələrə əsasən Onnx Runtime və ya çevrilmiş bir Onnx modeli istifadə edərək JavaScript əsaslı veb tətbiqi necə yaratmağı artıq bilirik. Bu dərsdəki məlumatlardan və ya başqa mənbədən (zəhmət olmazsa, mənbəni göstərməklə) məlumatları istifadə edərək yeni bir tövsiyə sistemi yaratmaqda təcrübələr aparın. Fərqli şəxsiyyət xüsusiyyətlərinə görə müəyyən bir ev heyvanı tövsiyəçisi və ya şəxsin əhvalına uyğun musiqi janrı tövsiyə edən bir sistem yarada bilərsiniz. Yaradıcı olun!
| | Veb tətbiq və ya notbuk verilib. Hər ikisi istifadəyə hazırdır. | İkisindən biri əskikdir və ya qüsurludur. | Hər ikisi ya əskikdir, ya da qüsurludur. |