LinkedIn FriendFeed Twitter

Sosyal Ağlarda Buluşalım

by Ordinaryus 7. February 2010 01:27

Son zamanlarda sosyal ağlar o kadar birbiri ile içiçe olmaya başladı ki bu trendi takip etme ihtiyacını kendimde gördüm. Ordinaryus benim için sadece bir rumuzken artık googleda veya başka kaynaklarda benim ismimden daha tanınır olmaya başladı =)

Artık biraz daha kendimden bahsetmenin yerinde olacağını düşünmeye başladım. Zaten açmış olduğum friendfeed, twitter, LinkedIn gibi hesaplarımı blogumda da paylaşmaya ve buradan da takip edilmeye başlamayı umuyorum.

Sosyal ağlar demişken internette görmüş olduğum sosyal ağlarla alakalı resim hoşuma gitti. Sosyal ağların algoritması olarak düşünülebilecek bir gösterim olduğundan paylaşmak istedim.

socialnetworkingalgorithm

Tags:

Hopfield ağı kullanarak çağrışımlı bellek tasarımı

by Ordinaryus 7. February 2010 01:03

HOPFIELD AĞI

Hopfield ağları birim gecikmeli ve nöron sayısı kadar bulunmakta olan geri besleme yolları üzerinden aktarılan bir ağ türüdür. Hebb öğrenme kuralına uygun olarak çalışmaktadır. Bu ağın temsili aşağıdaki şekilde gösterilebilmektedir.

clip_image002

Hopfield ağı temsili

Hopfield ağının yapısından ziyade kullanım alanları ile önümüze çıkmaktadır. Genellikle çağrışımlı bellek tasarımı ve optimizasyon uygulamalarında örnekleriyle karşılaşabiliyoruz. Bunun nedenlerini inceleyecek olursan öncelikle ağ üzerindeki değerlerin neler temsil ettiğini ve bunlar üzerinden ulaşmaya çalıştığımız değerlerin neler olduğunu anlamaya çalışalım.

Bunu açıklamaya çalışırken yapılacak uygulamanın da bir parçası olduğundan ötürü pattern recognition konusu ile alakalı örnekler daha fazlalıkla verilecektir. Öncelikle hopfield ağında depolanması istenen desenler kullanılarak yaratılan bellekte sistemin bulunabileceği lokal minimum değerler, eğer noktaları ve limit çevrimler bulunmaktadır.

Burada sistemimiz için oluşturulmakta olan desendeki veriler doğrudan arama uzayımızda temsil edilmektedir. Bunun için örnek olarak yapılacak uygulamada 5x5 boyutlarından desenler kullanılmaktadır. Bunların temsil edilmesi 25 boyutlu bir uzay üzerinden mümkün olmaktadır. Sistemin aldıkları değerler doğrultusunda bu sistemde ulaşabileceği noktalar yukarıda bahsettiğim limit çevrimler veya denge noktalarından birisi olabilmektedir. Lineer sistemlerde bu denge noktaları sayısı tek olduğundan eninde sonunda buraya ulaşılabilmektedir.

Ancak tek bir noktaya yakınsamak bizim sistemimiz için yeterli olmamaktadır. Burada hedeflenen birden çok denge noktasından birine ulaşılması ve bununda bizim başlangıç değerimize bağlı olarak varmak istediğimiz nokta olmasıdır.

Dinamik sistemlerde elde edilecek bu denge noktalarını belirlememiz mümkündür. Konuyu kontrol problemi olarak inceleyecek olursak sistemin eninde sonunda bir kararlılığa ulaşmasını istemekteyiz. Denge noktalarının sayısının arttırılmasında ise sistemin derecesini büyütmek bir yöntem olabilmektedir. Aslında bir bakıma sistemimizin kararlılığa ulaşabileceği ve bizim için amaç ölçütü olabilecek noktaların sayısı arttırmış olmaktayızdır.

Hopfield çevrimi içerisinde başlangıç değerlerinden itibaren adım adım bu denge noktalarına yaklaşılmaktadır ve sistem üzerinden belirlenen bir denge noktasında son bulunmaktadır. Bu noktalar eğer tanınmak istenen desenler olursa bunlara benzeyen desenler başarılı bir ağ üzerinde bu noktaların çekim alanlarına girmektedirler.

Hopfield modellerinin birde optimizasyon alanında nasıl kullanıldığını inceleyecek olursak amaçlarımız bir miktar değişmektedir. Burada bizim sistemimiz için birden fazla denge noktası bulunmaktadır ancak bunlardan en iyisini seçebilmek bizim hedefimiz olmaktadır.  Kontrol sistemlerinden genellikle bir denge noktasına doğru yaklaşılır ve bunun hedef fonksiyonlarımıza uyup uymadığına bakılmaktadır. Eğer enerji fonksiyonlarımızdan elde edilen değerler optimizasyon şartlarımıza uygun değilse arama uzayından rastgele bir nokta seçilerek arama yeniden gerçekleştirilmektedir. Ancak bizim optimum çözümümüzün çekim alanı diğer denge noktalarınınki kadar geniş değilse optimizasyon kısıtları altından sıkışmaktayızdır. Bu nedenle rastgele değerler olmayan arama uzayını daha başarılı şekilde arayacak ve lokal minimumlara düşüldüğünde sistemi buradan kurtaracak çözümler aranması gerekmektedir.

Hopfield bunun için kuantum mekaniğindeki spin camları ve yapay sinir ağları arasında benzerlik kurmuştur. Kısaca Spin camlarındna bahsedecek olursak kuantum mekanik bir sistemde bulunulabilecek belli kuantum seviyeleri bulunmaktadır. Manyetik bir sistemdeki dipol momentlerinin yönelimi için bu yukarı ve aşağı olmak üzere 2 olmaktadır. Bizim desenimizde de binary olarak bakarsak 0 ve 1 ağ üzerindeki temsilleri için bakacak olursak -1 ve 1 olmaktadır. Manyetik sistem içerisinde her bir yönelim belirli bir enerji gerektirmektedir ve bu enerjiler pozitif olup JijSiSj şeklinde bulunmaktadır. Enerjinin her zaman için pozitif olduğunu söylemiştik o zaman momentlerin yönlerinin aynı veya ters olmasına göre J değerleri negatif veya pozitif olmaktadır. Bunların bizim sistemimizdeki karşılıklarının ağırlıklarımız olduğu düşünülmektedir. Bu sayede bir sistem için enerjini maksimumda tutacak denge noktaları elde edilebilmektedir.

 

Hopfield Ağı Kullanarak Çağrışımlı Bellek Tasarımı

 

Uygulamamızda çeşitli desenleri hatırlayacak ve bu desenler haricinde verilen değerler için sistemin denge noktalarına yakınsayacak bir sistem elde edilmek istenmektedir. Ağımızın alacağı parametreler sistem üzerinde tanıtılması istenen desen sayısına bağlı olarak seçilmektedir. Küçük networkler üzerinde fazla sayıda desen tanıtmak mümkün olmamaktadır bunun yanında büyük bir ağ üzerinde ise istenenden fazla denge noktası elde edileceğinden her zaman için bizim hedeflediğimiz denge noktasına gitmeyebilir farklı denge noktalarında sonlanması mümkün olur.

Bu nedenle örneğimizdeki pattern büyüklüğü ve buradan elde edilebilecek belleğin öğrenme kapasitesi arasındaki ilişkiyi incelemekte fayda olmaktadır.

 

clip_image004

Network büyüklüğü ile kapasitenin ilişkisi

Hopfield ağı ile saklama kapasitesi arasında lineer bir ilişki olduğu söylenmektedir. Ancak bunların içerisinden fazlalıklı bellek olmasızın ne kadar desen saklanabileceğine aşağıdaki ifade ile ulaşabilmekteyiz.

