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/et/4-Classification/4-Applied
localizeflow[bot] 2bc4085ea6
chore(i18n): sync translations with latest source changes (chunk 2/6, 473 changes)
1 week ago
..
solution 🌐 Update translations via Co-op Translator 4 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 2/6, 473 changes) 1 week ago
assignment.md 🌐 Update translations via Co-op Translator 4 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 4 months ago

README.md

Ehita köögi soovitaja veebirakendus

Selles õppetükis ehitad klassifikatsioonimudeli, kasutades mõningaid tehnikaid, mida oled õppinud eelnevates tundides, ja maitsvat köögidatasetit, mida on kasutatud kogu selle sarja jooksul. Lisaks ehitad väikese veebirakenduse, et kasutada salvestatud mudelit, kasutades Onnxi veebiruntime'i.

Masinõppe üks kasulikumaid praktilisi rakendusi on soovitussüsteemide loomine, ja täna saad teha esimese sammu selles suunas!

Selle veebirakenduse tutvustamine

🎥 Klõpsa ülaloleval pildil, et vaadata videot: Jen Looper ehitab veebirakenduse, kasutades klassifitseeritud köögidatasetit

Eeltesti küsimustik

Selles õppetükis õpid:

  • Kuidas ehitada mudelit ja salvestada see Onnx mudelina
  • Kuidas kasutada Netronit mudeli kontrollimiseks
  • Kuidas kasutada oma mudelit veebirakenduses järelduste tegemiseks

Ehita oma mudel

Rakendatud ML-süsteemide ehitamine on oluline osa nende tehnoloogiate kasutamisest ärisüsteemides. Sa saad kasutada mudeleid oma veebirakendustes (ja seega kasutada neid vajadusel ka võrguühenduseta kontekstis), kasutades Onnxi.

Varasemas õppetükis ehitasid regressioonimudeli UFO vaatlustest, "marineerisid" selle ja kasutasid seda Flaski rakenduses. Kuigi see arhitektuur on väga kasulik, on see täisstack Python rakendus, ja sinu nõuded võivad hõlmata JavaScripti rakenduse kasutamist.

Selles õppetükis saad ehitada lihtsa JavaScript-põhise süsteemi järelduste tegemiseks. Kõigepealt pead aga treenima mudeli ja konverteerima selle Onnxi jaoks.

Harjutus - treeni klassifikatsioonimudel

Kõigepealt treeni klassifikatsioonimudel, kasutades puhastatud köögidatasetit, mida me kasutasime.

  1. Alusta kasulike teekide importimisega:

    !pip install skl2onnx
    import pandas as pd 
    

    Vajad 'skl2onnx', et aidata oma Scikit-learn mudelit Onnx formaati konverteerida.

  2. Seejärel töötle oma andmeid samamoodi nagu eelnevates tundides, lugedes CSV-faili read_csv() abil:

    data = pd.read_csv('../data/cleaned_cuisines.csv')
    data.head()
    
  3. Eemalda esimesed kaks mittevajalikku veergu ja salvesta ülejäänud andmed kui 'X':

    X = data.iloc[:,2:]
    X.head()
    
  4. Salvesta sildid kui 'y':

    y = data[['cuisine']]
    y.head()
    
    

Alusta treeningrutiiini

Kasutame 'SVC' teeki, millel on hea täpsus.

  1. Impordi sobivad teegid Scikit-learnist:

    from sklearn.model_selection import train_test_split
    from sklearn.svm import SVC
    from sklearn.model_selection import cross_val_score
    from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report
    
  2. Eralda treening- ja testkomplektid:

    X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
    
  3. Ehita SVC klassifikatsioonimudel nagu tegid eelnevas õppetükis:

    model = SVC(kernel='linear', C=10, probability=True,random_state=0)
    model.fit(X_train,y_train.values.ravel())
    
  4. Nüüd testi oma mudelit, kutsudes predict():

    y_pred = model.predict(X_test)
    
  5. Prindi välja klassifikatsiooniraport, et kontrollida mudeli kvaliteeti:

    print(classification_report(y_test,y_pred))
    

    Nagu nägime varem, on täpsus hea:

                    precision    recall  f1-score   support
    
         chinese       0.72      0.69      0.70       257
          indian       0.91      0.87      0.89       243
        japanese       0.79      0.77      0.78       239
          korean       0.83      0.79      0.81       236
            thai       0.72      0.84      0.78       224
    
        accuracy                           0.79      1199
       macro avg       0.79      0.79      0.79      1199
    weighted avg       0.79      0.79      0.79      1199
    

