Cuma, Ağustos 05, 2005

YSA motorumuz ! BPNetlib


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.

Hiç yorum yok: