Pazartesi, Mart 31, 2008

Yüz Tanıma

Küçücük bir bebek sizin yabancı olduğunuzu bilip, ağlamaya başlıyor. Tanıdık bir yüz görünce yüzünde gülücükler açıyor. İnsan olarak yüz tanımak bize çok kolay geliyor. Yalnız neye istinaden tanıdığımızı açıklamaya kalkınca iş, içinden çıkılmaz hale geliyor. Yani
Fesübhanallah! Yüzün o küçük sayfasında nasıl gayr-ı mütenahi nişanlar derc edilmiştir ki, gözle okunur da nazarla, yani akılla görünmez.
diye boşuna denmemiş...

Daha yürümesini, konuşmasını bile bilmeyen bir bebeğin yapabildiğini, bilgisayarda yaptırtabilmek için neler yapılımış neler. Nice algorithmlar geliştirilmiş, nice programlar yazılmış, nice tezler hazırlanmış, ve niceleri de yapılmaya devam ediyor. Çünkü hala dört dörtlük bir metod bulunmuş değil.

Vakiti zamanında SERVO magazinde Seeing with OpenCv diye 5 bölümden oluşan bir makale yayınlandı. Bu makalede OpenCv'ye hızlı bir giriş ve yüz tespiti, takibi ve tanıma konuları işlendi. Tanıma işi için EigenFace metodu kullanıldı. EigenFace metodu yüz tanıma metodlarının başlıcalarından ve en eskilerinden birdir. Internette zahmet edipte aramayın. DerinDeliMavi'nin büyüük hizmeti Buyrun indirin

Cuma, Mart 28, 2008

FLTK 1.1.8 çıktı


Evet epeydir beklediğimiz FLTK'nın son versiyonu çıktı.
FLTK 1.1.8 in 1.1.7 den farkları için buraya , indirmek için şuraya bakın
Bu versiyonla 1.1.x serisi bitti artık UTF-8 eklenmiş haliyle FLTK 1.3 versiyonu geliştirilmeye başlanıyor. Üstteki resim FLTK 1.1.8 ile gelen demolardan biri olan Block Attacks oyunundan alınmıştır.

Pazartesi, Mart 24, 2008

Bu aralar neler yapıyoruz ?