clip_image006

Bizim örneğimiz için inceleyecek olursak.

Mmax = 3.88 olmaktadır yani yaklaşık olarak 4 deseni hatasız olarak tanıtmamız mümkündür. Ancak bu ilişki için verilen diğer bir ifade göre ise p > 0.38*n koşuluna uyması gerekmektedir aksi takdirde bellek anlamsızlaşmaktadır. Burada n bizim bir deseni temsil ederken kullandığımız piksel sayısı, p ise mümkün olan maksimum desen sayısını vermektedir.

 

Örüntülerin Belirlenmesi

 

Örüntülerin seçilmesi esnasında belirlenen net bir strateji olmamakla beraber birbirlerine benzerlikleri en az olan patterlar seçilmeye özen gösterildi. Burada bir patternda kenarlar seçilmişse diğerlerinde orta bölgeden desenler alınmaya çalışıldı ve sonuç olarak aşağıdaki gibi 5 farklı desen oluşturuldu.

clip_image008

 

               

Ağın Tasarımı

 

Ağın tasarımı sırasında belirli kriterler etkili olmaktadır bunların arasında kullanılan hücre modeli ve belleğin oluşturulması sırasında kullanılan ağırlıkların hesaplanma yöntemidir.

Uygulamada kullanılan desenler için 5x5 boyutlarda görüntüleri işleyebilmek için 25 adet nöron kullanılmaktadır ve bu nöronların modeli McCulloch-Pitts modeline uygun olarak seçilmiştir.

Ağırlıkların Hesaplanması

 

Ağırlıkların hesaplanmasında öncelikli olarak performansı etkileyeceği düşünülerek ağırlık matrisinin simetrik olduğu bilgisini ve diyagonal hatta tüm değerlerin sıfır olduğu göz önüne alınarak katsayılar hesaplandı. 

Uygulama içerisinde ağırlıklar her iki şekilde de hesaplandı ve önemli performans farkları gözlendi. Ağırlıkların iteratif olarak belirlendiği yöntem en iyi sonuçları vermektedir. Bunun nedenleri üzerine yorumlar yapılacaktır. Bu yöntemlerden daha az başarılı olan yöntem farklı örüntülerin iç çarpımlarının kullanıldığı yoldur. Bunun hesaplanmasında aşağıdaki ifade kullanılmaktadır.

clip_image010

Burada i ve j birbirine eşit olmamak üzere hesaplama yapılmaktadır. P değeri öğretilmek istenen desen sayısına xi  değerleri ise kullanılan desendeki değerlere karşılık düşmektedir.

Bu yöntemde görülen problem oluşturulan ağırlık matrislerinin belleklilik işlevini çok iyi yerine getirmediğidir. Buradan elde edilen ağırlıklar daha sonra uygulamada kullanıldığında artık belleklere veya farklı girişler için aynı çıkışlar sonlanmaktadır.

clip_image012

Ağırlıkların iç çarpımlar yoluyla hesaplandığında elde edilen sonuç

 

Yukarıda görüldüğü üzere sisteme verilen patternlar için başarılı sonuçlar alınamamıştır. Bunların nedenleri arasında bu şekilde elde edilen ağırlık matrisinde her deseni tanıtmanın mümkün olmaması olabilir. Belirli desen takımları için başarılı olabilmektedir. Bu da iç çarpımların toplamları sonucu elde edilen w değerlerinde desenler arasındaki korelasyonun sonuçlarındandır.

clip_image014

Ağırlık matrisi

Bu yöntem sonucu hesaplanan ağırlık matrisini görselleştirecek olursak aşağıdaki gibi bir sonuç elde edilmektedir. Burada matrisin simetrik yapısını görmek mümkündür.

Sisteme hatırlatılmaya çalışılan desenlerin haricinde bir desen verildiğinde ise bunu benzer şekilde verilen desenlerden birine benzetmektedir. Burada yatay çizgilerden oluşan desenin çekim alanının büyük olması sonucu verilen desenlerin buna benzetildiğini düşünmekteyim.

clip_image016

 

Diğer bir yöntem ise sonuçların oldukça başarılı olarak gözlenmiş olduğu iteratif bir denklem ile yakınsayarak bulunduğu yöntemdir. Ağırlıkların aşağıdaki denkleme uygun olarak hesaplanması saplanmaktadır.

clip_image018

Yukarıdaki ifade de α değeri 0< α<1 arasında seçilmekte olan bir değer olmaktadır. Bu sistemin yakınsama hızını etkileyen bir kriter olmaktadır.

Bu ifade sonucu belirlenen ağırlıkların görsel hali aşağıdaki şekildedir.

clip_image020

Denklem ile hesaplanmış ağırlıklar

Burada öğretilmek istenen desenler için w değerleri bulunmaktadır. Bu ifadede w değerleri başlangıçta [-1, 1] aralığından seçilmektedir. Daha sonra yakınsama sonucu kullanılacak değerler elde edilmektedir. Bu yöntemle verilen sistemlere ilişkin çıkışlar başarılı şekilde hatırlanmıştır.

clip_image022

Ayrıca bozularak verilen desenler için de sonuçlar aynı başarıda olmaktadır. Burada 1. Desenin bozulması sonucu elde edilen aşağıdaki görüntü ve karşılığında elde edilen sonuç aşağıda yer almaktadır.

clip_image024

Aynı zamanda farklı değerler için test edildiğinde farklı durumlarda oluştuğu gözlenmiştir. Burada görülen ilk desen için sistemin limit çevrime girmiş olduğudur. Aşağıdaki şekilde görüldüğü üzere sistemin 2 farklı denge noktası etrafında değişmektedir. 

clip_image026

Limit Çevrim

Ayrıca verilmiş olan her desen bizin bellekte anımsamamızı istediğimiz desenlerden olmayabilmektedir. Bunlara artık bellek denmektedir. Tasarladığımız sistemde öğretmekte olduğumuz desen sayısı haricinde hala bellek bulunmaktadır. Bu belleklerde belirli desenler için oluşmuştur. Aşağıda bunlardan birinin örneğini görmek mümkünüdür.

clip_image028

Artık bellek

Ayrıca oluşabilecek bir diğer durum ise öğretilen desenlerin simetriklerinin de denge noktası oluşturmuş olmasıdır. Bununda bir örneği aşağıda yer almaktadır. Burada elde edilen kareli desenin tersi bizim anımsatmak istediğimiz desenlerden birisidir.

clip_image030 

Tags: ,

Yapay Zeka | Neutral Networks

Çok Katmanlı Yapay Sinir Ağları ile Sistem Tanıma

by Ordinaryus 5. February 2010 21:08

Perceptron ile alakalı yazımda belirli dönüşümler kullanarak sorunun çözülmesi gerekmekteydi ve sistem lineer olarak ayrıştırılamayan bir sistem olduğundan Rossenblat katmanı kullanarak sistemin ayrıştırılabilir bir hale getirilmesini sağlayacak uygun bir dönüşüm bulunması gerekmekteydi.

Biz bu sistemde öncelikli olarak böyle bir ekstra katman yaratmak ve bunların aktivasyon fonksiyonlarını belirlemek zorunda değiliz. Bunun çok katmanlı algılayıcımız zaten bizim için yapmaktadır. Bizim burada sistemin performansını etkileyecek doğru sayıda giriş çıkış, öğrenme katsayısı belirlemek gibi görevlerimiz bulunmaktadır. Bunun dışında sistem zaten eğitim sonrasında bu verileri ayırabilir duruma gelmektedir. Burada önemli kriterlerden biri sistemin sorudaki 25 noktaya özel olarak eğitildikten sonra ezberleme ile mi yoksa genelleme ile mi sonuca ulaştığını tespit etmektir.