Konverteeri oma mudel Onnxi formaati

Veendu, et konverteerimine toimub õige tensorarvuga. Selles datasetis on loetletud 380 koostisosa, seega pead märkima selle arvu FloatTensorType-is:

  1. Konverteeri, kasutades tensorarvuna 380.

    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    
    initial_type = [('float_input', FloatTensorType([None, 380]))]
    options = {id(model): {'nocl': True, 'zipmap': False}}
    
  2. Loo onx ja salvesta failina model.onnx:

    onx = convert_sklearn(model, initial_types=initial_type, options=options)
    with open("./model.onnx", "wb") as f:
        f.write(onx.SerializeToString())
    

    Märkus: Sa saad oma konverteerimisskripti valikuid edastada. Selles näites edastasime 'nocl', et see oleks True, ja 'zipmap', et see oleks False. Kuna tegemist on klassifikatsioonimudeliga, on sul võimalus eemaldada ZipMap, mis toodab loendi sõnastikest (pole vajalik). nocl viitab klassiinfo kaasamisele mudelisse. Vähenda oma mudeli suurust, määrates nocl väärtuseks 'True'.

Kui käivitad kogu märkmiku, ehitatakse Onnx mudel ja salvestatakse see kausta.

Vaata oma mudelit

Onnx mudelid ei ole Visual Studio koodis väga nähtavad, kuid on olemas väga hea tasuta tarkvara, mida paljud teadlased kasutavad mudeli visualiseerimiseks, et veenduda selle õiges ehitamises. Laadi alla Netron ja ava oma model.onnx fail. Näed oma lihtsat mudelit visualiseerituna, koos selle 380 sisendi ja klassifikaatoriga:

Netron visual

Netron on kasulik tööriist mudelite vaatamiseks.

Nüüd oled valmis kasutama seda lahedat mudelit veebirakenduses. Ehita rakendus, mis tuleb kasuks, kui vaatad oma külmkappi ja püüad välja mõelda, millist kombinatsiooni oma ülejäänud koostisosadest saad kasutada, et valmistada mudeli määratud kööki.

Ehita soovitaja veebirakendus

Sa saad oma mudelit otse veebirakenduses kasutada. See arhitektuur võimaldab seda ka kohapeal ja isegi võrguühenduseta kasutada, kui vaja. Alusta, luues index.html faili samasse kausta, kuhu salvestasid oma model.onnx faili.

  1. Selles failis index.html lisa järgmine märgistus:

    <!DOCTYPE html>
    <html>
        <header>
            <title>Cuisine Matcher</title>
        </header>
        <body>
            ...
        </body>
    </html>
    
  2. Nüüd, töötades body tagide sees, lisa veidi märgistust, et näidata koostisosade loendit märkeruutudena:

    <h1>Check your refrigerator. What can you create?</h1>
            <div id="wrapper">
                <div class="boxCont">
                    <input type="checkbox" value="4" class="checkbox">
                    <label>apple</label>
                </div>
    
                <div class="boxCont">
                    <input type="checkbox" value="247" class="checkbox">
                    <label>pear</label>
                </div>
    
                <div class="boxCont">
                    <input type="checkbox" value="77" class="checkbox">
                    <label>cherry</label>
                </div>
    
                <div class="boxCont">
                    <input type="checkbox" value="126" class="checkbox">
                    <label>fenugreek</label>
                </div>
    
                <div class="boxCont">
                    <input type="checkbox" value="302" class="checkbox">
                    <label>sake</label>
                </div>
    
                <div class="boxCont">
                    <input type="checkbox" value="327" class="checkbox">
                    <label>soy sauce</label>
                </div>
    
                <div class="boxCont">
                    <input type="checkbox" value="112" class="checkbox">
                    <label>cumin</label>
                </div>
            </div>
            <div style="padding-top:10px">
                <button onClick="startInference()">What kind of cuisine can you make?</button>
            </div> 
    

    Pane tähele, et igale märkeruudule on antud väärtus. See kajastab indeksit, kus koostisosa datasetis asub. Näiteks õun, selles tähestikulises loendis, asub viiendas veerus, seega on selle väärtus '4', kuna loendamine algab nullist. Sa saad vaadata koostisosade tabelit, et leida konkreetse koostisosa indeks.

    Jätkates tööd index.html failis, lisa skriptiplokk, kus mudel kutsutakse pärast viimast sulgemist </div>.

  3. Kõigepealt impordi Onnx Runtime:

    <script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.9.0/dist/ort.min.js"></script> 
    

    Onnx Runtime võimaldab käitada Onnx mudeleid laias valikus riistvaraplatvormidel, sealhulgas optimeerimised ja API kasutamiseks.

  4. Kui Runtime on paigas, saad seda kutsuda:

    <script>
        const ingredients = Array(380).fill(0);
    
        const checks = [...document.querySelectorAll('.checkbox')];
    
        checks.forEach(check => {
            check.addEventListener('change', function() {
                // toggle the state of the ingredient
                // based on the checkbox's value (1 or 0)
                ingredients[check.value] = check.checked ? 1 : 0;
            });
        });
    
        function testCheckboxes() {
            // validate if at least one checkbox is checked
            return checks.some(check => check.checked);
        }
    
        async function startInference() {
    
            let atLeastOneChecked = testCheckboxes()
    
            if (!atLeastOneChecked) {
                alert('Please select at least one ingredient.');
                return;
            }
            try {
                // create a new session and load the model.
    
                const session = await ort.InferenceSession.create('./model.onnx');
    
                const input = new ort.Tensor(new Float32Array(ingredients), [1, 380]);
                const feeds = { float_input: input };
    
                // feed inputs and run
                const results = await session.run(feeds);
    
                // read from results
                alert('You can enjoy ' + results.label.data[0] + ' cuisine today!')
    
            } catch (e) {
                console.log(`failed to inference ONNX model`);
                console.error(e);
            }
        }
    
    </script>
    

