AtasoyWeb - Hüseyin Atasoy
AtasoyWeb
Hüseyin Atasoy'un Programlama Günlüğü

Geri Yayılımlı Yapay Sinir Ağı Kütüphanesi

Katman ve nöron sayıları ihtiyaca göre ayarlanabilen geri yayılımlı yapay sinir ağları oluşturmak, bu ağları eğitmek, kaydetmek ve dosyadan geri yüklemek için gerekli olan fonksiyonları barındıran kütüphane.
Geri yayılımlı yapay sinir ağı
Kütüphane: GYYSA.dll
Son sürüm: 1.3.1
Örneklenen diller: C++, VB6, C#, VB.NET
Dosya: tıklayınız

İlgili yazılar: Geri Yayılımlı Yapay Sinir Ağları, GYYSA.dll İle OCR

Önemli not: Çok fazla nöron içeren ağlarda, hata fonksiyonu çok fazla yerel minimum içereceğinden, hata sıfıra yaklaştırılırken çok daha küçük adımlar kullanılmalıdır. Bu amaçla, adım büyüklüğünü ayarlayan öğrenme katsayısının, fazla sayıda nöronu olan ağlarda çok küçük seçilmesi gerekmektedir...

Güncellendi (06/04/2011, v1.3)

  • Çok katmanlı ağlarda problem yaratan bir kodlama hatası giderildi.
  • Ağ oluşturulurken girilen ve daha sonra değiştirilemeyen öğrenme katsayısının eğitim fonksiyonuna girilmesi sağlanarak eğitilmiş bir ağın yeniden eğitilmesi istendiğinde bu katsayının serbestçe seçilebilmesi sağlandı.
  • Dendrit ağırlıkları güncellenirken, değişime bir önceki değişimin belli bir oranda eklenmesi ve böylece öğrenim sürecinde momentum etkisi yaratılarak yerel minimum noktalara takılmanın güçleştirilmesi sağlandı. Momentum etkisi istenmiyorsa momentum parametresine 0 değeri girilebilir.
  • Tüm örnek kodlar yeni sürüme uyarlandı.

Güncellendi (04/03/2011)

  • Normalde sadece 0 ve 1 değerlerini tutması istenen ve önceleri 'short int' olarak seçilen veri tipi, 'byte' ile değiştirildi.
  • Her katmana yerleştirilebilecek maximum nöron sayısı 255 ile sınırlandırıldı.
  • Bazı diller ile uyumsuz olan 'bool' dönüş tipi, daha uyumlu 'BOOL' tipi ile değiştirildi.
  • Ağı dosyadan okuma esnasında, verilerin uygun veri tiplerine dönüşümünde kullanılan tampon bellek alanının yetersiz miktarda ayrılmasından kaynaklanan hata giderildi.

Güncellendi (14/02/2011)

  • Kullanımı örneklemek amacıyla pakete C# ve VB.NET proje dosyaları eklendi.

Güncellendi (07/02/2011, v1.2)

  • Hatirla fonksiyonunun kullanımını kolaylaştırmak ve uyumluluğunu arttırmak amacıyla değişiklikler yapıldı. Önceki sürümde, bu fonksiyondan dönen diziyi bazı dillerde okumak için ek fonksiyonlar gerekebiliyordu. Yapılan değişiklik ile çıkış dizisinin, fonksiyonu çağıran dil tarafından oluşturulup kütüphaneye yollanması sağlandı.

Güncellendi (23/01/2011, v1.0.1.87)

  • Çok fazla nöron içeren ağlar eğitilirken meydana gelen ve bellek bölgelerinin eksik ayrılmasından kaynaklanan hata giderildi.
  • İşlemlerin çoğu herbiri 8 bayt olan double tipleri üzerinde gerçekleştiriliyordu. Kütüphanedeki tüm double dizileri, herbir elemanı 4 bayt olan float dizileri ile değiştirildi.

Bundan yaklaşık 2 yıl önce VB6 ile bir YSA sınıfı yazıp bu sınıfı kullanarak birkaç uygulama yapmış ve uygulamalar ile ilgili bilgileri yayınlamıştım. Ziyaretçilerden konu ile ilgili, bir kısmı beni aşan pek çok soru geldi. Bu konu ile ilgilenenler için geri yayılımlı yapay sinir ağı konusunda ihtiyaç duyacakları fonksiyonların tümünü barındıran bir kütüphane hazırladım.

Geri yayılımlı yapay sinir ağı modeli ile ilgili bilgi edinmek için, şu an içinde bulunduğunuz kategorideki diğer yazılara göz atabilirsiniz.

Kütüphane yardımıyla istediğiniz kadar katmandan(tabi ki en az 2) ve her katmanda istediğiniz kadar nörondan oluşan yapay sinir ağları oluşturabilirsiniz. Oluşturduğunuz ağları eğitebilir, eğitilmiş ağları dosyalara kaydedip, sonraki bir zamanda eğitilmiş halleri ile geri yükleyebilirsiniz.

Dosyanın içinde, başlangıçta en sık denenen örnek olan XOR işlemi ile YSA'yı eğiten, C++ ve VB6 dilleriyle yazdığım 2 örnek var. Kütüphaneyi kullanmadan önce C++ Kütüphaneleri Ve Diller Arası Uyumsuzluklar yazısını okumanız faydalı olabilir.

Fonksiyonlar

Kütüphanenin içindeki fonksiyonlar:

BOOL AgOlustur(byte* KatmanDizisi, byte KatmanSayisi)
BOOL Egit(float OgrenmeKatsayisi, float Momentum, byte* GirisDizisi, byte* CikisDizisi)
void Hatirla(byte* GirisDizisi, float* CikisDizisi)
BOOL AgiKaydet(char* DosyaYolu)
BOOL AgiYukle(char* DosyaYolu)