Buradaki sistem içinde birçok katmanlı algılayıcı tasarlanmıştır. Sistemin 2 adet girişi noktaların koordinatlarını temsilen, 2 adet çıkış ise hangi sınıfa mensup olduklarını temsil etmek amacıyla konulmaktadır. Burada elemanların belirtilen eğitim kümesi için eğitilmesinden sonra giriş değerleri olarak da [-2 2] Aralığından rastgele noktalar seçilerek test yapılmıştır. Burada sistemlerin çıkışlarından her 2 değer içinde verdikleri tepkilerin büyük olarak görülmektedir. Burada en büyük olan değer seçilmeye çalışıldığından sistemden uygun çıkışlar alınmaktadır.

Aşağıda sıralı olarak verilmiş olan benzer bir dikdörtgene ait verilerden elde edilmiş olan bir test sınıfı için çıkışlar eğitim kümesindekine uygun olarak verilmektedir. Burada verilerin sıralı dolması giriş değerleri içinde benzer bir sırada verilmesinden kaynaklanmaktadır.

clip_image002    

Şekil 5: Sistemleri ayart etme başarısı

 

Çok Katmanlı Ağ ile Tanıma  

Çok katmanlı ağımızı ilk soruda da olduğu genellikle sınıflandırma problemleri üzerine kullandık ancak yapay sinir ağlarının pek çok işlevi ve farklı uygulama alanları da bulunmaktadır. Bunların başlıcalar tanıma,  sınıflandırma, eğri uydurma vb.

Yapay sinir ağları kullanılarak yapılan sistemlerin birine örnek verecek olursak. Genellikle görüntü işleme uygulamaları beraber kullanılmaktadırlar. Bunlar içerisinde face recognition uygulamaları fazlasıyla bulunmaktadır.

Burada sisteme eğitim amaçlı olarak belirli kişi veri tabanlarından örnek görüntüler yüklenmektedir. Bunların mümkün olduğunca farklı ortam şartlarında ve kişiyi en iyi temsil edecek şekilde seçilmesi önemli olmaktadır. Bu sistemin fazla sayıda fotoğraf ile eğitilmesi sonucunda yüz görüntülerine özel bir ortalama yüz elde edilebilmektedir. Yöntemlerden en bilineni ve uygulaması en basit olanı ortalama bir yüz (eigenface) elde etmek ve bunun üzerinden diğer kişilerin bu ortalamaya olan uzaklıklarından yerlerinin belirlenmesidir. Sistem bu şekilde eğitildikten sonra yeni bir görüntü geldiğinde ortam şartları (aydınlanma, face pose, gestures) değişmesine rağmen yüz için belirlenen featurlar eşleştirilerek eldeki veri tabanında en yakın sonucu geri getirmektedir. Burada sistemin tanıma kriterleri biraz daha sıkı tutularak yanlış sonuçlar alınması da engellenebilmektedir.

Bizim sistemimizde de farklı karakterler için eğitildikten sonra aslında sistemin girişlerine karşı verilen çıkışlara bakıldığından tasarlanan sistemde o karakteri temsil eden çıkışın değerinin en yüksek olması beklenmektedir. Bu şekilde sistem girilen veriye en yakın çıkışı veren sistemi bir bakıma bize geri vermiş olmaktadır.

Sistem tanıma problemi üzerine ilgilenirken yapmış olduğumuz ve başarıma etkiyen parametreleri tekrar inceleyelim. Burada ağın nasıl tasarlandığı, eğitim ve test kümelerimiz bizim için önemli olmaktadır.

Eğitim kümesinin seçiminde belirli bir başlangıç koşulu için takip eden işaretler ve bunların sistem üzerindeki hatanın minimumlanması ile ağ katsayılarını güncellemesi ile gerçeklenmektedir. Daha sonra bu verilerin devamlılığı sağlanır ancak bu kez aradaki geri besleme hattı ortadan kaldırılmaktadır. Ancak bu zamana kadar sistem öğrenildikten sonra başarılı bir şekilde veriler birbiri ile uyuşmaktadır.

clip_image004

Şekil 6: Sistemin Eğitim ve test düzenekleri

 

Eğitimde sistemin takip etmeye başlamasına kadar geçen süre içerisinde ağırlıklar sürekli güncellenerek sistem öğrenilmektedir. Daha sonra bu sistemin verileri ile uygun sonuçlar elde edilmeye başlanmıştır.

Test aşamasına gelindiğinde ise takip eden veri dizgisi kullanılmıştır ve bunlar üzerinden kıyaslama yapılıp geri besleme yolu ortadan kaldırılmıştır.

Sistemin tanınmasının başarımı belirlemede bir diğer kullanılan yöntem ise durum portresinin oluşturulmasıdır. Bu sistem için biz eğitim ve test süreçlerinde durum portrelerine bakacak olursak (şekil 7).

clip_image006

Şekil 7: Billings sistemi durum portresi

Billing Sistemi

Billing sistemleri dinamik bir sistem üzerinde katsayıların güncellenmesine dayalı olarak çalışan bir sistemdir ve sistemin taklit edilmesi için kullanılmaktadır.

Borsada özellikle zaman serileri analizi önemli bir rol oynamaktadır. Geçmiş verilerden gelecekteki değerleri tahmin edebilecek bir sistem yapılması üzerinde özellikle önemli çalışmalar sürmektedir. Bunların başında Monte-Carlo modeli, Markov serileri yer almaktadır. Yapay sinir ağları ile de sistemlerin eğer bir modele uydurabiliyorsak (Borsa örneğinde böyle bir model kurmak mümkün değildir.) bunun için gelecek dataların tahmin edilmesi üzerine bir sistem kurulabilmektedir.

Buradaki örneğimizde verilen sistem modeli için gelecek değerlerin tanımlanması sağlanabilmektedir. Öncelikle seçilen whitenoise genliği bizim için önemli olmaktadır. Bunun dışında sistemin başlangıç değerlerinin belirlenmesi de önemli bir kriterdir.

Uygulama çalışırken başarılı değerler yakalanabilmiştir ancak burada sistemin başarımında etkili parametrelerin seçimi önemli olmaktadır.     

clip_image008

Şekil 8: Sistemin eğitim fazı

Tags: , ,

Yapay Zeka | Neutral Networks

Rosenblatt’ın Genlikte Ayrıştırıcısı

by Ordinaryus 5. February 2010 21:05

Problemin Tanımı

Burada verilmiş olan verilerin lineer ayrıştırılıp ayrıştırılamadığı kontrol edilecektir. Bunun sonucunda ortaya çıkan sistemin lineer ayrıştırılamaz olduğu durumda bunun üstesinden nasıl gelinebileceği üzerine çalışılıp uygulamalı olarak bu ayrıştırma işlemi gerçekleştirilecektir.

 

Verilerin incelenmesi

Öncelikle verilen verilerin önceki soruda kullanmakta olduğumuz Perceptron içerisinde eğitime tabi tutulması yoluyla lineer ayrıştırılıp ayrıştırılamayacağı anlaşılabilmektedir. Ancak belirli bir iterasyon değeri sınır konmaktadır. Bu sınır için önceki sorudan elde ettiğimiz deneyimlerle 100 değerini belirledik.

Verilen noktalar için 100 iterasyon sonucunda sonuç alınamadı demek ki veriler lineer ayrıştırılabilir değildirler. Bunu aslında görmekte oldukça kolaydır. Aşağıdaki grafite noktaların dağılımları açık şekilde seçilmektedir.

clip_image002

Bu tarz bir sistem 2 boyut üzerinde alışılmış şekilde bir doğru denklemi bularak ayrılamamaktadır. Bu durumda daha farklı şekilde probleme bakarak çözme yoluna gitmemiz gerekmektedir.

