bir suredir login olmamistim buraya, konundaki cevaplari gordum de yazmak istedim..
Simdi bu konu oyle iki dakikada anlatilacak bir sey degil. Ama elimden geldigince kisaca anlatmaya calisayim.
Gunumuzde
Machine Learning denilen teknoloji onemini arttiriyor ve bir cok olay bununla cozulebiliyor. bu konuda guzel calismalari var,
ornek (bastan sona izlemeni tavsiye ederim)
Simdi bu rakam olayina gelince bunla ilgili bir proje yaptik. Elimizde uc tane veri seti var. Bunlar; training, test ve validation.
Oncelikle bilgisayara traning datalarini vererek, ogrenme islemlerini gerceklestireceksin. Bizim elimizdeki datasetlerin ozellikleri soyle
Ama elimizde 60 bin tane traning verisi ve 10 bin tane de test verisi var. Olay soyle, bu 60 bin tane veri yani bizim durumumuzda bunlar rakam oluyor. Atiyorum her rakamdan 6000 tane sekil var. Yani sifir rakamanini ele alirsak, insanlarin cizdigi 6000 tane sifir rakami var. Haliyle 6000 i de birbirinden farkli. Bir ornek verirsem
Gordugun gibi degisik formlarda 0 rakami var, bunlardan 6 binser tane ve her rakam icin mevcut.
Asagida da test verilerini goruyorsun..
Simdi bilgisayara belirli parametreler vererek ogretme islemi gerseklestiriliyor.
noron numarasi, epoch numarasi, ogrenme orani ve traning samples.. Traning samples i acarsam biraz; yukaridaki her hangi bir resmi pixel bazinda dusun. Her pixel in belirli bir renk kodu mevcut. Ustte verdigim gibi bizdeki her bir resmin boyutu 28x28 (uzunluk, genislik) dir, ve bunlar ayni zamanda pixel sayisini veriyor. Yani yatay olarak bir satirda 28, dikey olarak da bir satirda 28 pixel vardir, dolayisyla toplamda 784 tane pixel var.
Benim amacim spesifik ozellikleri cikarmak olacak boylece farkli rakamlar arasindaki farklari bulabilecegim. Rakam olarak 1 ve 0 i dusunelim simdi. Farklari nedir? 1 rakaminda sadece duz bir cizgi ve ust tarafta bir cikinti var. Sifir rakami dis cercevesi dolu ama ici bos.
Simdi ben bu iki rakami birbirinden ayirmak icin ne yapabilirim? Mesela elimdeki 28x28 lik resmi dikey olarak 4 parcaya boldugumu dusunelim..
Simdi 1 rakami icin ne bekleriz? Siyah renkli pixellerin genelde hep ortada toplanmis oldugunu ve bir sol tarafindaki parcada da bir parca siyah pixeller olmasini bekleriz.
Peki 0 rakami icin ne bekleriz? 4 parcada da siyah pixellerin olmasini bekleriz ama 1 ve 4 parcada daha cok olmasini bekleriz ama her halukarda beyaz pixeller siyahlardan daha fazla olmali.
Not: Resim isleme yapilirken oncelikle resmi beyaz-siyah haline cevirmek gerekiyor, bu sayede isler kolaylasir.
Ustte kendimce bir sey pattern/sablon belirledim ve bunu kullanarak pixel saydirma islemi yapiyorum. Tum sifir rakamani barindiran resimler icin 4 parcalik resmin ortak pixel sayisi bulunur, ayni islemi 1, 2,3... rakamlari icin de yapilir boylece her rakam icinde farkliliklar cikarilir. Bu patterne feature deniyor ve birden fazla feature belirleyebilirsin. Mesela sen de yatay olarak 4 parcaya bol, ya da 20 parcaya bol ya da 28 parcaya bol.. Bunun gibi cesitli sekillerde features olusturup bunlarla o resmi ayirt edici ozellik olarak kullanabilirsin.
Featureslarimizi belirledikten sonra makine bunu belirli bir formata cevirip belleginde tutuyor. Simdi sira validation datasetini vermeye geldi. Validation setin amaci, parametrelerimizi optimize etmektir. Features larimizi ve parametrelerimizi degistirerek en iyi sonucu elde etmeye calisiriz.
Validation dataseti de ustteki resimler gibi cizilmiz rakam resimlediridir. Bu dataseti de bilgisayara veririz ve ayni parametrelerle bunun da ozellikleri cikarilir.
Suan elimizde tranining datasetinden elde ettigimiz features lar var ve validation datasetinden elde ettigimiz featureslar var. Simdi yapilan is ise validation den elde ettigimiz features larin hangi rakama ait oldugunu, training datasetinden ogrendigimiz ortak verilerle karsilastirarak bulabiliriz. Mesela dedigim gibi 1 rakaminin siyah pixelleri genelde orta noktalardadir, o halde validation datasetteki sadece ortada birikmis siyah pixeller var ise, makine bunu 1 olarak yorumlayacaktir ve sayisina gore bir dogruluk orani verecektir.
ornek olarak sonuc soyle cikmis..
Testlerde verilen parametrede bilgisayarin verdigi sonuc yukaridaki resimde. Burada goruldugu gibi
ilk sonuc 8 rakamini 8 olarak tahmin etmis (gercek rakam, tahmin edilen rakam seklinde yazili)
ikinci de ise 5 rakamini 2 olarak tahmin etmis (yanlis tabi)
3 rakamini da dogru tahmin etmis.. En sonda da dogruluk orani 1 uzerinden 0.81 imis. Yani %81 dogru tahmin etmis.
Yapilacak is parametrelerimizi ve featureslari degistirip bu orani yukseltmek. Max. dogruluk oranini yakaladimigizda atiyorum (%92), bu sefer de test datasetini kullanarak dogruluk oranina bakacagiz. Test veri tabanindaki resimler, validation datasetinden daha fazladir. Cunku bize cok farkli resimler gerekmekte boylece kurguladigimiz features ve parametrelerin dogrulugunu daha net gorebiliriz.
Training-validation da yapilan karsilastirma mantigi aynen training-test de de gecerlidir.
Not: Yukarida verdigim sonuc tablosu aslinda test datasetindeki dogruluklari gosteriyor ama ben senaryoyu bozmamak icin boyle anlattim.
Sonuc olarak bu bir machine learning islemidir ve NN (neural network kullanilarak cozulmustur)
Not: Features karsilastirma olayina detayli giremedim ama bunlari kitaplardan, makalelerden ogrenebilirsin. Boylece NN nin nasil calistigini gorebilirsin. Bunun haricinde HMM (hidden markov model) e de bak.
Faydali olmasi dilegiyle,
Ertan