Bu aralar abuk subuk yazılar yazmanın dışunda neler yaptığımızı merak edenler olabilir ?
Merak etmesenizde bir şey değişmeyecek ben yine de anlatacağım
  • Jardel Mustafa'ya beklediği ortayı yaptım. Pek matah birşey olmasada top artık onda
  • Daha önceden duyurduğumuz CodeBlocks'un kararlı sürümünü Hem windows hem de Linux altında kurdum
  • FannTool'un yeni versiyonu üzerinde çalışıyorum. Bir kaç kişiye yeni halini gönderdim. Eğer zahmet edipte fikirlerini beyan ederlerse bir kaç düzenleme daha yapıp yayınlayacağım. FANN'ın yeni versiyonundan bir haber yok. Ben de bu sefer 2.1 versiyonunu kullandım.
  • FLTK 1.1.8 rc3 yayınlandı kurup denedim gayet güzel, FLTK 1.1.8'in eli kulağında bekliyoruz.
  • OpenCv'yi linux'a kurmayı tekrar denemem lazım beceremedim bir türlü :(
  • Volkan ile yaptığımız projeyle ilgili bir çalışma var, Problem zihnimde tamamlandı kod yazmam lazım.
  • e-mail ile gelen sorularınızı bildiğimiz kadarıyla cevaplamaya çalışyoruz. Bu soru cevapları toparlayıp bir yazı haline getirmek lazım...

Cumartesi, Mart 22, 2008

Beni kör kuyularda hamaksız bıraktın !


Kim ne tarafa çektirse o tarafa yöneliyorum. İşte ayrı, Internette ayrı, Ev de ayrı, Derslerde ayrı bir insan oluyorum. Bir bölünüş bir parçalanış bu ...
Bilsem şimdi nerdeyim
Bir uzun seferdeyim
gücüm - ömrüm - yetene kadar
Nazarımda kıymetli olana insanlar değer vermiyor. Zannımca pek de önemli olmayan, ben olmasamda pek ala - hatta daha ala - olacak işlere, başkaları kıymet ve değer veriyorlar. Nazarımın ve zannımın peşinden gidemiyorum çünkü Rızkı kazanmak başkalarının verdiği değerden geçiyor. ve ilk parçalanış...

Ev başka bir alem. Hayatı hayatımla kesişmiş insanlar. Bir taraftan herkesin ayrı dünyaları var. Diğer taraftan Kesişmiş hayat çizgilerimizden gelen hayatımda istekleri ve dahi hakları var. ve bir parça daha...
Derin kederlere sal beni
Canın sağ olsunda kır beni
Hep sinin üstüne, hep benim üstüme. Bir nasihat, bir musibet, bir hastalık bir ölümle gelen idrak.
"Madem dünya fanidir demiyor alakayı kalbe"
biliyorum ama kalbimin alakasını kese biliyormuyum ? Tonla kitap okumuş, okuyor ve dahi okuyacak olmak ve bilmek kurtarıyor mu insanı ?
kahretsin bilmek böyle bir şey işte ; Bilmenin insanı kurtarmaya yetmediğini de biliyor insan

sözlerimin anlamı beni ürkütüyor
böylesine hazırlıklı değilim daha
bilmek buda ürkütüyor
gene de biliyorum
Kapanmazmış günahların açtığı yaralar insanda.

Saffeti kalbi, itminanı kalbi nerden, nasıl bulacağız ?

Günümüzde bütün bunlara ilaç olarak hamakta sallanmayı tavsiye ediyorlar.
Kör kuyularda hamağı nerden bulupta nasıl sallanacağız.
Hadi yaptık diyelim, kör kuyuda olduğumuz gerçeğini değiştiyor mu hamakta sallanmak.
Olsa olsa unutturuyor o da muvakkaten.
Yüreğimizdeki yaralar yüzümüzü karartmış , Yusuf yüzlüler dururken kim bize merdiven salar
...
Haber aldım ki, yarın yâd olacakmış bize yar
Ne büyük yâre ki kimler buna derman olacak
Bu büyük derd ü elemden kime şekva edeyim?
İşiten nâlemi, hep ben gibi nâlân olacak.

O şifa bahş olan envarını sen çeksen eğer
Bana kim nur verecek, kim bana Lokman olacak!
O temiz pâk nefesin, âb-ı hayatı bu çölün
Onu dûr etme ki her fert ona reyyan olacak
... *
Ve yine
ve yine
yine de biliyorum umutsuzluk yakışmaz bize...

ve kör kuyulardan sesleniyoruz

"Ey bu yerlerin hâkimi! Senin bahtına düştüm. Sana dehalet ediyorum ve sana hizmetkârım ve senin rızanı istiyorum ve seni arıyorum."

Senin kapından başka hangi kapıya gideyim?
Hangi kapı var?
Senden başka Rab yok ki dergâhına gidilsin.
Senden başka hak mâbud yoktur ki ona iltica edilsin."

Çarşamba, Mart 19, 2008

Tazarru ve Niyaz

...Biliniz ki, ben hilâf-ı âdet olarak, gizlemesi lâzım gelen, Rabbime karşı kalbimin tazarru ve niyaz ve münâcâtını bazan yazdığımın sebebi; ölüm, dilimi susturduğu zamanlarda, dilime bedel kitabımın söylemesinin kabulünü rahmet-i İlâhiyeden rica etmektir. Evet, kısa bir ömürde, hadsiz günahlarıma kefaret olacak, muvakkat lisanımın tevbe ve nedametleri kâfi gelmiyor. Sabit ve bir derece daim olan kitabın lisanı daha ziyade o işe yarar...

Ey Rabb-i Rahîmim ve ey Hâlık-ı Kerîmim! Benim sû-i ihtiyarımla ömrüm ve gençliğim zayi olup gitti. Ve o ömür ve gençliğin meyvelerinden elimde kalan, elem verici günahlar, zillet verici elemler, dalâlet verici vesveseler kalmıştır. Ve bu ağır yük ve hastalıklı kalb ve hacâletli yüzümle kabre yakınlaşıyorum. Bilmüşahede, göre göre, gayet sür'atle, sağa ve sola inhiraf etmeyerek, ihtiyarsız bir tarzda, vefat eden ahbap ve akran ve akaribim gibi, kabir kapısına yanaşıyorum.

O kabir, bu dâr-i fâniden firâk-ı ebedî ile ebedü'l-âbâd yolunda kurulmuş, açılmış evvelki menzil ve birinci kapıdır. Ve bu bağlandığım ve meftun olduğum şu dâr-ı dünya da, kat'î bir yakîn ile anladım ki, hâliktir gider ve fânidir ölür. Ve bilmüşahede, içindeki mevcudat dahi, birbiri arkasından kafile kafile göçüp gider, kaybolur. Hususan benim gibi nefs-i emmâreyi taşıyanlara şu dünya çok gaddardır, mekkârdır. Bir lezzet verse, bin elem takar, çektirir. Bir üzüm yedirse, yüz tokat vurur.

...

"El-aman, el-aman! Ya Rahmân! Yâ Hannân! Yâ Mennân! Yâ Deyyân! Beni çirkin günahlarımın arkadaşlıklarından kurtar! Yerimi genişlettir! İlâhî, Senin rahmetin melceimdir ve Rahmeten li'l-Âlemîn olan Habibin, Senin rahmetine yetişmek için vesilemdir. Senden şekvâ değil, belki nefsimi ve halimi Sana şekvâ ediyorum.

"Ey Hâlık-ı Kerîmim ve ey Rabb-i Rahîmim! Senin B... K... ismindeki mahlûkun ve masnuun ve abdin, hem âsi, hem âciz, hem gafil, hem cahil, hem alîl, hem zelîl, hem müsi', hem müsin, hem şakî, hem seyyidinden kaçmış bir köle olduğu halde, ... sene sonra nedamet edip Senin dergâhına avdet etmek istiyor. Senin rahmetine iltica ediyor. Hadsiz günah ve hatîatlarını itiraf ediyor. Evham ve türlü türlü illetlerle müptelâ olmuş.

Sana tazarru ve niyaz eder. Eğer kemâl-i rahmetinle onu kabul etsen, mağfiret edip rahmet etsen, zaten o Senin şânındır. Çünkü Erhamürrâhimînsin. Eğer kabul etmezsen,

Senin kapından başka hangi kapıya gideyim?
Hangi kapı var?
Senden başka Rab yok ki dergâhına gidilsin.
Senden başka hak mâbud yoktur ki ona iltica edilsin."

17. Lema 12. Nota'dan

Çarşamba, Mart 05, 2008

Code::Blocks 8.02 has been released

Fazla söze gerek yok Sonunda Nightly Builds den kurtuluyoruz. CodeBlocks IDE yeni kararlı sürümünü çıkardı.
Özellikleri için : Features
İndirmek için : Downloads
Linkte de görebileceğiniz gibi windows, Mac OS X, ve bilimum Linux sürümleri ( Ubuntu, Debian, Fedora ve OpenSuse üstelik 64 bit versiyonlarıda var.* ) için paketleri hazır kullanabilirsiniz.
Programcılık camiasına hayırlı olsun.

* Birileri de Pardus versiyonunu çıkarsada biz de Fedoraymış yok Suseymiş Yok Ubuntuymuş gezeleyip durmasak :)