Burada boyut dönüşümü yaparken göz önüne almamız gereken parametreleri belirtecek olursak

  • ·         Farklı gruplara ait noktaların kohezyonu
  • ·         Boyut sayısı

Burada ilk olarak bahsedilmek istenen farklı noktaların dönüşüm sonucu lineer ayrıştırılabilir hale getirilmesinin yanında bunların birbiri ile olan yakınlıklarıdır. Lineer ayrıştırılabilir olmanın yanında eğitim sonucunda elde edilecek sonucun ne kadar test kümesinde iyi sonuç verdiği de önemlidir. İlk soruda da incelediğimize göre farklı gruplara ait noktaların birbirinden ayrık olmaları sonuçlarımız açısından iyi olmaktadır.

Boyut sayısı da önemli bir parametredir çünkü işlem yükü bununla orantılı olarak artmaktadır. Eğer işlerimizi 2 boyutta çözebilirsek bunun avantajları ayrı olmaktadır. Eğer daha üst boyutlara düşürmek gerekirse bu durumda dezavantajlar görülmektedir. Özellikle İmge İşleme uygulamalarında boyut sayısı fazla olmaktadır. Bunun düşürmek önemli olduğundan bu alanda çalışmalar yapılmaktadır. Bu çalışmalar arasında özniteliklerin daha uygun seçilmesinden, bu özniteliklerin oluşturduğu uzaydaki manifoldların nasıl boyut düşürme ile basitleştirilebileceği üzerine çalışmalar yapılmaktadır.

Bizim uygulamamız içinde noktaların 2 boyutta ve 3 boyutta nasıl lineer ayrıştırılabilir hale getirileceklerini inceleyeceğiz.

 

3 Boyutta Lineer ayrıştırılabilir yapı

Burada kullanabilecek çok farklı miktarda yapı vardır bunların içinden belirlenecek dönüşümün kolaylığı ve işlem yükü göz önünde bulundurulabilir.

Benim bu soru içerisinde kullandığım dönüşümde X ve Y koordinatlarını kullanarak clip_image004 şeklinde bir dönüşüm ile 3. Boyuta ait Z koordinatı elde edilmeye çalışılacaktır. Burada 2 boyutta ayrılamayan sistemin 3 boyutta ayrılabilir olmasında Z ekseninde var olan bir değişimle sağlamak mümkündür.

Burada clip_image006şeklinde bir yapı kullanılabilir.

Bunun sonucunda noktalarımızın 3 boyuta transform edilmiş halleri ise

clip_image008

Bu 3 boyutta dönüşüm yapmak için kullanılabilecek yollardan sadece birisidir. Bunun gibi pek çok dönüşüm ile sistemin ayrılması mümkündür.

Bu uygulamada ek olarak eklenen katmandaki nöronların aktivasyon fonksiyonunda X ve Y parametrelerinin korunması uygun görülmüştür. Bunun dışında yeni eklenen fazladan boyut için olan parametrede ise X ve Y koordinatının kareleri toplamı olacak şekilde seçilmesi uygun görülmüştür.

clip_image010
clip_image012
clip_image014

 

2 Boyutta Lineer ayrıştırılabilir yapı

İki boyutta lineer ayrıştırılabilirlik önceki yapıdakinin aksine boyut dönüşümüne gerek kalmaksızın sistemin lineer ayrıştırılmasını sağlamaktadır. Burada sistemler arasında bir dönüşüm bulunması diğer sistemlere daha zor olmaktadır. Bu nedenle önceki yöntem kadar tercih edilmez ancak EXOR problemi ve bizim örneğimiz gibi meşhur örneklerde 2 boyutta dönüşüm kullanılması daha kolay olmaktadır.

Burada benim önerdiğim dönüşüm kutupsal koordinatlarda clip_image016 gibi bir yapı uygulamaktır.

 

clip_image018

clip_image020

Bu dönüşüm sistem üzerinde uygulandığında ise;

clip_image022

Burada görüldüğü gibi sistemi 2 boyut üzerinde de ayırmak mümkün olmuştur ancak her zaman bu tarz bir dönüşüm bulmak mümkün olmayabilir. Burada sistemin kutupsal koordinatlara geçirilmesi ve değişkenlerinin açı ve uzaklık cinsinden yazılması sağlanmıştır.

clip_image024
clip_image026

Bu ifadeler ile dönüşüme sokulan dataların lineer olarak ayrıştırılmış hali:

clip_image028

Tags: , ,

Yapay Zeka | Neutral Networks

Yapay Sinir Ağları OCR (Optical Character Recognition) Uygulaması

by Ordinaryus 4. February 2010 20:32

OCR Uygulaması

Bu soruda ele aldığımız konu aslında bir OCR (Optical Character Recognition) konusunun çok dar bir alanıdır. Burada yapılmakta olan aslında bir yazının mekaniksel veya yazılımsal olarak tanınması uygulamasıdır.

Görüntü işleme kullanılarak tespit edilen karakterler daha sonra kullanılacak olan ağa uygun olarak ölçeklendirilerek yeterli satır ve sütun sayısının elde edilmesi sağlanmaktadır. Bizim burada ilk etapta yapmakta olduğumuz belli karakterler için ağın bunları tanımasını sağlamaktadır.

Eğitim Kümesi

Bu uygulamada ağın eğitim süreci ve eğitimler sonucunda  test edilmesi işlemleri önemli olmaktadır. Burada yapay sinir ağlarımız belleklilik özelliğini kullanarak girişleri ilişkin belirli çıkarsamaları ağ içerisinde tutmaktadır.

Eğitim kümesi içerisinde ne kadar fazla veri olursa yapay sinir ağımız o eğitimi yapılan değer için daha iyi sonuçlar vermeye başlanacaktır. Burada sistemin ezberlemeden öğrenebilir ve genelleme yapabilir hale getirilmesi istenmektedir.

Burada minimum rakam olarak 6 sayısı verilmiştir. Sistemimi kod üzerinde hazırlarken bu değişken değeri parametre olarak saklanmıştır böylece farklı sayıda eğitim değeri içinde sonuçlar incelenebiliyor.

Burada önemli olan eğitim ve test kümesindeki karakterlerin orijinallerinden azda olsa bir miktar farklı olması gerekmektedir.  Bunu sağlamak amacıyla da yazdığım program içerisinde parametrik olarak ne kadar bir değişim istendiğini öğrenmekteyim. Daha sonra bu değişim miktarı kadar değeri o karaktere ait veri dizisi üzerinde değiştirmekteyim. Burada elde edilen değerler rastgele olarak ağa aktarıldığından daha rastgelelik üzerine kurulu bir sonuç elde edilmektedir.

 Parametrelerin Seçimi

Yapay sinir ağları konusunda beklide en şüpheli noktalardan biride kullanılan ağ içerisinde performansı etkileyecek çok fazla değer olmasıdır ve bunların hiçbir zaman en iyisi budur gibi bir söylemle tanıtılması mümkün olmamaktadır.

Bu nedenle öncelikle bizim sistemimizin parametrelerine ve bunların sonuçları nasıl etkilediklerine açıklama getirmeye çalışalım.

Düğüm sayısının artması ağın hatırlama yeteneğini arttırmakla beraber öğrenme işlemi süresini uzatmaktadır. Ama burada yapılacak olan uygun düğüm sayısında yapılan değişikliklerin incelenmesi olacaktır.   

 

 

Öğrenme oranı

Öğrenme oranının ağ performansı üzerinden önemli bir etkiye sahiptir. Küçük öğrenme oranı değerleri için eğitme işlemi uzun zaman alırken bu değerin büyütülmesi ile bu süreç daha kısa sürede gözlemlenmektedir. ,