Selles koodis toimub mitu asja:

  1. Lood 380 võimaliku väärtuse (1 või 0) massiivi, mis määratakse ja saadetakse mudelile järelduste tegemiseks, sõltuvalt sellest, kas koostisosa märkeruut on märgitud.
  2. Lood märkeruutude massiivi ja viisi, kuidas määrata, kas need on märgitud, funktsioonis init, mida kutsutakse rakenduse käivitamisel. Kui märkeruut on märgitud, muudetakse ingredients massiivi, et kajastada valitud koostisosa.
  3. Lood funktsiooni testCheckboxes, mis kontrollib, kas mõni märkeruut on märgitud.
  4. Kasutad startInference funktsiooni, kui nuppu vajutatakse, ja kui mõni märkeruut on märgitud, alustad järelduste tegemist.
  5. Järelduste tegemise rutiin sisaldab:
    1. Mudeli asünkroonse laadimise seadistamist
    2. Tensorstruktuuri loomist, mida mudelile saata
    3. 'feeds' loomist, mis kajastab float_input sisendit, mille lõid mudeli treenimisel (sa saad Netronit kasutada selle nime kontrollimiseks)
    4. Nende 'feeds' mudelile saatmist ja vastuse ootamist

Testi oma rakendust

Ava terminal Visual Studio Code'is kaustas, kus asub sinu index.html fail. Veendu, et sul on http-server globaalselt installitud, ja kirjuta käsureale http-server. Avaneb localhost, kus saad oma veebirakendust vaadata. Kontrolli, millist kööki soovitatakse erinevate koostisosade põhjal:

koostisosade veebirakendus

Palju õnne, oled loonud soovitaja veebirakenduse mõne väljaga. Võta aega, et seda süsteemi edasi arendada!

🚀Väljakutse

Sinu veebirakendus on väga minimaalne, seega jätka selle arendamist, kasutades koostisosi ja nende indekseid ingredient_indexes andmetest. Millised maitsekooslused sobivad konkreetse rahvusroa loomiseks?

Järgneva testi küsimustik

Ülevaade ja iseseisev õppimine

Kuigi see õppetund puudutas vaid toidu koostisosade soovitussüsteemi loomise kasulikkust, on see ML-rakenduste valdkond väga rikas näidete poolest. Loe rohkem, kuidas neid süsteeme ehitatakse:

Ülesanne

Ehita uus soovitaja


Lahtiütlus:
See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.