Cumartesi, Mart 01, 2008

Yapay Zeka Tıbbın Hizmetinde 2

İlk yazımızdaki programı indirip inceleyen - şu an itibarıyla 4 kişi - ÇOK! sayıda insandan biriyseniz Programın YSA yı uygulayan kısımının Heasapla fonksiyonun içinde olduğu ve Normalizasyon kısımlarını saymaksak üç beş satırdan oluştuğunu görmüşsünüzdür. Peki bu işler bu kadar kolaymı ?
cevap veriyorum Hayır. İsterseniz o üç beş satırı yazabilmek için neler yapmamız gerektiğine bir bakalım.

YSA ya bir şeyler öğretebilmek için eğitim gerekli, Eğitim içinse veri.
Sınıflandırma yapmamız için etkili olan faktörler tespit edilir - Giriş değişkenleri - Sonuçta bu faktörlere göre bir sınıflara ulaşırız -Çıkış değerleri - İşte Bu giriş ve çıkış değerleri YSA nın giriş ve çıkış değerleri oluyor.
Peki YSA verileri doğrudan verebilirmiyiz ?
Malesef veremeyiz. YSA da katmanlar arasında veri iletişimi bir çeşit aktivasyon fonksiyonundan geçerek sağlanır. Bu fonksiyonlarda tipine göre (0 - 1 ) yada (-1 1) aralığında sonuçlar verir. Bu durumda bizim verilerinizi bu aralıklara çekmemiz lazım. Peki Bu normalizasyon işlemini nasıl yapacağız. Değişkenin en küçük (min) ve en büyük (max) değerleri tespit edilir ve bir aralık hesaplanır
range = max-min
Biz bu uygulamamızda ( 0 - 1) aralığını kullandığımızdan normalizasyon formülümüz şöyle oluyor.
Norm(x)= (x-min)/range
ufak bir tavsiyede bulanayım değişkenin veri kümesinden tespit ettiğimiz min max değerlerini aralığı hafifçe açacak şekilde genişletirseniz daha iyi olur. bu arada sizede ufak bir ev ödev i! (-1 - 1) aralığında normalizasyon için gereken formülüde siz bulun.