Farklı Öğrenme Oranlar için sonuçlar:

clip_image002 clip_image004

clip_image006 clip_image008

Şekil 1: Iterasyon sayısının katmanların dengeye gelmesi üzerine etkisi

Burada görüldüğü üzere iterasyon sayısında belirli bir artma gözlenmiştir. Sistemin yüksek öğrenme katsayısı değerleri için osilasyona girmesini de gözlemlemeye çalıştım ama sistemin local minimumlarında takılı kalmadığından dolayı bu durum gözlenemedi. Öğrenme katsayısının azalması ile sistemin hedefe ulaşma süresi uzatmıştır.  Bu da yukarıda bahsettiğimiz şekilde beklenen bir durumdur.

 

Gizli Katman Sayısı

Gizli katmandaki sinir sayılarının arttırılması hem hafızada hem de CPUda yük artmasına sonuç olmaktadır. Gizli katman sinir sayısının az miktarda alınması ağın hatırlama yeteneğini olumsuz yönde etkilemektedir.

Sistemlerin karmaşıklığı arttıkça katman sayısını ve nöron sayısının arttırılması uygulanan yöntemlerdendir ancak bundan daha mantıklı yöntemle sonuç elde edilebilmektedir. Bunlar arasında aktivasyon fonksiyonlarını değiştirilmesi veya öğrenme oranı momentum terimi gibi etkileri devreye sokmak yer alabilmektedir.

Minimum Hata değeri

Minimum hata değeri işlem yapılırken toplam karesel  hatanın belirli bir değeri durdurması amacıyla tanımlanmaktadır. Aslında durdurma koşulu olarak ta kullanılabilmektedir. Bu değerin seçilmesi gereksiz iterasyonlardan sakındırdığı için önemli olmaktadır.

Katmanlardaki Nöron Sayıları

Katmanlardaki nöron sayıları da bizim için önemli olan kriterlerden bir tanesidir. Sistemlerin minimum katman sayısını bulmaya yönelik bir teoremin hesapladığı üzere bir yapay sinir ağları sisteminin çalışmasında sınıflandırma problemi için sadece 1 gizli katman ve çıkış katmanı yeterli olmaktadır ancak biz her zaman bu şekilde çalışmıyoruz. Genellikle bir katmandaki nöron sayısının çok fazla olmaması için katmanlarda yatay bir büyüme sağlanarak katman sayısı arttırılmaktadır.

Katman sayısını arttırmak bir çözüm olabileceği gibi her zaman bir katmanda fazla sayıda nöron kullanmamamızda gerekmemektedir. Sistemin çalışmasına yönelik olarak optimum sayıda nöron belirlenebilmektedir. Bunun sistemin öğrenmesine etkisi olduğu gibi öğrenme süresi ve işlem maliyeti de bundan etkilenmektedir. 

Birinci katmandaki farklı nöron sayıları için iterasyon ve hata değerleri:

clip_image010clip_image012

clip_image014clip_image016

Şekil 2: İterasyon değerleri ve hatalardaki değişim

Yukarıdaki grafiklerden de görüleceği üzere sistemin katmandaki nöron sayısı azaldıkça hatanın azalarak sistemin dengeye gelmesi için gerekli olan iterasyon sayısında artma meydana gelmiştir.

İkinci katmandaki farklı nöron sayıları için iterasyon ve hata değerleri:

clip_image018 clip_image020

clip_image022 clip_image024

Şekil 3: İterasyon değerleri ve hatalardaki değişim

 

Aktivasyon Fonksiyonu

Aktivasyon fonksiyonları eğitim kurallarımızı nasıl seçtiğimizle de alakalı olarak önemle belirlenmesi gereken bir kıstastır. Yapay sinir ağı sistemlerde bir düzenek eğer iyi çalışmıyorsa ilk olarak denenmekte olan şeyler ağ yapısı üzerinde değişiklikler yapılarak nöron sayısı veya katman sayısı ile oynamak olmaktadır.

Aslında aktivasyon fonksiyonları da giriş ve çıkış arasında ilişkiyi doğrudan etkilemekte olduklarından en önemli parametrelerden birisi olmaktadır. Sigmoid çoğunlukla tercih ettiğimiz bir aktivasyon fonksiyonu olmasına rağmen zorunlu olarak kullanılması zorunlu değildir. Bunun dışında kullanılabilecek başka fonksiyonlarda olmaktadır. Biz sigmoid fonksiyonun kullanmayı uygun gördük.

Durdurma Koşulu

Yapay sinir ağlarında eğitim işleminin durdurulması koşulu da sistemin performansı ve işlem süresi açısından önemli olmaktadır. Burada kullanılacak olan koşullar sistemin eğitimi eğer çok uzun sürecekse bir sınır iterasyon koşulu konulması ve belirli bir hata koşulu konulması gereklidir. Burada hata koşullarında grup uyarlamalı veya veri uyarlamalı olarak kullanılabilmektedir.

 

Veri uyarlamalı ve grup uyarlamalı sistemlerde belli başlı farklılıklar yer almaktadır. Veri uyarlamalı sistemlerde bağlantılar için gereken bellek az olmaktadır ve problemler büyüdükçe daha iyi çözüm üretilmesi sağlanmaktadır.

 

Bizim kullanmakta olduğumuz sistemde 35 adet giriş 7x5 karakterleri temsil amacıyla oluşturulmuştur. Bunların ilk etapta girişlerde 10 nörondan oluşmuş bir katmana alınmıştır bu sayı daha arttırılarakta denenebilir nöron sayısının artması sistemin öğrenme kabiliyetini arttırmakta ancak işlem yükünü ve bellek gereksinimini de beraberinde yükseltmektedir. Gizli katman sayısı 2 olarak seçilmiştir. Bunun seçiminde tek katmanda yeterli olabilmektedir ancak giriş katmanındaki nöron sayısını fazla tutmaktansa yatay olarak ağı genişletmek uygun olmuştur. Çıkış katmanında ise 3 farklı karakter için çalışıyor olduğumuzdan 3 değer kullanılmıştır. Burada sistemin kurulumunda sigmoid fonksiyonu seçilmiştir ve hata değerlerinin normal çıkması içinde eğitim kümesinde çıkış değerleri clip_image026,clip_image028,clip_image030  seçilmiştir. Burada yapılabilecek diğer bir durum sigmoid fonksyonumuzu (-1,1) arasında çıkış verecek şekilde kullanarak çıkış değerlerini 0 ve 1lerden oluşan vektörler halinde değil -1,1 değerleri kullanarak oluşturabiliriz.

 

   clip_image032clip_image034

clip_image036

Şekil 4: Bozulan piksel karşısında sistem başarımı

Burada yapılması amaçlanan harflerin bozulma miktarı arttıkça sistemin tanıma kabiliyetinin ne kadar değiştiğidir. Tanıma kabiliyeti 0-1 arasında kuantalanmıştır. Burada 1e yakın değerler gözlendiğinden bozulan bit sayısı fazla olsa da sistem doğru şekilde tanınabilmektedir. Sistemin resimleri bozması rastgele pixel değerlerinin seçilerek yapılmasından ötürü sistemin tanıma yeteneği beklendiği gibi düzgün azalmamakta ancak gene de hata yapıldığında sistemin diğer karakterlere benzetilmesi daha fazla olmaktadır. Sistemde tanınacak eleman sayısı arttırılacak olursa bu durumda benzer karakterler arasında oluşan hatalar daha fazla olacaktır.

Tags: ,

Neutral Networks | Yapay Zeka

Perceptron (Genlikte Ayrık Algılayıcı)

by Ordinaryus 1. February 2010 22:35

Problemin Tanımı

