Ekim 2010 ayında yazılan yazılar...

Yapay Sinir Ağları Perceptron ve Adaline Modeli

21 Ekim 2010

http://www.burhanemre.com/images/LearningPic8.jpg

Merhaba arkadaşlar bu yazımda yapay sinir ağlarından biraz bahsederek Perceptron ve Adaline olmak üzere 2 öğrenme modeline değineceğim. Ardından bu 2 modeli C# Windows Apllication ile code’a dökerek gerçekleştireceğiz.

Bildiğimiz üzere yapay sinir ağı demek insan beyninin işleyiş mekanizmasını taklit etmek demektir. Yapay sinir ağı yapay zekanın bir alt dalıdır ve merkezi sinir sisteminin görevini taklit etmeye dayanır. Sinir sisteminin de sinir hücrelerinden oluştuğunu biliyoruz. Sinir hücreleri dış dünyadan aldığı bilgileri kendine bağlı olan diğer sinir hücrelerine iletirler. İşte bizde bu sinir hücrelerini taklit edeceğiz ve bize gelen bilgiye öyle bir şekil vereceğiz ki (Öğrenme modellerine göre ) tıpkı bir sinir hücresinin girişine uygulanan bilgi nasıl çıkış veriyorsa bizde ona benzer bir çıkış üretilmesini sağlayacağız.

Bu işlemi biyolojik sinir sisteminde bulunan bölümlerin yapay sinir ağındaki karşılığını kullanarak yapacağız.

Peki nedir bu karşılıklar aşağıda sıralayalım.

Biyolojik Yapay

Nöron                                                                       İşlem Elemanı

Dendrit                                                                    Toplama fonksiyonu

Hücre Gövdesi                                                     Transfer Fonksiyonu

Aksonlar                                                                Eleman Çıkışı

Sinapslar                                                                 Ağırlıklar

Gördüğünüz üzere bir sinir hücresinde bulunanların karşılığı yapay olarak bir takım matematiksel ifadelerden oluşuyor.

Bir sinir hücresini taklit etmek için çeşitli fonksiyonlar ve öğrenme modelleri geliştirilmiş.

Örneğin Öğrenme modeli olarak Perceptron, Adaline ve Madaline

Transfer fonksiyonları olarak Doğrusal aktivasyon, Keskin sınırlayıcı, hiperbolik Tanjant ve logaritmik sigmoid

gibi çeşitli fonksiyonlar ve modeller mevcut

Biz programımızı yazarken Perceptron ve Adaline Öğrenme modeli ile transfer fonksiyonu olarak da Keskin Sınırlayıcı fonksiyonunu kullanacağız. Şimdi adım adım bunların ne olduğuna ve formüllerinin ne olduğuna bakalım…

Perceptron : En basti ve tek katmanlı yapay sinir ağı öğrenme modelidir. Birden fazla girişi ve tek çıkışı vardır. Toplam fonksiyonundan çıkan değer Eşik değeri ie karşılaştırılır. Eşik değerini biz belirliyoruz.

Adım1: Ağa, girdiseti ve onakarşılık beklenen çıktı gösterilir(X,B).

http://burhanemre.com/images/LearningPic2.png

Adım2: Perceptrona gelen Net girdi hesaplanır.

http://burhanemre.com/images/LearningPic3.png

Adım3 : Perceptron çıkışı hesaplanır.

http://burhanemre.com/images/LearningPic4.png

Ağın, beklenen çıktısı 0 iken Ne tgirdi eşik değerinin üzerinde ise ağırlık değerleri azaltılmaktadır.

http://burhanemre.com/images/LearningPic5.png

Ağın,beklenen çıktısı 1 iken Net girdi eşik değerinin altında ise ağırlık değerleri arttırılmaktadır.

http://burhanemre.com/images/LearningPic6.png

Adım4: Bütün girdi setindeki örnekler için doğru sınıflandırma yapılıncaya kadar ilk üç adımdaki işlemler tekrarlanır.

Adaline : Toplam fonksiyonundan çıkan değer eşik değeri ile karşılaştırılarken hedefe ulaşmada hata değeri göz önünde bulundurulur.