Giriş değişkeni eğer mantıksal bir değişkense, (doğru-yanlış) gibi sadece iki değeri içeriyorsa normalizasyonu gayet kolay değerin biri 0 diğeri 1 olarak YSA ya bildirilir.

Peki değişken eğer sayısal değilse ne yapacağız mesela bizim örneğimizde "chest pain type"
göğüs ağrısı tipi diye bir değişken var ve bu değişken {angina, abnang, notang, asympt} gibi 4
değişik tipten oluşuyor. Bu durumda yapacağımız şey bu tip değişkenleri mantıksal değişkenlere
bölmek yani chest pain type değişkenini 4 adet mantıksal alana yayıyoruz eğer ağrı tipi
angina ise 1 0 0 0 yok notang ise 0 0 1 0 gibi.
Şimdi gelelim verilerimize verilerin aslı aşağıdaki gibi bir matriste tutuluyor

60, male, asympt, 140, 293, fal, hyp, 170, fal, 1.2, flat, 2, rev, sick.
37, male, notang, 130, 250, fal, norm, 187, fal, 3.5, down, 0, norm, buff.
64, male, angina, 110, 211, fal, hyp, 144, true, 1.8, flat, 0, norm, buff.

bu matriste 14 sütün var ilk 13 ü giriş değişkenleri son sütün çıkış değişkeni. fakat biz bu
değişkenleri YSA ya aktarabilmek için normalize ederken sütün sayımız 25 e çıkıyor nasıl mı oluyor bakınız


ANN Dizaynı