Yapay sinir ağları uygulamalarının içerisinde hiç kuşkusuz en çok kullanılan özelliklerden biri Yapay Sinir Ağlarının sınıflandırıcı olmasıdır. Burada farklı özelliklere sahip noktaların tanımlı oldukları uzayda bir birinden lineer bağımsız gruplara ayrılmaları mümkün ise Yapay sinir ağları ile bu ilişki gösterilebilmektedir.

Burada 2 boyutlu bir düzlem üzerinde verilen 2 farklı gruptan noktanın lineer ayrıştırılması gerçeklenecektir. Bunun için kullanılacak olan sistem Genlikte Ayrık Algılayıcı (Perceptron) olacaktır.

Burada Perceptron yapısının oluşturulmasında ağırlıkların güncellenmesi için eğitim işlemi gerçekleştirilecektir. Uygun bir eğitim sınıfının seçilmesi problemimizin ilk koşullarından birisidir. Burada eğitim kümesi ile ilişkili bir test kümesi üzerinden testlerimizi gerçekleştirecek olduğumuzdan eğitimi ne kadar başarılı verilerle uygularsak test üzerinden de o derece iyi sonuçlar alacağızdır.

Bu sistemde soruda istenildiği üzere 14 eğitim verisi ve 6 test verisi kullanılacaktır. Bu eğitim verileri doğrultusunda başlangıçta belirlenen ağırlıkların bu 2 sınıfı lineer olarak ayıracak olan doğrunun denklemine ait katsayıları elde edilene kadar kullanılmaktadır.

Sistemin lineer ayrılabilir olması bu noktada önemli olmaktadır. Aksi halde sistem belirli bir iterasyon kısıtı konulmamış ise uygun katsayıları bulmak için sonsuza kadar eğitimden çıkamayacaktır.

Performansı Etkileyecek Kriterler

Burada sistemin başarısını etkileyecek birden çok kriter yer almaktadır. Bu kriterler genel olarak sistemin eğitim süresine, sınıflandırma başarısına etki etmektedir. Genel olarak eğitimden kaynaklanan ve algoritma işleyişinden kaynaklanan kriterler olarak 2 grupta toplanabilirler.

Eğitimle ilişkili kriterler arasından seçilen noktaların uygunlu, birbirleri ile olan kohezyonları, sistemde kullanılan eğitim kümesinin test kümesini ne kadar iyi temsil edebildiği gibi kriterler yer almaktadır.

Algoritma işleyişinde ise eğitim kümesindeki verilerin hangi düzende tekrarlandığı, başlangıç koşulları, öğrenme hızı gibi kriterler yer almaktadır. Bunların sistem üzerindeki etkileri de incelenecektir.

Örnek olarak sisteme  vermiş olduğumuz eğitim kümesi ve test kümesinden bir tanesini inceleyecek olursak.

clip_image002

 

 

 

Burada sınıflandırılması oldukça kolay bir sistem seçtik öncelikle programı test etme amaçlı olarak belirlenen bu eğitim ve test kümelerinde analitik düzlemin 2. ve 4. bölümleri burada kullanılmıştır.

Yazmış olduğumuz kodda kullanıcıdan ağırlık vektöründe değerleri rastgele olarak belirlemek için bir aralık istemektedir. Bu aralık içerisinde rastgele belirlenen değerler yardımıyla eğitime başlanmakta ve belirli sayıda iterasyon sonucunda sonuca ulaşılmaktadır. Başlangıç için seçmiş olduğumuz noktalar ‘*’ ve test amacıyla kullanılmakta olan noktalar ‘+’ aradan geçmekte olan doğru ile başarılı bir şekilde ayrılmaktadır. Burada başlangıç koşullarına rağmen iterasyon sayısı çok az bir miktarda kalarak uygun ağırlıklara ulaşılmaktadır. Burada problemin bu kadar kolay çözülmesinden öncelikle eğitim kümesinin bariz bir şekilde birbirinden ayrı olması sorumludur.

Başlangıç değerleri

Daha yüksek kohezyonlu veriler kullanılırsa başarımın azalması ve uygun ağırlıkların bulunması için geçen işlem süresi artacaktır. Bu tarz bir örnek incelendiğinde uygun katsayıların belirlenmesi için gereken işlem süresi de değişmektedir. 

clip_image004

Burada dikkat edilirse başlangıçta alınan ağırlık değerleri sonucunda elde edilen doğruda test noktalarından birine fazlasıyla yakın olmuştur burada test noktasının doğrunun diğer tarafına düşmesi de mümkün olabilirdi. Burada elde edilen doğrular belli bir aralıkta değişmektedir ve başlangıç koşulları ile alakalı olarak bunlardan herhangi biri olabilmektedir.

Eğitim için verilen noktalarımızı doğru olarak ayıracak şekilde ağırlıklar verildiğinden bunları sağlayan değerlerde eğitim noktalarına göre belirlenen bir aralıkta olacaktır. Aşağıda gösterilen resimde de gözüktüğü gibi koyu renkle gösterilen bölge bizim sınıflandırma sonucu çıkabilecek doğrularımızın içinde bulunacağı aralıktadır. Eğer test kümemizden bir eleman bu alana düşer ise o zaman hatalı sonuç alma ihtimalimiz ortaya çıkmaktadır.

clip_image006

Burada görülen aslında başlangıç değerlerinin sonucu ne derece etkilediğini de göstermektedir. Sonuçta çözüm kümemiz bu aralıkta olmak zorundadır ve buradan geçen her bir doğru bizim ağırlıklar olarak kutlandığımız katsayılarla ifade edilen birer doğrudan ibarettir. Başlangıç değerimizin bu çözüm kümesi dışında kalan alanda çıkması durumunda ise eğitim sırasında bu değerlerin uygun noktalara getirilmesi sağlanmaktadır.

Farklı başlangıç değerleri için sonuçlar incelendiğinde ise çözüm aralığımızın geniş olmasından ötürü bu örnekte iterasyon miktarı çok olmamaktadır. Ancak daha dar bir aralıkta uygun aralıkta değerler alabilmek için bu ölçüde bir değişim olacaktır.

Eğitim Kümesinin İşleniş Sırası

Eğitim kümesindeki verilerin her ne kadar farklı sınıflar için eşit miktarda alınması çalışılsa da bunun mümkün olmadığı durumlar olmaktadır. Bu durumda iyi bir temsil yapılamamış olabilir. Eğitim esnasında ise önemli olan nokta katsayıları günceller iken aynı gruba ait verilerin ardı ardına gelmemesi burada da bir rastgelelik olması istenmektedir.   

Farklı kombinasyonlarla random bir diziliş yapılması sağlandığında genel olarak iterasyon sayılarının diğer ardı ardına olan düzene kıyasla daha az olduğunu gözlemledim.

Öğrenme Hızı

Öğrenme hızı sistemimizin eğitim esnasında ağırlıkları güncellerken kullanmakta olduğu bir değerdir. Bu değer [0,1] aralığından seçilmektedir. Bizde bunun sistem performansı üzerindeki etkilerini inceleyerek gözlemleyeceğiz.

Öğrenme hızının sistem üzerindeki performansını incelemek için en uç değerler üzerinde inceleme yapmakta fayda olacağı açıktır. Bu durumları inceleyecek olursak eğitim kümemize verilen değerler sonucu beklentimiz eğimi -1e yakın bir değerde elde etmektedir. Demek ki eğimi 1 olan bir doğruyu temsil edicek şekilde başlangıç koşulları belirlersek bu durumda iterasyon miktarının artacağı açıktır. Burada farklı öğrenme hızları için inceleme yapacak olursak.

 

 

 

Egitim Katsayısı

Iterasyon Sayısı

Ağırlıklar

