+2
Panpalarım bu ara yapay nöral ağ işine taktım gerçekten çok büyük potansiyeli var harika şeyler yapılabiliyor. C# ile bir nöral ağ simülasyonu kodu yazdım istediğim boyda ve katman sayısında nöral ağı yapıp eğitebiliyorum. Ufak nöral ağları sorunsuzca eğitiyorum ama büyük nöral ağların eğitimi çok uzun sürüyor.
100x100 piksellik alanda çizilen sayıyı tanıyacak şekilde nöral ağımı eğitmek istedim, böyle bir şey için 10000 giriş (her bir piksel için bir tane) nöronuna, en az 10000 gizli katman nöronuna ve 10 tane de çıkış (her bir rakam için bir tane) nöronuna ihtiyacım vardı.
Yukarıda bahsettiğim büyüklükteki ağın eğitilmesi için Intel Core i7 6700 işlemcimle yaklaşık 90 dakikadır bekliyorum, sadece 20 tane örnek ve her bir örnek için 100000 tekrar bu kadar uzun sürmemeli.
Nöral ağı C ile yazıp iyi bir optimizasyon da yapabilirdim ama ihtiyacım olan hız kazanımı birkaç kat değil, en az 500 kat. Bu kadar büyük bir hız kazanımını optimizasyonla veya Assembly veya C ile yazarak sağlamam mümkün değil.
işlemcim de iyi, kodda da sorun yok neden bu kadar yavaş çalışıyor bu?
Bir diğer sorunum da nöronlarda kullandığım sigmoid aktivasyon fonksiyonu çok büyük sayılarda otomatik olarak 1 olarak dönüyor, bu yüzden nöral ağımda çok fazla nöron olursa sonuç sapıtıyor.
Bu işlerden anlayan birileri varsa aydınlatsın beni.
Edit: Koddaki gereksizlikleri düzeltip sıfırdan yazınca beklemediğim kadar yüksek bir hız kazancı elde ettim, aktivasyon fonksiyonunun yüksek sayılarda 1 olarak dönmesi sorununu da sayıyı limitleyerek (Arduino'daki map gibi) çözdüm şu an müthiş çalışıyor yardım eden etmeyen herkese teşekkürler.
Hatta az önce basit bir rakam tanıma sistemi yaptım birkaç el yazısı rakamı sisteme yükledim şu anda %97 doğrulukla girdiğim her rakamı biliyor bu yapay nöral ağlar müthiş bir şey.
Edit 2: Nöral ağı C ile yeniden yazdım beklediğimden çok daha fazla performans artışı sağladım. JIT sanal makinesinin ağırlığından kurtuldum sonunda.