AgOlustur

KatmanDizisi: Katman dizisi her katmanda kaç nöron bulunacağını bildirecek olan tamsayılardan oluşmalıdır. Fonksiyona bu dizinin ilk elemanının referansı gönderilmelidir.

KatmanSayisi: Kaç tane katman oluşturulacağını belirler. Bu değer, katman dizisinin boyutu kadar olmalıdır.

Fonksiyon başarılı olursa true, başarısız olursa false dödürür.

Egit

OgrenmeKatsayisi: Ağın öğrenme hızını ayarlayan sayıdır ve 0 ile 1 arasında değerler alır.

Momentum: Dendrit ağırlıkları güncellenirken, önceki değişimin yeni değişime hangi oranda ekleneceğini belirleyen katsayıdır. Bu katsayı öğrenme sürecine, hareket eden bir cismin sahip olduğu momentum etkisini kazandırır. Katsayı sıfırdan büyük girildiğinde, dendrit ağırlıklarında yapılacak değişim ani olarak artıp azalmaz. Böylece yerel minimumlara rastlandığında öğrenme sürecinin aniden yavaşlaması veya durması engellenir. Parametreye 0 veya 1 arasında değerler verilebilir. Öğrenme sürecinde momentum etkisi istenmiyorsa 0 değeri verilmelidir.

GirisDizisi: Sadece 0 veya 1lerden oluşan tamsayı dizisi. Fonksiyona dizinin ilk elemanının referansı gönderilmelidir.

CikisDizisi: Verilen giriş ile döndürülmek istenen çıkış dizisidir. Bu dizi yine sadece 0 veya 1lerden oluşan tamsayı dizisi olmalıdır. Fonksiyona dizinin ilk elemanının referansı gönderilmelidir.

Fonksiyon başarılı olursa true, başarısız olursa false döndürür.

Hatirla

GirisDizisi: Sadece 0 veya 1lerden oluşan tamsayı dizisi. Fonksiyona dizinin ilk elemanının referansı gönderilmelidir.

CikisDizisi: Bu parametreye çıkışları tutacak olan dizinin ilk elemanının referansı gönderilmelidir. Dizinin elemanları kütüphane tarafından doldurulur.

AgiKaydet

DosyaYolu: Ağın kaydedileceği dosyanın konumunu belirler. Tam yol yazılabileceği gibi sadece dosya adı da yazılabilir. Ağ dosyaya düz metin formatında kaydedilir. Fonksiyona, dosya yolunu bildirecek olan karakter dizisinin ilk harfinin adresi yollanmalıdır.

Fonksiyon başarılı olursa true, başarısız olursa false dödürür.

AgiYukle

DosyaYolu: Ağın bilgilerinin yer aldığı dosyanın konumunu belirler. Tam yol yazılabileceği gibi sadece dosya adı da yazılabilir. Fonksiyona, dosya yolunu bildirecek olan karakter dizisinin ilk harfinin adresi yollanmalıdır.

Fonksiyon başarılı olursa true, başarısız olursa false dödürür.

Uyumsuzlukları elimden geldiği kadar gidermeye çalıştım. Yine de kütüphaneyi başka dillerde kullanırken tür uyumsuzluklarının yol açabileceği problemlerle karşılaşmamak için C++ tipleri ile eşit boyutlarda tipler kullandığınızdan emin olun...

Yazar: Hüseyin Atasoy
Posted: 21/01/2011 19:52
Keywords: gyysa dll, yapay sinir ağı kütüphanesi, geri yayılımlı, back propagation

Leave Comment

 
You are replying to comment #-1. Click here if you want to cancel replying.

 

Comments (6)

Samed Önen
Reply
23/03/2011 18:19
#1

hocam öncelikle tskler emeğiniz için. Ama ben C  dosyaından çıkan c kodlarını dev c  da çalıştıramadım sorun nedir acaba....Kolay gelsin

Hüseyin Atasoy
Reply
24/03/2011 08:52
#2

Paketteki C++ kodunu Code::Blocks ile yazıp 'GNU GCC Compiler' ile derlemiştim. Kodlar Dev C++'ta problem yaratıyor olabilir.
Kütüphane ile ilgili açıklamalar bu sayfada mevcut, kod örnekleri de elinizde. Kodu düzenlemeyi veya yeniden yazmayı deneyebilirsiniz.

beren erdal
Reply
27/03/2012 13:43
#3

kodlara nerden nasıl ulaşırız acaba?

Hüseyin Atasoy
Reply
02/04/2012 21:47
#4

Kütüphanenin kodlarını kastediyorsanız, kaynak kodlar dağıtıma dahil değil. Kütüphanenin kullanımı ile ilgili çeşitli dillerde yazılmış örnek kodlar ise kütüphane ile birlikte indirilebilir.

zeynel şenol
Reply
18/12/2019 20:54
#5

hocam merhaba, programa bir data ekleyip, onu eğitmemiz mümkün mü bu kütüphaneyle. lütfen yardımınızı bekliyorum

Hüseyin Atasoy
Reply
06/01/2020 22:39
#6

Merhaba,
Nöron ve katman sayısını ihtiyacınıza göre ayarlayıp kendi ağınızı oluşturarak istediğiniz veri ile eğitebilirsiniz. Başlamak için dosyadaki örnek kodlardan faydalanabilirsiniz.

 
Şu an bu sayfada 1, blog genelinde 11 çevrimiçi ziyaretçi bulunuyor. Ziyaretçiler bugün toplam 2356 sayfa görüntüledi.
 
Sayfa 49 sorgu ile 0.057 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2024 Hüseyin Atasoy