Adım1: Ağın net girdisi hesaplanır.
NET=Σwixi+Ф        Toplam fonk. için i=1 den m’e kadar
NET=Ф+x1w1+x2w2+x3w3+………+xnwn
Adım2:Ağınçıktısıbelirlenir.
Çıktı(Ç)=1 Eğer NET>=0 ise Çıktı(Ç)=-1 Eğer NET<0 ise

Ağın çıktısını üreten fonksiyon bilinen bir step fonksiyondur. Beklenen değerin B olduğu varsayılırsa Adaline ünitesinin çıktısını ürettikten sonraki hatası:
E= B-Ç
olacaktır.
Amaç bu hatayı en aza indirecek ağırlıkları bulmaktır. Bunun için  her seferinde ağa farklı örnekler gösterilerek hatalar hesaplanmakta ve ağırlıklar hatayı azaltacak şekilde değiştirilmektedir.

Keskin sınırlayıcı fonksiyonu : Mantıksal çıkış veren ve sınıflandırıcı ağlarda tercih edilen bir aktivasyon fonksiyonudur. Yani sonuca göre 1 veya 0 üretilir. Bilgisayar için gerekn bilgiler zaten 1 ve 0 oldğuna göre bu fonksiyonu kullanmak mantıklı…

Giriş Değer <0 dan Çıkış=0  Giriş Değer >0 Çıkış=1

Gelelim programın hazırlanmasına…

Formüllerde görülen tüm argümanları değişken olarak tanımlayacagız ve bu değişkenler kafamızdan değerler verip formülü uygulayacaız yapmamız gereken sadece budur.

Uygulamamızın sınıf şeması aşağıdaki gibi olması gerekir çünkü  her iki öğrenme modelinde kullanılacak olan formüller ve parametreler hemen hemen aynıdır.

http://burhanemre.com/images/LearningPic7.png

Devamını oku »

Popularity: 5% [?]

Yazılım Uzmanlığı

12 Ekim 2010

Yazılım Mühendisi

Yazılım uzmanı, yazılım uzmanlığı ve yazılım mühendisi nedir acaba bunlar?

Ne olunca yazılımcı veya yazılım uzmanı oluyorsunuz? Açıkçası bende tam olarak bilmiyorum :)

Acaba bir program geliştiren, bunu kullanıcıya sunan sonra kullanıcı istediğinde programı değiştirebilen, güncel tutabilen, sorunlara çözüm getiren, sürekli kod yazan vs. bıdı bıdıları yapan kişi yazılım uzmanı mı oluyor?

Bugün öğrendim maalesef olmuyor. Nasıl mı öğrendim? :)

Bilişim sektörününün önde gelen şirketlerinden birine yazılım uzmanlığı kadrosuna görevlendirilmek üzere başvuru yapmıştım. Başvurudan 10 gün sonra arandım ve tarafıma 2 adet form gönderildi.

1. Teknik deneyim formu

2.Genel görüşme formu

Formların içeriklerini kısaca açmak istiyorum ;

1. Teknik deneyim formu

Bu formda açık açık sen ne biliyorsun kardeşim kaç yıldır bu işin içindesin neler yaptın bir yazıya dök diyorlar

Kaç proje geliştirdin?

Proje önderliği yaptın mı?

Hatta ve hattta bilgisayarınızda bulunan programlar neler?

Bunu formu kabartmak veya ne yazcam ya alsınlar öyle ne bildiğimi görsünler almazlarsa onlar kaybeder demek size kalmış.

2.Genel görüşme formu

Bu formda da üstadlar diyor ki sen nesin nasıl bir insansın kişiliğin nasıl kendini bana pazarla bakalım nasıl cümleler kuracaksın.

Gelecek planlarınız neler?

Bir önceki işiniz nasıldı?

Bir özelliğinizi değiştirmek isterseniz hangi özelliğinizi değiştirirdiniz gibi kritik noktalarınız ortaya çıkarmaya yarayan bir dizi kritik soruların bulunduğu form.

Bitti mi?  Tabiki hayır.

C# da bir consol uygulaması geliştirmemi istediler. Bir çatı oluşturulmuş solution olarak bana gönderilmiş ve yanına bir Microsoft Word dosyası eklenmiş içinde de istenenler, gereksinimler biri dizi anlatılmış. Ben sana bunu gönderiyorum sen bunu temel alarak programı isteklerimiz yönünde geliştir dediler.

veee süren sadece 2 saat

Evet 2 saat gayet normal ve yeterli bir zaman. Hazırladım gönderdim. Son 7 dakka kala :)

