Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Neural Network


Phoenixlin

Öne çıkan mesajlar

Hemen bir kaç başlık aşağıda java quicksort kodunu C/C++ dillerinden birine çevrilmesini istememin sebebi baş belam oldu bu. Gene tüm haftasonumu yedi ve elimde dişe dokunur hiç bir sonuç yok. Sayesinde uğraşmam gereken diğer ödev vs. ile de uğraşamadım.

Yüksek lisansa başladım ve çok sevgili okulumda benim istediğim dersler açılmadığı için Coursera'dan ve Google'dan öğrenebildiğim kadarıyla hocamın benden istediği işleri yapmaya çalışıyorum. Benden multilayer neural network(MLN) kodu yazmamı istedi bir iki hafta önce ve her şey o zaman başladı.

Yazdığım kod(matlab): Download linki

Matlab ya da Octave kullanarak açabilirsiniz. 16mblık boyutunun sebebi datasetten kaynaklı. Bir de datasete tabiri caizse tecavüz ettim; ama doğru dataları set içinden alıyor.
Kodu çalıştırmak için "training_app_main" ya da "train" fonksiyonlarından birini çalıştırmanız yeterli(ilkiyle çalıştırınca 30 kere experiment yapacak. İkincisiyle çağırırsanız sadece 1 kere).

Neural networkün amacı input dosyası içindeki querylerle documentlar arasındaki ilişkiye göre queryleri doclarla olan alakasına göre ranklemek(classification problemi işin aslı). Classification rankleri de şimdilik 1-2-3(alakasız, yarı alakalı, en alakalı).

Algoritması:

- Inputlar ve outputları al, input-hidden ve hidden-output layerları arasındak weightleri başlangıç için random ayarla.
- Iteration'a feedforward yaparak başla.
- Feedforward sonucu çıkan outputla, eldeki output dosyalarını karşılaştırıp bir error çıkart.
- Backpropagation'a başla.
- Backpropagation sonunda weightleri, yeniden düzenle ve bir sonraki iterationa geçip bu stepleri tamamla.

Matematiksel açıklama olarak da şunu kullandım:
http://www.doc.ic.ac.uk/~sgc/teaching/pre2012/v231/lecture13.html

Coursera'da yazdığım NN kodu ile hocamın benden istediği arasında, ve hatta gariptir internette bulduklarımın çoğuyla, bazı büyük farklar vardı(learning rate olmaması, fming diye bir fonksiyon sayesinde train etmesi vs). O sebeple o kod üstünde çalışmayı 2. başarısızlığım sonunda bıraktım :D

Problem:

Algoritmasından matematiksel formüllerine kadar her şey çok basit; ama kod bir yerde çok feci patlıyor. Patlama kısmını açıcak olursam; ilk iterationda classification error olarak yüksek bir değer çıkarıyor(normal olarak), örneğin 0.80(bu error 0-1 arasında). İkinci iterationda çat diye 0.3455 gibi sabit bir sayıya düşüyor ve bir dahaki iterationların hepsinde orada kalıyor. Bunun sebebi de training sette çok sevgili MLN kodum bütün her şeyi alakasız(1) ranklemeye meyilli. Ne yaptım ne ettiysem de bir inputu bile 2 ya da 3le rankleyemedim.

