{"id":910,"date":"2023-01-02T07:51:57","date_gmt":"2023-01-02T07:51:57","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=910"},"modified":"2023-01-02T07:51:57","modified_gmt":"2023-01-02T07:51:57","slug":"pildi-kategoriseerimine-masinoppega-protsessi-ulevaade","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/pildi-kategoriseerimine-masinoppega-protsessi-ulevaade\/","title":{"raw":"Pildi kategoriseerimine masin\u00f5ppega - protsessi \u00fclevaade","rendered":"Pildi kategoriseerimine masin\u00f5ppega &#8211; protsessi \u00fclevaade"},"content":{"raw":"<h1 id=\"image-recognition-process-overview--page-root\">Pildi kategoriseerimine masin\u00f5ppega<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#image-recognition-process-overview--page-root\">\uf0c1<\/a><\/h1>\r\n\u00dclesanne, mida lahendama hakkame, on kategoriseerimine. Anname arvutile ette \u00fche pildi ning arvuti annab vastuseks kategooria, millesse see pilt kuulub. Kategooria all m\u00f5eldakse siis seda, milline objekt (v\u00f5i objektid) on pildil. Kui n\u00e4iteks pildil on loom, annab arvuti teada, et see kuulub \"looma\" kategooriasse. Kui pildil on inimene, siis \"inimene\" kategooriasse jne. Vaatame siin peat\u00fckis, millised on sammud, mida sellise kategoriseerija tegemise jaoks on vaja l\u00e4bi teha.\r\n\r\n<section id=\"treeningandmete-piltide-leidmine\">\r\n<h2 id=\"treeningandmete-piltide-leidmine\">Treeningandmete (piltide) leidmine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#treeningandmete-piltide-leidmine\">\uf0c1<\/a><\/h2>\r\nSelleks, et masin saaks \u00f5ppida, kuidas \u00fcks v\u00f5i teine objekt v\u00e4lja n\u00e4eb, on tal vaja n\u00e4idisandmeid \u00f5ppimiseks. See t\u00e4hendab, et treenimiseks on vaja koguda pilte. Mida rohkem n\u00e4idisandmeid on, seda paremini saab masin \u00f5ppida. Ei ole \u00fchest vastust, kui palju on piisav kogus mingi \u00fclesande jaoks. Me v\u00f5ime siin n\u00e4ite jaoks \u00f6elda, et 100 pilti on piisav, et mingisuguseid tulemusi juba saavutada. Aga \u00fcldselt l\u00e4hevad need kogused miljonitesse. Teisest k\u00fcljest - mida rohkem on treeningandmeid (pilte), seda rohkem v\u00f5tab treenimine aega.\r\n\r\nLisaks kogusele on t\u00e4htis ka piltide sobivus. Pildid peaks olema \u00fcksteisest v\u00f5imalikult erinevad, et n\u00e4rviv\u00f5rk saaks n\u00e4ha erinevaid kujusid ja v\u00e4rve. Soovitatav on v\u00f5tta pildid, kus on v\u00f5imalikult v\u00e4he h\u00e4irivaid faktoreid. See aitab v\u00e4ltida olukorda, kus n\u00e4rviv\u00f5rk \u00f5pib selgeks vale omaduse, mida esineb sageli, kuid ei ole defineeriv pildi juures. (Kui n\u00e4iteks treenida j\u00e4neseid tuvastama piltidelt, kus on alati porgand, siis v\u00f5ib n\u00e4rviv\u00f5rk \u00f5ppida hoopis porgandit tuvastama kui j\u00e4nest).\r\n\r\nSamuti tasub proovida treeningandmete moonutamist (venitamine, p\u00f6\u00f6ramine, m\u00fcra lisamine)\r\nenne treenimist, et tulemuseks oleks t\u00f6\u00f6kindlam n\u00e4rviv\u00f5rk.\r\nSee v\u00f5imaldab saada rohkem kasu samast pildist, sest sama pilti saab mitut eri moodi moonutada.\r\nT\u00e4psemalt saab lugeda ja n\u00e4iteid vaadata\r\n<a class=\"reference external\" href=\"https:\/\/blog.keras.io\/building-powerful-image-classification-models-using-very-little-data.html\">siit<\/a>.\r\n\r\n<\/section><section id=\"mudeli-koostamine\">\r\n<h2 id=\"mudeli-koostamine\">Mudeli koostamine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#mudeli-koostamine\">\uf0c1<\/a><\/h2>\r\nMudeli all peame siin kohal silmas n\u00e4rviv\u00f5rku ja selle struktuuri. N\u00e4rviv\u00f5rgu struktuur on disainitud ja defineeritud programmeerija poolt enne treenimist. See sisaldab endas informatsiooni selle kohta, palju neuroneid n\u00e4rviv\u00f5rgus on ja kuidas need omavahel \u00fchendatud on. Piisava suurusega n\u00e4rviv\u00f5rk on alati v\u00f5imeline \u00f5ppima klassifitseerima, aga sobiv struktuur kiirendab \u00f5ppimist.\r\n\r\nSiin \u00fclesandes on soovitatav kasutada j\u00e4rjestikkust (PyTorch\/Keras: <code class=\"docutils literal notranslate\"><span class=\"pre\">Sequential<\/span><\/code>) mudelit. See t\u00e4hendab, et pilt kui sisendandmed l\u00e4heb \u00fckshaaval l\u00e4bi kihtide. Iga kihi v\u00e4ljund on j\u00e4rgneva kihi sisend. Viimase kihi v\u00e4ljundiks on iga pildi kategooriasse kuuluvuse t\u00f5en\u00e4osus.\r\n\r\nEsimeste kihtide \u00fclesanne on tuvastada osalisi omadusi nagu n\u00e4iteks silm\/nina\/suu. Selle jaoks on parim kasutada konvolutsioonilisi (<em>convolutional<\/em>) kihte. Tegu on kihtidega, mis v\u00f5tavad arvesse vaid lokaalseid v\u00e4\u00e4rtuseid korraga. Teisis\u00f5nu, konvolutsioonilised kihid \u00f5pivad mustreid k\u00f5rvutiste andmete (nt pikslite) vahel, mis on t\u00e4pselt mida me soovime visuaalandmete puhul. N\u00e4rviv\u00f5rgul ei ole tavaliselt optimaalne otsida mustreid kahes pildi eriotstes asetsevate pikslite vahel.\r\n\r\nJ\u00e4rgmisena on soovitatav kasutada kihte (ehk aktivatsioonifunktsioone), mis hindavad omaduste t\u00e4htsust ja v\u00e4hendavad lineaarsust (ehk v\u00f5imaldavad n\u00e4rviv\u00f5rgul \u00f5ppida raskemaid mustreid). Selleks sobivad n\u00e4iteks <code class=\"docutils literal notranslate\"><span class=\"pre\">ReLU<\/span><\/code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">tanh<\/span><\/code> v\u00f5i <code class=\"docutils literal notranslate\"><span class=\"pre\">sigmoid<\/span><\/code> kihid.\r\n\r\nJ\u00e4rgmisena on soovitatav kasutada ahenduskihte (<em>pooling<\/em>), mis v\u00f5imaldavad tuvastada objekti hoolimata selle asukohast pildil. Saab \u00f6elda, et tegu on kihtidega, mis madaldavad andmete resolutsiooni, l\u00fc\u00fces mitme lokaalse neuroni v\u00e4\u00e4rtused kokku. Kuna nende v\u00e4ljundid on v\u00e4iksemad nende sisenditest, kiirendavad need kihid ka edaspidiseid arvutusi. Seesuguseid kihte on olemas mitut liiki: n\u00e4iteks <em>max pooling<\/em>, <em>average pooling<\/em> ja <em>sum pooling<\/em> kihid.\r\n\r\nJ\u00e4rgmisena tasub lihtsustada kihi struktuuri, selle jaoks on olemas <em>flattening<\/em> kiht, mis muudab kihi kuju lihtsamini hallatavaks j\u00e4rgnevate kihtide jaoks (nt 2D -&gt; 1D). Seej\u00e4rel tuleb k\u00f5ik tuvastatud omadused omavahel kombineerida, et j\u00f5uda objekti klassi\r\nkohta j\u00e4reldusele. Selle jaoks on t\u00e4ielikult \u00fchendatud kiht (<em>dense<\/em> ehk <em>fully connected layer<\/em>), mis \u00fchendab k\u00f5ikide omaduste v\u00e4\u00e4rtused.\r\n\r\nP\u00f5hjalikuma \u00fclevaate kihtide ja nende omaduste kohta leiab\u00a0<a class=\"reference external\" href=\"https:\/\/towardsdatascience.com\/wtf-is-image-classification-8e78a8235acb\">siit<\/a>.\r\n\r\n<\/section><section id=\"treeningandmete-osadeks-jagamine\">\r\n<h2 id=\"treeningandmete-osadeks-jagamine\">Treeningandmete osadeks jagamine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#treeningandmete-osadeks-jagamine\">\uf0c1<\/a><\/h2>\r\nN\u00fc\u00fcd on olemas n\u00e4rviv\u00f5rk mida treenida, kui ka piisavalt pilte, mille peal treenida. Selleks, et treenida ja tulemust kontrollida, on vaja andmed jagada osadeks, et m\u00e4\u00e4rata, millistel osadel treenitakse n\u00e4rviv\u00f5rku ja millistel osadel kontrollitakse tulemust.\r\nAndmete osadeks jagamiseks on mitmeid erinevaid v\u00f5imalikke lahendusi.\r\nSiin tutvustame \u00fchte lihtsamatest lahendustest, mis eeldab, et andmed jagatakse kolmeks osaks:\r\ntreeningandmestik (<em>training set<\/em>), valideerimisandmestik (<em>validation set<\/em>), testandmestik (<em>test set<\/em>).\r\n\r\n<strong>Treeningandmestik<\/strong> (<em>training set<\/em>) andmed on pildid, mille peal n\u00e4rviv\u00f5rk \u00f5pib. Treeningandmed moodustavad enamuse kogu hulgast. Neid pilte kasutab n\u00e4rviv\u00f5rk selleks, et leida n\u00e4rviv\u00f5rgu neuronite kaalud.\r\n\r\n<strong>Valideerimisandmestik<\/strong> (<em>validation set<\/em>) koosneb piltidest, mida kasutatakse treenimise vahepeal. Valideerimisandmeid on tunduvalt v\u00e4hem treeningandmetest. Neid pilte kasutatakse selleks, et korrigeerida mudeli parameetreid. N\u00e4iteks kasutatakse seda hulka, et leida parim neuronite arv kihis. Samuti aitab see hulk v\u00e4ltida \u00fcletreenimist.\r\n\r\n<strong>Testandmestik<\/strong> (<em>test set<\/em>) koosneb on piltidest, mida kasutatakse l\u00f5pliku hinnangu andmiseks. Tegu on piltidega, mida n\u00e4rviv\u00f5rk pole siiani n\u00e4inud. Kuna need andmed pole treenimist m\u00f5jutanud, siis see aitab simuleerida reaalset olukorda. Nende andmete peal arvutatakse ka n\u00e4rviv\u00f5rgu l\u00f5plik t\u00e4psus.\r\n\r\nP\u00f5hjalikuma \u00fclevaate treeningandmete gruppidest leiab\r\n<a class=\"reference external\" href=\"https:\/\/en.wikipedia.org\/wiki\/Training,_validation,_and_test_sets\">siit<\/a>.\r\n\r\nOsade suuruste jaoks puudub alati toimiv lahendus, kuid osad v\u00f5imalikud osakaalud on n\u00e4iteks (treening-, valideerimis-, testiandmestiku suhted):\r\n<ul class=\"simple\">\r\n \t<li>0.8 : 0.1 : 0.1<\/li>\r\n \t<li>0.7 : 0.15 : 0.15<\/li>\r\n \t<li>0.6 : 0.2 : 0.2<\/li>\r\n<\/ul>\r\nMida v\u00e4hem on kogutud andmeid, seda rohkem s\u00f5ltub tulemus osade suurusest. Lisaks suurustele on t\u00e4htis ka sisu. Kui valideerimise v\u00f5i testandmed on v\u00e4ga palju erinevad treeningandmetest, siis ei vasta testimise tulemused treenimisele.\r\n\r\n<\/section><section id=\"mudeli-treenimine\">\r\n<h2 id=\"mudeli-treenimine\">Mudeli treenimine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#mudeli-treenimine\">\uf0c1<\/a><\/h2>\r\nMudeli treenimine koosneb epohhitest (inglise keeles <em>epoch<\/em>). Epohhi jooksul k\u00e4iakse treeningandmed \u00fche korra l\u00e4bi. Treenimine koosneb tavaliselt rohkem kui \u00fches epohhist.\r\n\r\nKui teha liiga palju epohhe, siis tekib taaskord \u00fcletreenimise oht, sest n\u00e4rviv\u00f5rgule antakse piisavalt aega \"treeningandmed p\u00e4he tuupida\". \u00dcks lihtsamaid meetodeid on <em>elbow method<\/em>.\r\nTehes graafiku <em>loss<\/em> v\u00e4\u00e4rtusest epohhi kohta.\r\nAntud graafikult otsitakse nurga koht ja vastav epohhite arv.\r\n\r\n<img class=\"alignnone size-large wp-image-911\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-1024x491.jpeg\" alt=\"Elbow meetod \u00fcletreenimise v\u00e4hendamiseks\" width=\"1024\" height=\"491\" \/>\r\n\r\nEpohhid jagatakse plokkideks (inglise keeles <em>batch<\/em>).\r\nPlokk on alamosa treeningandmetest, mille peal parasjagu t\u00f6\u00f6tatakse, et k\u00f5ik andmed ei peaks korraga l\u00e4bi t\u00f6\u00f6tama.\r\nMida v\u00e4iksem on ploki suurus, seda kaootilisem on \u00f5ppimine. Aga mida suurem, seda rohkem m\u00e4lu kasutatakse.\r\n\r\n<em>Batch<\/em> on tihedalt seotud <em>iterations<\/em> arvuga.\r\nSee arv defineerib, mitu korda andmed \u00fcle k\u00e4iakse.\r\nKorrutades batch_size ja iterations arvu, saab teada mitut pilti n\u00e4rviv\u00f5rgule n\u00e4idatakse.\r\nSedasi v\u00f5ib juhtuda, et sama pilti kasutatakse ka mitu korda.\r\n\r\n<\/section><section id=\"mudeli-testimine\">\r\n<h2 id=\"mudeli-testimine\">Mudeli testimine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#mudeli-testimine\">\uf0c1<\/a><\/h2>\r\nMudeli testimiseks kasutatakse varasemalt k\u00f5rvale pandud testimisandmeid.\r\nTestimise eesm\u00e4rk on teada saada, kuidas tehtud muudatused mudeli toimimist m\u00f5jutavad.\r\nSellele viidatakse osades materjalides ka kui <em>Evaluate<\/em>.\r\nMudeli kvaliteeti saab hinnata erinevate parameetrite alusel.\r\nS\u00f5ltuvalt kasutatavast teegist v\u00f5ib erineda, millised omadused selle protsessi k\u00e4igus arvutatakse.\r\n\r\n<strong>Accuracy<\/strong> kirjeldab kui suur osa andmetest klassifitseeriti \u00f5igesti.\r\nSee arvutatakse jagades \u00f5igesti klassifitseeritud piltide hulka k\u00f5igi piltide hulgaga.\r\nSeda on soovitatav kasutada siis, kui klasside osakaal andmetes on v\u00f5rdne.\r\nOlukorras, kus \u00fchte klassi on rohkem kui teisi on tulemus kallutatud selle \u00fche klassi poole.\r\n\r\nV\u00f5tame n\u00e4iteks olukorra, kus on 99 inimest ja 1 terminaator. Kui sa alati ennustad, et tegu on inimesega, siis see parameeter annab 99% t\u00e4psuse, aga lugu l\u00f5ppeb inimeste jaoks kehvasti, sest terminaator j\u00e4\u00e4b tuvastamata.\r\n\r\n<strong>Precision<\/strong> kirjeldab kui suur osa moodustavad \u00f5igesti ennustatud positiivseid tulemused\r\nk\u00f5igist positiivselt ennustatud tulemustest.\r\nSeda on soovitatav kasutada, siis kui tulemuses peab olema v\u00e4ga kindel ja aitab v\u00e4ltida\r\nvalesid positiivseid tulemusi.\r\n\r\nN\u00e4iteks on v\u00e4ga ebaviisakas nimetada inimest terminaatoriks kui ta tegelikult ei ole.\r\nSeega peab antud ennustuses olema kindel.\r\n\r\n<strong>Recall<\/strong> kirjeldab \u00f5igesti ennustatud positiivsete tulemuste osakaalu k\u00f5igist tegelikult\r\nt\u00f5estest tulemustest.\r\nSeda on soovitatav kasutada, siis kui eesm\u00e4rgiks on klassifitseerida positiivselt v\u00f5imalikult\r\npalju positiivseid tulemusi.\r\nN\u00e4iteks kui eesm\u00e4rk on tabada v\u00f5imalikult palju inimesi ja paar \u00fcksikut terminaatorit\r\nv\u00f5i looma, kes sinna hulka satuvad ei ole nii olulised.\r\n\r\n<strong>F1 Score<\/strong> kombineerib precision'i ja recall'i, et anda tulemus, mis arvestab m\u00f5lemat.\r\nSeda on soovitatav kasutada, siis kui m\u00f5lemad nii precision kui ka recall on t\u00e4htsad.\r\nSeda lahendust on v\u00f5imalik t\u00e4iendada andes m\u00f5lemale komponendile kaal kui nende t\u00e4htsused ei ole v\u00f5rdsed.\r\nN\u00e4iteks kui mudel ei suuda tuvastada v\u00e4ikese osakaaluga s\u00fcndmust, siis n\u00e4itab F1 Score,\r\net tegu on ebakvaliteetse mudeliga.\r\n\r\nMudeli hindamiseks on veel palju erinevaid valemeid ja nii eeltoodute kui ka teiste kohta saab l\u00e4hemalt lugeda\r\n<a class=\"reference external\" href=\"https:\/\/towardsdatascience.com\/the-5-classification-evaluation-metrics-you-must-know-aa97784ff226\">siit<\/a>.\r\n\r\n<\/section>","rendered":"<h1 id=\"image-recognition-process-overview--page-root\">Pildi kategoriseerimine masin\u00f5ppega<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#image-recognition-process-overview--page-root\">\uf0c1<\/a><\/h1>\n<p>\u00dclesanne, mida lahendama hakkame, on kategoriseerimine. Anname arvutile ette \u00fche pildi ning arvuti annab vastuseks kategooria, millesse see pilt kuulub. Kategooria all m\u00f5eldakse siis seda, milline objekt (v\u00f5i objektid) on pildil. Kui n\u00e4iteks pildil on loom, annab arvuti teada, et see kuulub &#8220;looma&#8221; kategooriasse. Kui pildil on inimene, siis &#8220;inimene&#8221; kategooriasse jne. Vaatame siin peat\u00fckis, millised on sammud, mida sellise kategoriseerija tegemise jaoks on vaja l\u00e4bi teha.<\/p>\n<section id=\"treeningandmete-piltide-leidmine\">\n<h2 id=\"treeningandmete-piltide-leidmine\">Treeningandmete (piltide) leidmine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#treeningandmete-piltide-leidmine\">\uf0c1<\/a><\/h2>\n<p>Selleks, et masin saaks \u00f5ppida, kuidas \u00fcks v\u00f5i teine objekt v\u00e4lja n\u00e4eb, on tal vaja n\u00e4idisandmeid \u00f5ppimiseks. See t\u00e4hendab, et treenimiseks on vaja koguda pilte. Mida rohkem n\u00e4idisandmeid on, seda paremini saab masin \u00f5ppida. Ei ole \u00fchest vastust, kui palju on piisav kogus mingi \u00fclesande jaoks. Me v\u00f5ime siin n\u00e4ite jaoks \u00f6elda, et 100 pilti on piisav, et mingisuguseid tulemusi juba saavutada. Aga \u00fcldselt l\u00e4hevad need kogused miljonitesse. Teisest k\u00fcljest &#8211; mida rohkem on treeningandmeid (pilte), seda rohkem v\u00f5tab treenimine aega.<\/p>\n<p>Lisaks kogusele on t\u00e4htis ka piltide sobivus. Pildid peaks olema \u00fcksteisest v\u00f5imalikult erinevad, et n\u00e4rviv\u00f5rk saaks n\u00e4ha erinevaid kujusid ja v\u00e4rve. Soovitatav on v\u00f5tta pildid, kus on v\u00f5imalikult v\u00e4he h\u00e4irivaid faktoreid. See aitab v\u00e4ltida olukorda, kus n\u00e4rviv\u00f5rk \u00f5pib selgeks vale omaduse, mida esineb sageli, kuid ei ole defineeriv pildi juures. (Kui n\u00e4iteks treenida j\u00e4neseid tuvastama piltidelt, kus on alati porgand, siis v\u00f5ib n\u00e4rviv\u00f5rk \u00f5ppida hoopis porgandit tuvastama kui j\u00e4nest).<\/p>\n<p>Samuti tasub proovida treeningandmete moonutamist (venitamine, p\u00f6\u00f6ramine, m\u00fcra lisamine)<br \/>\nenne treenimist, et tulemuseks oleks t\u00f6\u00f6kindlam n\u00e4rviv\u00f5rk.<br \/>\nSee v\u00f5imaldab saada rohkem kasu samast pildist, sest sama pilti saab mitut eri moodi moonutada.<br \/>\nT\u00e4psemalt saab lugeda ja n\u00e4iteid vaadata<br \/>\n<a class=\"reference external\" href=\"https:\/\/blog.keras.io\/building-powerful-image-classification-models-using-very-little-data.html\">siit<\/a>.<\/p>\n<\/section>\n<section id=\"mudeli-koostamine\">\n<h2 id=\"mudeli-koostamine\">Mudeli koostamine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#mudeli-koostamine\">\uf0c1<\/a><\/h2>\n<p>Mudeli all peame siin kohal silmas n\u00e4rviv\u00f5rku ja selle struktuuri. N\u00e4rviv\u00f5rgu struktuur on disainitud ja defineeritud programmeerija poolt enne treenimist. See sisaldab endas informatsiooni selle kohta, palju neuroneid n\u00e4rviv\u00f5rgus on ja kuidas need omavahel \u00fchendatud on. Piisava suurusega n\u00e4rviv\u00f5rk on alati v\u00f5imeline \u00f5ppima klassifitseerima, aga sobiv struktuur kiirendab \u00f5ppimist.<\/p>\n<p>Siin \u00fclesandes on soovitatav kasutada j\u00e4rjestikkust (PyTorch\/Keras: <code class=\"docutils literal notranslate\"><span class=\"pre\">Sequential<\/span><\/code>) mudelit. See t\u00e4hendab, et pilt kui sisendandmed l\u00e4heb \u00fckshaaval l\u00e4bi kihtide. Iga kihi v\u00e4ljund on j\u00e4rgneva kihi sisend. Viimase kihi v\u00e4ljundiks on iga pildi kategooriasse kuuluvuse t\u00f5en\u00e4osus.<\/p>\n<p>Esimeste kihtide \u00fclesanne on tuvastada osalisi omadusi nagu n\u00e4iteks silm\/nina\/suu. Selle jaoks on parim kasutada konvolutsioonilisi (<em>convolutional<\/em>) kihte. Tegu on kihtidega, mis v\u00f5tavad arvesse vaid lokaalseid v\u00e4\u00e4rtuseid korraga. Teisis\u00f5nu, konvolutsioonilised kihid \u00f5pivad mustreid k\u00f5rvutiste andmete (nt pikslite) vahel, mis on t\u00e4pselt mida me soovime visuaalandmete puhul. N\u00e4rviv\u00f5rgul ei ole tavaliselt optimaalne otsida mustreid kahes pildi eriotstes asetsevate pikslite vahel.<\/p>\n<p>J\u00e4rgmisena on soovitatav kasutada kihte (ehk aktivatsioonifunktsioone), mis hindavad omaduste t\u00e4htsust ja v\u00e4hendavad lineaarsust (ehk v\u00f5imaldavad n\u00e4rviv\u00f5rgul \u00f5ppida raskemaid mustreid). Selleks sobivad n\u00e4iteks <code class=\"docutils literal notranslate\"><span class=\"pre\">ReLU<\/span><\/code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">tanh<\/span><\/code> v\u00f5i <code class=\"docutils literal notranslate\"><span class=\"pre\">sigmoid<\/span><\/code> kihid.<\/p>\n<p>J\u00e4rgmisena on soovitatav kasutada ahenduskihte (<em>pooling<\/em>), mis v\u00f5imaldavad tuvastada objekti hoolimata selle asukohast pildil. Saab \u00f6elda, et tegu on kihtidega, mis madaldavad andmete resolutsiooni, l\u00fc\u00fces mitme lokaalse neuroni v\u00e4\u00e4rtused kokku. Kuna nende v\u00e4ljundid on v\u00e4iksemad nende sisenditest, kiirendavad need kihid ka edaspidiseid arvutusi. Seesuguseid kihte on olemas mitut liiki: n\u00e4iteks <em>max pooling<\/em>, <em>average pooling<\/em> ja <em>sum pooling<\/em> kihid.<\/p>\n<p>J\u00e4rgmisena tasub lihtsustada kihi struktuuri, selle jaoks on olemas <em>flattening<\/em> kiht, mis muudab kihi kuju lihtsamini hallatavaks j\u00e4rgnevate kihtide jaoks (nt 2D -&gt; 1D). Seej\u00e4rel tuleb k\u00f5ik tuvastatud omadused omavahel kombineerida, et j\u00f5uda objekti klassi<br \/>\nkohta j\u00e4reldusele. Selle jaoks on t\u00e4ielikult \u00fchendatud kiht (<em>dense<\/em> ehk <em>fully connected layer<\/em>), mis \u00fchendab k\u00f5ikide omaduste v\u00e4\u00e4rtused.<\/p>\n<p>P\u00f5hjalikuma \u00fclevaate kihtide ja nende omaduste kohta leiab\u00a0<a class=\"reference external\" href=\"https:\/\/towardsdatascience.com\/wtf-is-image-classification-8e78a8235acb\">siit<\/a>.<\/p>\n<\/section>\n<section id=\"treeningandmete-osadeks-jagamine\">\n<h2 id=\"treeningandmete-osadeks-jagamine\">Treeningandmete osadeks jagamine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#treeningandmete-osadeks-jagamine\">\uf0c1<\/a><\/h2>\n<p>N\u00fc\u00fcd on olemas n\u00e4rviv\u00f5rk mida treenida, kui ka piisavalt pilte, mille peal treenida. Selleks, et treenida ja tulemust kontrollida, on vaja andmed jagada osadeks, et m\u00e4\u00e4rata, millistel osadel treenitakse n\u00e4rviv\u00f5rku ja millistel osadel kontrollitakse tulemust.<br \/>\nAndmete osadeks jagamiseks on mitmeid erinevaid v\u00f5imalikke lahendusi.<br \/>\nSiin tutvustame \u00fchte lihtsamatest lahendustest, mis eeldab, et andmed jagatakse kolmeks osaks:<br \/>\ntreeningandmestik (<em>training set<\/em>), valideerimisandmestik (<em>validation set<\/em>), testandmestik (<em>test set<\/em>).<\/p>\n<p><strong>Treeningandmestik<\/strong> (<em>training set<\/em>) andmed on pildid, mille peal n\u00e4rviv\u00f5rk \u00f5pib. Treeningandmed moodustavad enamuse kogu hulgast. Neid pilte kasutab n\u00e4rviv\u00f5rk selleks, et leida n\u00e4rviv\u00f5rgu neuronite kaalud.<\/p>\n<p><strong>Valideerimisandmestik<\/strong> (<em>validation set<\/em>) koosneb piltidest, mida kasutatakse treenimise vahepeal. Valideerimisandmeid on tunduvalt v\u00e4hem treeningandmetest. Neid pilte kasutatakse selleks, et korrigeerida mudeli parameetreid. N\u00e4iteks kasutatakse seda hulka, et leida parim neuronite arv kihis. Samuti aitab see hulk v\u00e4ltida \u00fcletreenimist.<\/p>\n<p><strong>Testandmestik<\/strong> (<em>test set<\/em>) koosneb on piltidest, mida kasutatakse l\u00f5pliku hinnangu andmiseks. Tegu on piltidega, mida n\u00e4rviv\u00f5rk pole siiani n\u00e4inud. Kuna need andmed pole treenimist m\u00f5jutanud, siis see aitab simuleerida reaalset olukorda. Nende andmete peal arvutatakse ka n\u00e4rviv\u00f5rgu l\u00f5plik t\u00e4psus.<\/p>\n<p>P\u00f5hjalikuma \u00fclevaate treeningandmete gruppidest leiab<br \/>\n<a class=\"reference external\" href=\"https:\/\/en.wikipedia.org\/wiki\/Training,_validation,_and_test_sets\">siit<\/a>.<\/p>\n<p>Osade suuruste jaoks puudub alati toimiv lahendus, kuid osad v\u00f5imalikud osakaalud on n\u00e4iteks (treening-, valideerimis-, testiandmestiku suhted):<\/p>\n<ul class=\"simple\">\n<li>0.8 : 0.1 : 0.1<\/li>\n<li>0.7 : 0.15 : 0.15<\/li>\n<li>0.6 : 0.2 : 0.2<\/li>\n<\/ul>\n<p>Mida v\u00e4hem on kogutud andmeid, seda rohkem s\u00f5ltub tulemus osade suurusest. Lisaks suurustele on t\u00e4htis ka sisu. Kui valideerimise v\u00f5i testandmed on v\u00e4ga palju erinevad treeningandmetest, siis ei vasta testimise tulemused treenimisele.<\/p>\n<\/section>\n<section id=\"mudeli-treenimine\">\n<h2 id=\"mudeli-treenimine\">Mudeli treenimine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#mudeli-treenimine\">\uf0c1<\/a><\/h2>\n<p>Mudeli treenimine koosneb epohhitest (inglise keeles <em>epoch<\/em>). Epohhi jooksul k\u00e4iakse treeningandmed \u00fche korra l\u00e4bi. Treenimine koosneb tavaliselt rohkem kui \u00fches epohhist.<\/p>\n<p>Kui teha liiga palju epohhe, siis tekib taaskord \u00fcletreenimise oht, sest n\u00e4rviv\u00f5rgule antakse piisavalt aega &#8220;treeningandmed p\u00e4he tuupida&#8221;. \u00dcks lihtsamaid meetodeid on <em>elbow method<\/em>.<br \/>\nTehes graafiku <em>loss<\/em> v\u00e4\u00e4rtusest epohhi kohta.<br \/>\nAntud graafikult otsitakse nurga koht ja vastav epohhite arv.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-911\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-1024x491.jpeg\" alt=\"Elbow meetod \u00fcletreenimise v\u00e4hendamiseks\" width=\"1024\" height=\"491\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-1024x491.jpeg 1024w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-300x144.jpeg 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-768x368.jpeg 768w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-1536x736.jpeg 1536w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-65x31.jpeg 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-225x108.jpeg 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example-350x168.jpeg 350w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2023\/01\/elbow_example.jpeg 1707w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Epohhid jagatakse plokkideks (inglise keeles <em>batch<\/em>).<br \/>\nPlokk on alamosa treeningandmetest, mille peal parasjagu t\u00f6\u00f6tatakse, et k\u00f5ik andmed ei peaks korraga l\u00e4bi t\u00f6\u00f6tama.<br \/>\nMida v\u00e4iksem on ploki suurus, seda kaootilisem on \u00f5ppimine. Aga mida suurem, seda rohkem m\u00e4lu kasutatakse.<\/p>\n<p><em>Batch<\/em> on tihedalt seotud <em>iterations<\/em> arvuga.<br \/>\nSee arv defineerib, mitu korda andmed \u00fcle k\u00e4iakse.<br \/>\nKorrutades batch_size ja iterations arvu, saab teada mitut pilti n\u00e4rviv\u00f5rgule n\u00e4idatakse.<br \/>\nSedasi v\u00f5ib juhtuda, et sama pilti kasutatakse ka mitu korda.<\/p>\n<\/section>\n<section id=\"mudeli-testimine\">\n<h2 id=\"mudeli-testimine\">Mudeli testimine<a class=\"headerlink\" title=\"Permalink to this heading\" href=\"#mudeli-testimine\">\uf0c1<\/a><\/h2>\n<p>Mudeli testimiseks kasutatakse varasemalt k\u00f5rvale pandud testimisandmeid.<br \/>\nTestimise eesm\u00e4rk on teada saada, kuidas tehtud muudatused mudeli toimimist m\u00f5jutavad.<br \/>\nSellele viidatakse osades materjalides ka kui <em>Evaluate<\/em>.<br \/>\nMudeli kvaliteeti saab hinnata erinevate parameetrite alusel.<br \/>\nS\u00f5ltuvalt kasutatavast teegist v\u00f5ib erineda, millised omadused selle protsessi k\u00e4igus arvutatakse.<\/p>\n<p><strong>Accuracy<\/strong> kirjeldab kui suur osa andmetest klassifitseeriti \u00f5igesti.<br \/>\nSee arvutatakse jagades \u00f5igesti klassifitseeritud piltide hulka k\u00f5igi piltide hulgaga.<br \/>\nSeda on soovitatav kasutada siis, kui klasside osakaal andmetes on v\u00f5rdne.<br \/>\nOlukorras, kus \u00fchte klassi on rohkem kui teisi on tulemus kallutatud selle \u00fche klassi poole.<\/p>\n<p>V\u00f5tame n\u00e4iteks olukorra, kus on 99 inimest ja 1 terminaator. Kui sa alati ennustad, et tegu on inimesega, siis see parameeter annab 99% t\u00e4psuse, aga lugu l\u00f5ppeb inimeste jaoks kehvasti, sest terminaator j\u00e4\u00e4b tuvastamata.<\/p>\n<p><strong>Precision<\/strong> kirjeldab kui suur osa moodustavad \u00f5igesti ennustatud positiivseid tulemused<br \/>\nk\u00f5igist positiivselt ennustatud tulemustest.<br \/>\nSeda on soovitatav kasutada, siis kui tulemuses peab olema v\u00e4ga kindel ja aitab v\u00e4ltida<br \/>\nvalesid positiivseid tulemusi.<\/p>\n<p>N\u00e4iteks on v\u00e4ga ebaviisakas nimetada inimest terminaatoriks kui ta tegelikult ei ole.<br \/>\nSeega peab antud ennustuses olema kindel.<\/p>\n<p><strong>Recall<\/strong> kirjeldab \u00f5igesti ennustatud positiivsete tulemuste osakaalu k\u00f5igist tegelikult<br \/>\nt\u00f5estest tulemustest.<br \/>\nSeda on soovitatav kasutada, siis kui eesm\u00e4rgiks on klassifitseerida positiivselt v\u00f5imalikult<br \/>\npalju positiivseid tulemusi.<br \/>\nN\u00e4iteks kui eesm\u00e4rk on tabada v\u00f5imalikult palju inimesi ja paar \u00fcksikut terminaatorit<br \/>\nv\u00f5i looma, kes sinna hulka satuvad ei ole nii olulised.<\/p>\n<p><strong>F1 Score<\/strong> kombineerib precision&#8217;i ja recall&#8217;i, et anda tulemus, mis arvestab m\u00f5lemat.<br \/>\nSeda on soovitatav kasutada, siis kui m\u00f5lemad nii precision kui ka recall on t\u00e4htsad.<br \/>\nSeda lahendust on v\u00f5imalik t\u00e4iendada andes m\u00f5lemale komponendile kaal kui nende t\u00e4htsused ei ole v\u00f5rdsed.<br \/>\nN\u00e4iteks kui mudel ei suuda tuvastada v\u00e4ikese osakaaluga s\u00fcndmust, siis n\u00e4itab F1 Score,<br \/>\net tegu on ebakvaliteetse mudeliga.<\/p>\n<p>Mudeli hindamiseks on veel palju erinevaid valemeid ja nii eeltoodute kui ka teiste kohta saab l\u00e4hemalt lugeda<br \/>\n<a class=\"reference external\" href=\"https:\/\/towardsdatascience.com\/the-5-classification-evaluation-metrics-you-must-know-aa97784ff226\">siit<\/a>.<\/p>\n<\/section>\n","protected":false},"author":36,"menu_order":4,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-910","chapter","type-chapter","status-publish","hentry"],"part":784,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/910","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/36"}],"version-history":[{"count":1,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/910\/revisions"}],"predecessor-version":[{"id":912,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/910\/revisions\/912"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/784"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/910\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=910"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=910"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}