Sonuç ne mi oldu ? Tabiki benim açımdan hüsran. İyi tarafından bakmak adetimdir ya bundan çok şey öğrendim.

5 gün sonra e-mail yoluyla geri dönüş yapıldı. Aynen kopyalıyorum :)

Merhaba Burhan Bey,

Öncelikle yaptığınız çalışma için teşekkür ederiz. Uygulamanızdaki  code kalitesi iyi ve düzenli olmakla birlikte  aşağıdaki hataları içermektedir.

-          “Good programming practices” standartlarına göre eksikler içermektedir.

-          Gereksinimlerin belirtildiği dokumandaki istekleri tam olarak karşılamamaktadır.

-          Hazırladığınız uygulama son kullanıcı tarafından kullanılabilecek kalitede değildir.

Bunlar benim eksik yönlerim tabi onlar içinde önemli olsa gerek.

Aslında hepsi benim eksik yönüm değil. Örneğin; Gereksinimlerle ilgili olan madde inanın tamamiyle ingilizcemle alakalı çünkü geliştirilmesi için gönderilen yazılım ve istenen özelliklerin ve gereksinimlerin bulunduğı Word dökümanı tamamiyle ingilizceydi.

1. Burdan ne çıkartıyoruz. İngilizcemiz mükemmel olmalı.

Diğer önemli olan bence en önemli olan ikinci konu Good Programming Practices.

Nedir bu Good Programming Practices?

Hemen işe koyuldum ve araştırdım. Kısacası Code yazarken ne yapmalı ve ne yapmamalı nelere dikkat etmeli veya etmemeli. Yaptığın işi kuralına göre yapacaksın kardeşim diyor üstadlar. Hemen biraz daha açalım konuyu.

Bu her programcının bilmesi gereken kurallar silsilesi imiş ki şunlardan ibaretmiş ;

Dökümantasyon

  • Code unuzun ne yaptığını yorum tagları ile belirtin
  • Yıllar sonra bu code un ne iş yaptığını buralara yazdğınız notlar sayesinde  anlayabilir değiştirebilirsiniz.
  • İyi bir programcı sadece notları okuyarak code un yaptığı işi anlayabilmelir.

Örneğin bir fonksiyon, method  veya procedure yazarken aynı zamanda tanımlama bloğunuzun hemen üst kısmına

  • Methodunuzun vs. ne iş yaptığını
  • Aldığı argümanların tipini
  • Geriye gönderdiği değer varsa bunun da tipini
  • Varsa argümanlar için belirlenen kısıtların Yorum tag ları arasına yazılması gerekiyor

Bir diğer yandan yine Code yazarken dikkat edilmesi gereken kurallar da şöyle

  • Code yazma formatına sadık kalın :Eğer bir kodun okunabilirliği zor ise bundan daha kötü birşey olamaz. Bildiğiniz girinti çıkıntı tab ve space boşlukları yani dikkat edilmesi gereken önemli husus.
  • Değişken isimlendirme kurallarına sadık kalın : Örneğin bu bir üye değişken ise başına m_degisken veya _degisken iki kelimeden oluşması gerekiyorsa ve yine üye değişken ise ilk harfinin küçük olmasına 2.kelimenin harfinin büyük olmasına dikkat edin şöyle ki ; _indexDeger. Bu daha sonra yazacağınız sınıflarda veyua sınıflar içerisinde yazmanız gereken property lerde çakışmayı engelleyecek ve kolaylık sağlayacaktır.
  • Her zaman Global değişken kullanmayın : Bulduk global tanımlamayı saçalım ohh olurmu öyle şey idareli kullanmak şart.
  • Sabitlerin yerlerini sağlamlaştırın: sabitlerinizi ayrı bir sınıfta veya bir veritabnında tutun. Code unuzun sağına soluna serpilmiş şekilde bulunması.
  • Çıkış formatına takılı kalmayın : Fonksiyondan dönecek değeri öyle ayarlayın ki fonksiyonu çağıran kişi hangi formatta istiyorsa o formatta değer geri döndürsün. Örneğin sonu. html olarak dönsün veya ekrana yansısız veya yazıcıya gönderilsin gibi…
  • Notlar :