Learning rate'i değiştirdim fayda etmedi, hidden unitleri arttırdım fayda etmedi. Hatta kodu nerden baksam 6-7 kez oturup sıfırdan yazdım gene fayda etmedi. Weightlere el atınca bir oluyor; ama sonuçta bir sonraki iterationda weightler gene her şeyi alakasız yapacak şekilde ayarlanıyor. Problemin backpropagationda olduğunu düşünüyorum; ama formüllerin hiç birinde hata yok(gibi geliyor bana en azından =)). En son internette bir multilayer kodu bakınayım dedim ama bir faydası dokunmadı.
Belki buralarda neural network falan görmüş, bilgisi olan ve yaptığım hatayı hunharca yüzüme vuracak biri çıkar(çıksın hatta :()
Link to comment
Sosyal ağlarda paylaş

koda tam bakmadım ama bu tür problemler genelde weight ayarlaması yapıldıktan sonra, son halini node'larda güncellememekten oluyor. Yani sen güncelledim sanıyorsun ama weight hala initial değerde kalıyor. Sonraki iteration'da yine aynı ayarı yiyor. Adım adım weight'in ne olduğunu print eden bir fonksiyon yazsana.
Link to comment
Sosyal ağlarda paylaş

Cost function her iterationda converge ettiği için weightlerin eski değerlerinde kaldığını sanmıyorum. Sabit bir cost function plotu alsaydım haklı olabilirdin

Problem olarak, belki, söyleyebileceğim tek şey weightleri değiştirirken, değişim miktarı(delta_weight) çok büyük ya da çok küçük değerler alabiliyor. Örneğin benim initial weight değerlerim [-1, 1] arasında; ama ilk iterationda bir bakıyorum delta_weight olarak -140ler, 80ler falan gelmiş. Bunları düşürmek için learning rate'i düşürdüm(upload ettiğim kodda 0.0001 olması lazım şu an 0.000001'e düşürdüm örneğin); ama classification errorün sabit bir sayıda kilitlenip kalmasına etkisi olmadı. Learning rate'i düşürdükçe tek değişen şey sabit bir sayıya kilitlendiği iterationın ileriye sarkması.

Şunu da düşündüm hani acaba network data set'i öğrendiği için mi böyle yapıyor diye de; cost function converge etmeye devam ederken classification olayını öğrenmesi pek de mümkün gözükmüyor bana
Link to comment
Sosyal ağlarda paylaş

nn kodlaması boktan bir iş, debuggingi falan çok zor. öncelikle elindeki datanın gerçekten nn ile classify edilebildiğinden emin olman gerek. matlab'ın kendi ai pakedi var, orda neural network toolu var. bir onunla bi de weka'yla elindeki datanın doğru olduğunu ve nn ile classify edilebilceğini test et. hatta elin değmişken svm ve random forest la falan da dene.

eğer yapamıyorsan, inputları -1,1 arasına normalize edip, tab seperated csv formatında bi yerlere upload et kendi nn implementasyonumda deneyeyim.

ayrıca allasen matlabda nn implement edip nabacanız? paper mı yazacanız? hocana weka'yı, mahout'u, matlab ai tool u göster. en azından farklı dataları farklı classifier'larla kolayca test edin. sırf weka nın default parametreleriyle n farklı classifier'ı test edip conference paperı yazan insanlar var.

implementasyon yapacaksanız da atıyorum CUDA'da OpenCL'de en kötü multi core C++'da neyim yapın bi halta yarasın.
Link to comment
Sosyal ağlarda paylaş

"Öğrenmen için" cevabını aldıydım matlabın NN toolboxını kullanayım dediğimde =) Buralardan daha regression treelere, oralardan deep neurallere dalıcaz. Üçgen falan yapıcaz ondan sonra heralde

Problemimde galiba datasette yüz milyorlarca non-relevant(rank'i 1 olan) data olmasından kaynaklı. Daha 1'lerin sayısını azaltıp denemedim ama eğer sebebi oysa, boşa uğraştığım saatlerime yanacağım -_-
Link to comment
Sosyal ağlarda paylaş

Yazdığım kod tepede duruyuo download edilebilir şekilde zaten =) Derdim yazdığım kodun internetten bulduklarımdan benim görebildiğim haliyle 0 farkı olmasına rağmen, bütün dataları belli bir iterationdan sonra rank = 1 olacak şekilde ayarlaması. Kalkıp da bana çalışan bi neural network kodu verin demiyorum yoksa
(Quicksort(sequential olanı) kodunu yazdırmak istedim evet onda hata yok, ama yazan çıkmayınca hallettim bir şekilde =d)
Link to comment
Sosyal ağlarda paylaş

Eh yazıyım bari de googledan gelen olursa kodu bozukmuş bunun demesin =)

Problemim dataset'in içinde 2/3 oranında nonrelevant(rank = 1) dosya olmasından kaynaklıymış. Benim skynetin yandan yemişi kodum da tüm dataların outputunu 1'e çekip ben hayatı güzelleştiririm demiş. Haftalardır kodu düzeltmek için boşuna kürek çekmişim =/
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...