0.05

10

-0.7000   -0.7500    0.0500

0.10

5

-0.8500   -0.6500   -0.0500

0.15

5

-1.1500   -0.9500    0.0750

0.20

3

-1.3000   -1.2000   -0.1000

0.25

4

-1.7500   -1.6250     0.0000

0.30

2

-1.9000   -1.5500   -0.3000

0.40

2

-1.8000   -1.4000     0.0000

0.50

2

-2 .0000  -2.0000     0.0000

0.60

2

-2.2000   -2.6000     0.0000

0.70

2

-2.4000   -3.2000     0.0000

0.80

5

-4.2000   -4.2000    1.2000

0.85

5

-4.4000   -4.5250    1.2750

0.90

5

-4.6000   -4.8500    1.3500

0.95

5

-4.8000   -5.1750    1.4250

1.00

5

-0.8500   -0.6500   -0.0500

 

 

Burada görülen sonuç beklenenin biraz dışında bir sonuç olmaktadır. Bunun nedenleri incelendiğinde ise sonuç kümesi için var olan aralığın büyük olması verilebilmektedir. Bunun dışında iterasyon sayısının 0.5 civarında en uygun değerler almakta olduğunu görüyoruz. Ağırlıklar beklendiği gibi eğimi -1 olan bir doğruyu temsil edecek şekildedir ve verilen aralık içerisinde yer almaktadır.

Benzer işlemi daha dar bir aralıkta sonuç verecek bir eğitim kümesi için tekrarlarsak iterasyon miktarlarının artmakta olduğunu gözlemlemekteyiz. Bu şekilde daha sağlıklı olarak gözlem yaparak eğitim katsayısı ile olan ilişkiyi gözlemleyelim.

clip_image008

Yukarıdaki şekilde görüldüğü gibi yeni eğitim kümemiz için olan değerler daha dar bir aralıkta çözüm sunmakta bu nedenle iterasyon miktarları bu aralıkta olabilmek için daha fazla olmaktadır.

İterasyon miktarı ile öğrenme hızları değişimi arasındaki ilişki aşağıdaki grafikteki gibidir. Burada sistemin diğer değişkenlerden olabildiğince soyutlanabilmesi için başlangıç değerleri sabit olarak tutulmuştur.

clip_image010

 

 

 

Burada görüldüğü gibi sistemimize etkiyen parametreler içerisinde öğrenme katsayısı ve başlangıç değerleri önemli yerler tutmaktadır. Öğrenme katsayısını küçük seçmek öğrenme işlemi tamamlanana kadar geçen süreci uzatmakta. Büyük seçilmesi durumda ise bizim örneğimizde gerçekleşmemiş olsa da hedef nokta etrafından salınım yapılmasına neden olmaktadır.

clip_image012

Başlangıç değerlerini seçimi ise çözüm kümemiz içerisinde yer alacak olan bölgeye girebilecek bir doğru denklemine ait katsayıları elde etmede önem taşımaktadır.

Tags: , ,

Neutral Networks | Yapay Zeka

C# Mouse Events

by Ordinaryus 8. January 2010 23:34

In C# programming using mouse events is a need for many programmer. Using C#, Mouse positions can be easily used but, we can’t change mouse position or create mouse click.

There is a solutions for this problem. We can use DllImport to access windows APIs, so we can both change mouse position and create click event.

I write a Mouse class because of this need. We can access mouse position, set cursor coordinates and create left and right click events.

    class Fare
    {
        [DllImport("user32.dll")]
        private static extern void mouse_event(UInt32 dwFlags, UInt32 dx, UInt32 dy, 
        UInt32 dwData, IntPtr dwExtraInfo);
        
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int x, int y);
        
        private const UInt32 MouseEventLeftDown = 0x0002;
        private const UInt32 MouseEventLeftUp = 0x0004;
        private const UInt32 MouseEventRightDown = 0x0008;
        private const UInt32 MouseEventRightUp = 0x0010;

        static public int konumX
        {
            get { return System.Windows.Forms.Control.MousePosition.X; }
        }

        static public int konumY
        {
            get { return System.Windows.Forms.Control.MousePosition.Y; }
        }


        public static void SendLeftClick()
        {
            mouse_event(MouseEventLeftDown, (uint)konumX, (uint)konumY, 0, new System.IntPtr());
            mouse_event(MouseEventLeftUp, (uint)konumX, (uint)konumY, 0, new System.IntPtr());
        }

        public static void SendRightClick()
        {
            mouse_event(MouseEventRightDown, (uint)konumX, (uint)konumY, 0, new System.IntPtr());
            mouse_event(MouseEventRightUp, (uint)konumX, (uint)konumY, 0, new System.IntPtr());
        }

        public static void SendMouseDown()
        {
            mouse_event(MouseEventLeftDown, (uint)konumX, (uint)konumY, 0, new System.IntPtr());
        }

        static public void SetFare(int x, int y)
        {
            SetCursorPos(x,y);
        }
    }

Tags: ,

Emotiv

by Ordinaryus 3. January 2010 18:53

Bitirme ödevime başladığım bu dönem kısaca burada çalışmam sırasında kullandığım ekipmandan bahsetmek istiyorum. Sanırım ileride Emotiv hakkında daha fazla yazacağım ve yapmakta olduğum uygulamalardan bahsedeceğim.

Emotiv EEG dalgalarını alıp sınıflandıran ve daha çok alt kesime yönelik bir araç. Oyun programcıları ve insan makina arayüzleri üzerinde çalışan kişilerin daha fazla tercih etmekte oldukları bir ürün. Ancak danışmanım Prof. Dr. Müştak Erhan Yalçın Emotivin akademik lisansını kullanmam için almış olduğundan dolayı ham EEG datalarınıda kullanabiliyoruz.

Bu aletle ben kendisine kısaca Emo diyorum daha çok alınan işaretin sınıflandırılması üzerine çalışmak istiyorum ancak SDKnın imkanlarını görmek adına uygulamalar yapmaya başladım. Bunlarıda yakın zamanda burada paylaşacağım.

emomla

Emotivin zengin APIsi researcherların kolaylıkla kullanabileceği şekilde geliştirilmiş. Aynı zamanda SDK içerisindede yazılımcıların işini kolaylaştırıcak fazlasıyla destek bulunmakta.

Emotiv hakkında daha fazla bilgiyi bu linktenelde edebilirsiniz. Bende yapmakta olduğum uygulamaları buradan paylaşmaya devam edeceğim. 

Tags:

Emotiv

Bir yılı daha geride bıraktım, hoşgeldin 2010

by Ordinaryus 3. January 2010 18:23

Bir yıl daha göz açıp geçinceye kadar geride kaldı. Bende biraz geciktirsemde yeni yılın ilk blog girdisini yapmak istedim. Yeni yıla girmek herzaman için zor süreç olmuştur benim için tarih atarken eski yılı yazmayı bırakmam haziran ayını buluyor :) Ancak görünün o ki 2010 benim yılım olacak.

Yeni yılın gelişi aslında bir çok şey için gözden geçirme ve dönüm yaşanan yılın envanterini yapabilmek için çok iyi bir fırsat özellikle benim gibi tatminsiz bir kişiliğe sahipseniz. Her zaman için geçen zamanı yeterince iyi değerlendiremediğimden yakınırım. Sanırım vicdanımı rahatlatmak için geçtiğimiz yılı durum düşünüp kattıklarıyla değerlendirmek lazım.