Arkadaşlar en önemli kısmı tekrar yazıyorum ingilizce Comment olarak geçiyor yorumlar diye çevrilir fakat be notlar hatta dipnotlar olarak çeviriyorum code unuzun ne iş yaptığını mutlaka ve mutlaka içine yazınız. Mümkünse ingilizce yazının çünkü herkesin bu code u anlaması için ortak dili kullanmak gerekir bu da çok önemli.

  • Hataları kontrol edin : Hata kontrolü çok önemli arakadaşlar. hataların hepsini kontol edin gerekirse log tutun programın kırılmadan çalışmaya devam etsin.
  • Hata mesajlarınıza dikkat edin : Hata mesajlarınız gerçekten bilgilendirici olmalı.

Örneğin “Veritabanına Bağlanılamıyor’” yerine
“Veritabanına şu tarihte şu nedenlerden dolayı bağlanılamıyor” olsun

Konuya devam edeceğim arkadaşlar şimdilik hoşçakalın..

Gözlerim ağrıdı da o yüzden…

Popularity: 4% [?]

Yeni Nesil %100 Yerli Sayac : Sayyac.Com

10 Ekim 2010
http://www.burhanemre.com/images/logo.png

Sayyac.Com Logo

Merhaba arkadaşlar bu yazımda size www.sayyac.com dan bahsedeceğim.
Nedir bu sayyac.com ?

Adından da anlaşılacağı gibi sayyac.om sayaçtır :) sayma işlemi yapar. Sizin sitenize özel sağladığı sayaç kodu ile web sitenize gelen ziyaretçilerin sayısını, oranlarını ve istatistiğini hatta ziyaretçinin sizi bulmak için kullandığı anahtar sözcükleri bile size gösterir.

Bu hizmeti zaten veren siteler mevcut fakat hiçbiri sayyac.com gibi sade ve kullanışlı değildir.

Ayrıca Sayyac.com %100 yerli organizasyondur. Hatırlayanlar olacaktır eskiden sayaç istatistikleri için yurt dışından tanıdıklarımıza sitemiz adına kod almalarını isterdik nedeni sayaç servisi veren sitelerin Türkiye için üye alımını kapatmış olmasıydı.

Sayyac.Com ne gibi hizmetler sunuyor?

  • Gerçek zamanlı rapor etme
  • Birçok türde tarifnameler
  • Yaygın referrer takibi
  • Etkili kılınan JavaScript (5 kat daha hızlı)
  • Zaman aralığınız
  • Trafik kısıtlaması yok!
  • Birkaç dakika içinde kurulum
  • Tamamen bedava!

Sayyac.Com’un  Özelikkleri neler?

Özet
Toplamlar ve ortalamalar
Temel takip 1
Unique Ziyaretçiler:

  • Günler
  • Haftalar
  • Aylar
  • Günün saatleri
  • Haftanın günleri
Temel takip 2
Dahil edilen, hariç tutulan yeni yüklemeler:

  • Günler
  • Haftalar
  • Aylar
Coğrafi takip
Alanlar
Ülkeler
Sistem Takibi
Tarayıcılar
Etkin JavaScript
İşletim sistemleri
Ekran çözünürlükleri
Ekran renkleri
Referrer Takibi 1
Son 20
Son 20 Arama motorları
Son 20 arama
Referrer Takibi 2
Kaynağa göre toplamlar:

  • Arama motoru
Arama motorundan verilen toplamlar:

  • En popüler arama motoru
Tüm anahtar sözcükler
Tüm website referrer’leri
Gibi birçok gelişmiş özelliğe sahip olan www.sayyac.com u herkese tavsiye ediyorum.
Üye olmak son derece basit Ücretsiz ve Halka Açık linkini tıklayarak saniyeler içerisinde kayıt olabilirsiniz.
Sayaç bilgilenizin gizli olmasını istiyorsanız sayyac.com un ücretli servisinden yararlanabilirsiniz.
İyi günler dilerim bir sonraki yazıda görüşmek üzere…
Esen Kalın…


Popularity: 2% [?]

Sitemizi N/A kişi takip ediyor.Aşağıdaki kutucuğa e-posta adresinizi girin sitemize yeni eklenen içerikten haberiniz olsun...

Sitemize üye olduktan sonra, e-posta adresinize bir onay maili gelecek. O maili onaylamazsanız, üyeliğiniz tamamlanmaz. 

RSS okuyucu ile takip edin...