| Inputs
| ------------------------
| -- 1. age : 1 sütun
| -- 2. sex : 1 sütun
| -- 3. chest pain type (4 values) : 4 sütun
| -- 4. resting blood pressure : 1 sütun
| -- 5. serum cholestoral in mg/dl : 1 sütun
| -- 6. fasting blood sugar > 120 mg/dl : 1 sütun
| -- 7. resting electrocardiographic results (values 0,1,2) : 3 sütun
| -- 8. maximum heart rate achieved : 1 sütun
| -- 9. exercise induced angina : 1 sütun
| -- 10. oldpeak = ST depression induced by exercise relative to rest : 1 sütun
| -- 11. the slope of the peak exercise ST segment : 3 sütun
| -- 12. number of major vessels (0-3) colored by flourosopy : 4 sütun
| -- 13. thal: ( normal, fixed defect,reversable defect) : 3 sütun
25 giriş

| Outputs
| ------------------------
| Absence (1) or presence (2) of heart disease 1 sütun

1 Çıkış

evet Elimizdeki 180 adet veriyi bin bir meşakkatle normalize ettiktten sonra ikiye ayırıyoruz.
155 adedi eğitim için 25 adedi test için. ve verileri FANN kütüphanesinin standartına uygun olarak kaydediyoruz. - FANN kullanımı yazılarım -

Bundan sonrasını FannTool'u kullanarak yapacağız. FannTool'u çalıştırın ve Eğitim için Training
Data File olaraka "heart_train_data.dat" yükleyin Artık Keyfinize ve tecrübelerinize göre eğitim denemelerinini yapabilrsiniz.
ilk etapta saklı katman sayısı (# of Layer) ve bu katmanlardaki hücre sayılarını (Hid Layer 1 ...) ayarlaya bilirsiniz.
İsterseniz Eğitim metodunu (Detect Optimum Training Algorithm) ve Aktivasyon foksiyonlarını
(Detect Optimum Activation Functions ) sizin için seçmesini istiyebilirsiniz.

Artık Train -> Normal diyerek YSA eğitimini başlata bilirsiniz. Eğer Belirlediğiniz hata değerine yada altına ulaşıldığında Eğitilmiş YSA yı kaydetmek için sizden bir dosya ismi istenir. Bir isim verip kaydedin .net uzantılı olarak kaydetmeniniz iyi olur.

İşimiz bittmi ? ellbette hayır. Biz boşunamı test datası oluşturduk. Testing Data File olarak test dosyamızı yüklüyoruz. Test ANN düğmesine basıyoruz. Bizeden eğitilmiş YSA dosyası isteniyor kaydettiğimiz .net dosyasını seçiyoruz. Sonuçta bize test verileriyle ulaşılan bir MSE (ortalama hata ) değeri hesaplanır.
Bu değer eğer çok yüksekse. Bizim YSA eğitimi iyi olmamış demektir. Tabiri caiz ise YSA mız Eğitim verilerini ezberlemiştir. Muhtemel sebeplerine gelirsek Düşük veri sayısı veya yüksek hücre sayısı veya istenen hata değerinin çok düşüklüğü....
Ama istenen ezberleme değil genellemedir. Böyle durumlarda eğitimi değişik kombinasyonları deyerek tekrarlamak gerekir.
Eğitimin bir diğer metoduda Train->Cascade dir bu metodda YSA nın Saklı katmanlarını kendisi dinamik olarak belirler. Siz sadece kullanabileceği maksimum hücre sayısını belirtebilirsiniz. Bu değeri de FannTool Saklı katmanlardaki hücre sayılarını giriş ve çıkış hücre sayılarına ekleyerek hesaplar.

Bütün bunlardan sonra Eğitimizi tamamlayıp testimizi yapıp sonucunda tatminkar hata değerine ulaştıktan sonra yapılacak şey basit bir arabirim yazmaktırki onuda ilk yazımızda verdik.

Sizinde gördüğünüğüz gibi üç beş satırın arkasında epey bir emek var. İnşallah FannTool 'un ilerki versiyonlarında Veri işlemeyi nispeten kolaylaştıran bir kısımı da eklemeyi planlıyorum.
Artık nasip...