2009 yılında neler yaşadım, neler edindim, neler öğrendim? Sanırım öğrencilik hayatımın en güzel dönemi 2009un ikinci yarısına denk geldi. Fizik bölümünde aldığım dersler ve elektronikten aldığım Yapay Sinir Ağları dönemimi oldukça zevkli geçirmemi sağladı. İleriki planlarım için önümü daha iyi görebiliyorum. Bunun yanında Kanada da 2 süper hafta geçirdim, yeni arkadaşlıklar ve paha biçilemez tecrübeler kazandım. Geçtiğimiz yılın 3 4 aylık periyodunda ITURO Bilişim Sistemi ile uğraşarak mükemmel bir ekip çalışmasını gördüm çok sağlam insanlar tanıdım. En önemlisi yeni bir işe başladım ve eylül ayından beri yazılım konusunda daha fazla şey öğrenip vaktimi efektif olarak değerlendirdiğim bir işim var. Toefle ve GRE sınavlarına girdim, Brownda Brain Science okumak için başvurumu yaptım. Yaz tatilimi hem kulüpteki dostlarımla eğlenerek hemde fazlasıyla şey öğrenerek geçirdim. Teknik olarak hangi konularda çalıştım vs kısmına girerek kafa şişirmeyeceğim. Bunların yanında bu yıl yeniden MSP seçildim. Bitirme ödevim için danışmanım Prof. Dr. Müştak Erhan Yalçın ile çalışmaya başladım.

Sanırım daha başka şeylerde vardır gözüme önemsiz gözüken ve yazmaya üşendiğim. Bu yıl sanırım hayatımdaki en keyif aldığım ve yurt dışı başvurularımı beklerkende en fazla heycan yaşayacağım dönem olacak. Ama sonunda sevineceğim :) Alternatiflerin fazla olmasını ve tercih yapmam gerektiği durumların olduğunu da artık pek düşünmüyorum. Önümde ne kadar olasılık varsa aslında onlara biçtiğim değerleri azaltıyorum aralarından paylaştırarak. Bu nedenle en çok istediğim şeyi belirleme ve önceliklerimi buna göre düzenlemem gerektiğini farkettim. Böylece bir şeyi gerçekten isteyip onu elde etmem daha kolay olacak. Bana katılmayanlar da olacaktır ancak insaların isteyipte elde edemeyeceği şey yok. Mühim olan sürecin nasıl geçirildiği. Bazı şeylerin gerçekleşmesi için uzun vade gerekiyor ve bunu elde etme olasılığı zaman geçtikçe tükeniyor. Olasılık dağılımının dışa düşen parçalarında kalan hayallerden ibaret oluyorlar demekki zamanında istediklerimizi belirlemeli ve bunların yolunu açmalıyız.

Alice Harikalar diyarından daha önce Şizofrenik Zırvalar bölümünde paylaştığım bir yazıyı yeniden burada alıntılıyorum.

“Buna inanamıyorum!” der Alice (evet bizim Alice). Alice 7.5 yaşında, kraliçe ise 101 yaşında olduğundan behsetmektedirler, ayrıca 5 ay ve 1 gün.

“İnanamıyor musun?” diye cevaplar kraliçe, acıyan bir ses tonu ile. “Tekrar dene, derin bir nefes al ve gözlerini kapat, ve tekrar dene.”

Alice güler. “Denemenin yararı yok,” der. “İmkansız şeylere inanılamaz.”

“Daha çok egzersize ihtiyacın olduğunu söyleyebilirim,” der kraliçe. “Ben senin yaşındayken, her gün yarım saat süresince bunu yaptım. 6 imkansız şeye inandım her günün kahvaltısından önce.”

En son ne zaman olmayacak(!) düşüncelerle, olmayacak(!) işler peşinde koştunuz? Peşinde koşmayı bir yana bırakın, en son ne zaman bu düşüncelerin hayali için bir adım attınız zihninizde, kendi çerçeveleriniz ya da çevrenizin çerçeveleri tarafından engellenmeden?

Bugünden itibaren bunu yapmaya ne dersiniz, her sabah kahvaltıdan önce 6 imkansız(!) şey hayal ederek, bunlara inanmaya?

Bununda ötesinde imgeleme yapmanın önemini farketmeliyiz. Olmak istediğimiz konumu hayal etmeliyiz, bu bir şekilde herşeyi değiştiricek değişimleri başlatıyor. Pek çok felsefede bunun yeri büyüktür. Inanç denen şeyde zaten bundan farklı bir şey değildir bence.

Ozaman 2011de nerede olmak istiyorum bunları düşünmeliyim, düşünmeliyiz. Güzel bir yıl geçirmek dileğiyle :) Seneye yılbaşı yazımı(noel daha doğru olucak sanırım) karlı bir havada yazıyor olacağım ve o yazıda bu cümlemi alıntılayacağım :)

Brown_University_-_University_Hall

Tags:

Microsoft Tag

by Ordinaryus 30. November 2009 02:18

Bundan yıllar öncesinde hayal ettiğimiz ve yeterli donanıma sahip olup uygulamaya koyamadan microsoftun yapıp ortaya koyduğu SDKsınıda alın kullanın diye verdiği teknolojidir.

Bu teknolojide çeşitli bilgilerin kodlanarak bir resme gömülmesi olayıdır ama bundan daha fazla kullanım alanlarına bakmak gerekmektedir. Türkiyede artık hemen hemen her gazetede kullanılmakta olan tagler ile işaretlenmiş haberlerin 3G uyumlu telefonlarla nete bağlanarak ilgili videoyu izletmeyi sağlamak ve daha bir sürü benzer uygulaması mevcuttur.

Yeni çıkan bir teknolojide dalganın önünde olmak herzaman için kötüdür ama tag teknolojisinde şuan dalganın tam üzerinde olucak zamandayız ve zaman kaybetmeden bu teknolojiyi kullanan uygulamalar yapmak gerekmekte.

Bunlardan en yalın olanı MSP arkadaşlarımın hazırladığı http://www.maketag.com/ adresidir. Burada verilen URLler için tagleri hazırlamaktadır. Çok sade olmasına rağmen ilk olması açısından önem taşımaktadır.

Aşağıda www.vypro.org adresinin tagini görmektesiniz :) Bol tagli günler ;)

tag_c9

Tags:

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Ordinaryus Hakkında


Hayata gözlerini İzmirde açtı. 3 yaşında legolarla oynadı =) Küçük yaşta baskete başladı zaten başka sporlarla arası hiç olmadı. Orta okulda matematikle ilgilendi. Liseyi Karşıyaka Anadolu Lisesinde okudu. 

2006da İTÜ Elektronik Mühendisliğini kazandı. Sonrasında Fizik bölmünde çift anadala kabul oldu. Fantazi olarak fzik dersleri alıyor. Biryandan da kuluplere saldırdı. Öğrendi, öğrendiklerini paylaştı. Ara sıra ineklik etti, etmekte =)

Yazılımı sevdi... Odur budur derken yolunu çizmeye çalıştı. Hala da çalışıyor..

2008te MSP oldu belkide bu blogu yazmaya başlamamda en büyük etken=) Zamanla yazılım dünyasında Ordinaryus olmayı hedeflemekte =) 

Yapay Zeka, Görüntü İşleme, Kuantum Mekaniği, Bilişsel Bilimlerle ilgili. Geceleri öle kafasına göre takılıyo. Sabahlarıda öğrencilik yapıyo =)

gibi gibi... 

 

Page Rank

Şuan ne okuyorum

Bilişsel Psikoloji

Ramayla Buluşma


Ayrıca okuduklarımdan seçtiğim kitaplara buradan ulaşabilirsiniz..

Okuduklarımı üye olarak takip etmek için ise aşağıdaki RSS bağlantısını kullanabilirsiniz. Ayrıca bana kitapta hediye edebilirsiniz =)


Google Translate


CCL


Copyright © Ordinaryus Says That by http://www.vypro.org/ is licensed under a Creative Commons Attribution-No Derivative Works 3.0