YSA : Yapay Sinir Ağları (Artifical Neural Networks ANN veya kısaca NN) genellikle yapay zeka sistemlerinde lineer olmayan problemlerin çözümünde kullanılan bir metoddur.
YSA' ların pek çok çeşitleri vardır bunların başındada geri yayılımlı - beslemeli YSA dır
http://gpdev.net/ sitesinde yürütülen projelerden NeuroDriver da kullandığı YSA kodlarının
Derlenip library haline getirilerek kendi projelerimizde kullanılır hale getşrmeğe çalışacağız....
Bu kod aşaıdaki sınıfları -class- içerir
BPNode - Tek bir düğüm yada nöronu gösterir.
BPLink - Nöronlar yada düğmler arasındaki bağlantıyı yapar.
BPNet - Geri yayılımlı - beslemeli- YSA kodu
BPNode ve BPLink sınıfları kullanılarak YSA oluşturulur
Pattern - YSA'nın eğitimi için kullanılıcak verilerin
kullanımı için tasarlanmış bir sınıf.
http://gpdev.net/NeuroDriver_bpnet.html
adresinden bir inceleme yaptıktan sonra
http://gpdev.net/Downloads.html
adresinden
Neural Network Source Code BPNet.zip (11 K)
http://gpdev.net/Downloads/BPNet.zip
İndirin
BPNetLib diye bir dizin açın ve bu dizinin içine BPNet.zip dosyasını açın
İçinden aşağıdaki doslayar çıkıyor..
BPNet.h
BPNet.cpp
BPNode.h
BPNode.cpp
BPLink.h
BPLink.cpp
Pattern.h
Pattern.cpp
Readme.txt
CBuider’ı açın ve File->New->Library seçeneğini seçin
Project->Add to Project den BPNetLib dizinindeki dosyaların tamamını ekleyin
Files->Save Project As… den projeyi BPNetLib dizinine BPNetLib diye kaydedin
Project->Build diyerek derlemeye başlayın undifened symbol i diye hata aldığınız satırlara
int i
diye tanımlamada bulunun warninglere aldırmayın
sonuçta BPNetLib.lib diye bir dosya oluşturulacak
bu projeyi kadedip kapatın
yeni bir proje oluşturun application.
Projects-> Add to Project den BPNetLib dizinindeki BPNetLib.lib dosyasını projeye ekleyin
Projects->Options->include path da BPNetLib dizinini ekleyin…
Artık BPNet kütüphanemizi uygulamada kullanmaya başlayabiliriz…
http://gpdev.net/NeuroDriver_bpnet.html
adresinde kullanımı ile ilgili tanıtımlar var
Tanımlama
Learnin Rate (lr): öğrenme hızı genellikle (0,05 -0,75) aralığında
Momentum (mt : momentum değeri (0-0,9) aralığında
Num Layers : YSA'nın katman sayısı
Daha sonraki parametreler her katmanın node sayılarını gösteriyor
Yani örnekte : 3 katmanlı bir YSA tanımlanıyor
birinci katman 2 ( giriş değerleri)
ikinci katman 12 ( gizli katman)
üçüncü katman 3 node dan oluşuyor. (çıkış değerleri)
Eğitim: YSA'yı eğitmek için aşağıdaki işlemleri yapmak gerekiyor…
1 ) giriş değerlerinin verilmesi
2) Bu değerlerin ilerletilmesi
3) çıkış değerlerinin verilmesi hata hesabı için
4) geriye doğru besleme
// 1 ) giriş değerlerinin verilmesi
// 2) Bu değerlerin ilerletilmesi
// 3) çıkış değerlerinin verilmesi hata hesabı için
// 4) geriye doğru besleme
// 1 ) giriş değerlerinin verilmesi
bpnet->setInput( 0.4, 0 ); // set value 0.4 for first input node
bpnet->setInput( 0.6, 1 ); // set value 0.6 for second input node
// 2) Bu değerlerin ilerletilmesi
bpnet->run();
// 3) çıkış değerlerinin verilmesi hata hesabı için
bpnet->setError( 0.1, 0 ); // set desired value 0.1 for first output node
bpnet->setError( 0.8, 1 ); // set desired value 0.8 for second output node
bpnet->setError( 0.1, 2 ); // set desired value 0.1 for third output node
// 4) geriye doğru besleme
bpnet->learn();
bunu bir döngünün içinde istenen hata değerine ulaşılıncaya dek tekrarla
pattern sınıfını kullanarak
// 1 ) giriş değerlerinin verilmesi
bpnet->setInput( pTrainingPattern );
// 2) Bu değerlerin ilerletilmesi
bpnet->run();
// 3) çıkış değerlerinin verilmesi hata hesabı için
bpnet->setError( pTrainingPattern );
// 4) geriye doğru besleme
bpnet->learn();
şeklinde de yapılabilir…
Test : eğitim işleminden sonra test için veya kullanım
1) Giriş değerlerini verin
2) YSA'yı çalıştırın
3) Çıkış değerlerini alın
//1) Giriş değerlerini verin
bpnet->setInput( 0.3, 0 );
bpnet->setInput( 0.763, 1 );
//2) YSA'yı çalıştırın
bpnet->run();
//3) Çıkış değerlerini alın
double value0 = bpnet->getOutput(0);
double value1 = bpnet->getOutput(1);
double value2 = bpnet->getOutput(2);
şimdilik bu kadar detaylı bilgi için ilgili siteyi ziyaret edin.
Fırsat bulabilirsek inşallah ilerde uygulamasıyla ilgilide bir şeyler de yazarız.