Yapay Sinir Ağları Nedir

Yapay Sinir Ağları Hakkında özet bilgiler

Fann Nedir

Fast Artifical Neural Networks Kütüphanesi hakkında

FannTool

Nedir Ne işe yarar Nasıl Kullanırız

What are Artificial Neural Networks ?

short info about Artificial Neural Networks

What is FANN ?

about Fast Artifical Neural Networks library

FannTool

What is and How to use

Artificial Neural Networks etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Artificial Neural Networks etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Ekim 2015 Perşembe

Staged Tuning: A Hybrid (Compile/Install-time) Technique for Improving Utilization of Performance-asymmetric Multicores






Emerging trends towards performance-asymmetric multicore pro-
cessors (AMPs) are posing new challenges, because for effective
utilization of AMPs, code sections of a program must be assigned
to cores such that the resource needs of the code sections closely
match  the  resources  available  at  the  assigned  core.  Computing
this assignment can be difficult especially in the presence of un-
known or many target AMPs. We observe that finding a mapping
between the code segment characteristics and the core character-
istics is inexpensive enough, compared to finding a mapping be-
tween the code segments and the cores, that it can be deferred un-
til installation-time for more precise decision. We present staged
tuning which combines extensive compile time  analysis  with in-
telligent binary customization at install-time. Staged tuning is like
staged compilation, just for core assignment. Our evaluation shows
that staged tuning is effective in improving the utilization of AMPs.
We see a 23% speedup over untuned workloads.

 
.....
Neural Network Training
We  use  the  FANN  library  [32]  for constructing and training our neural networks. In our experiments,we  compute  a  grouping  (i.e.,  core  assignment)  for  each  individual benchmark.

Staged Tuning: A Hybrid (Compile/Install-time) Technique for Improving Utilization of Performance-asymmetric Multicores

tyler Sondag ( Intel Labs ) Hridesh Rajan ( Iowa State University )

23 Haziran 2015 Salı

YSA ile Maç Sonucu Tahmini

YSA ile Maç Sonucu Tahmini


Bu çalışmada FannTool kullanarak Futbol Maçları için sonuç tahmini yapan YSA modelinin dizayn edip eğitim ve test aşamaları adım adım açıklanmış, sonuçlar değerlendirilmiştir. Öncelikle dizayn edeceğimiz YSA modeli için problemi tanımlayalım. Futbol maçlarının olası 3 sonucu vardır; Galibiyet Beraberlik Mağlubiyet. Girdi olarak Ev Sahibi ve Misafir takıma ait sezon boyunca oynadığı maçlar sonucunda çıkan 9 farklı performans kriteri kullanılacaktır. YSA dan beklenen eğitim sonunda soru olarak verilen Ev Sahibi ve Misafir Takım performansları için muhtemel maç sonucunu hesaplamak.

....

 Her ne kadar Futbol maçları sonuçlarını yüksek doğrulukla tahmin edemesek te Yapay Sinir Ağlarının, FANN kütüphanesinin, FanntTool yazılımının her alanda nasıl kullanılabileceğine örnek olabilecek bir çalışma yapmış olduk.

KARAR DESTEK SİSTEMLERİ DERSİ
FİNAL ÖDEVİ
YAPAY SİNİR AĞLARI UYGULAMASI
 İdris AKBIYIK

Download ;

9 Eylül 2014 Salı

First Tests on Near Real Time Ice Type Classification in Antartica



In this paper, we explore the capabilities of an algorithm for ice type classification. Our main motivation and exemplary application was the recent incident of the research vessel Akademik Shokalskiy, which was trapped in pack ice for about two weeks. Strong winds had driven ice floes into a bay, forming an area of pack ice, blocking the ship's advancement. High-resolution satellite images helped to assess the ice conditions at the location. To extract relevant information automatically from the images, we apply an algorithm that is aimed to generate an ice chart, outlining the different ice type zones such as pack ice, fast ice, open water.

The algorithm is based on texture analysis. Textures are selected that allow recognition of different structures in ice. Subsequently, a neural network performs the classification. Since results are output in near real time, the algorithm offers new opportunities for ship routing in ice infested areas.
....

For the artificial neural network, we rely on the popular and well-tested FANN library [6]. We use 10 input neurons, two hidden layers with 8 and 9 neurons, respectively. Training procedure is RPROP. The number of output neurons depends on the number of classes. For the scene presented in this paper, we use neurons for each of the following ice types: fast ice, highly deformed pack ice, little deformed pack ice, and open water with high as well as low ice concentration. Land ice was visible in the scene yet was not used in the classification, since it is irrelevant once land masking is applied. FANN output is shown in Figure 6.

As can be seen, it coincides well with the real ice conditions noted in Figure 2. Only small parts of the images are misclassified: The left margin of the open water zone is classified as fast ice. The fast ice zone is speckled with “ponds” of open water and pack ice in FANN output.

1 Aralık 2013 Pazar

Performance Evaluation of Lateration, KNN and Artificial Neural Networks Techniques Applied to Real Indoor Localization in WSN



Leomário Machado, Mauro Larrat and Dionne Monteiro
Research Group on Computer Networks and Multimedia Communication
Federal University of Para – UFPA
Belém/PA - Brazil

Abstract-In Wireless Sensor Networks, several protocols and algorithms seek to prolong the network lifetime; among them, the localization algorithms are used as an accessory to provide the smallest distances for sending messages. This paper compares the Lateration, KNN and ANN as localization techniques to estimate planar coordinates using the RSSI in an indoor environment using a real WSN based on IRIS motes. The results show that a well worked out ANN is superior to Lateration and KNN.


Our application of ANN used for the localization of nodes in WSN is accomplished through the acquisition of RSSI from the messages sent from each node. Subsequently, these data are used to train and validate the network. For each location point, the mean and standard deviation are calculated to identify the 10% worst samples. With this, only accurate samples are used to train the ANN. To train the ANN, the collected points (x, y) are normalized maintaining those data output values between 0 and 1. To define the architecture of the ANN, several tests are done to achieve a satisfactory configuration of the ANN, i.e., number of hidden layers, number of neurons in each layer, activation function for each layer or neuron and training algorithm.

7 Kasım 2013 Perşembe

ESTIMATIVE OF ULTRAVIOLET SOLAR RADIATION IN BOTUCATU/SP/BRAZIL UTILIZING MACHINE LEARNING TECNICS.


Botucatu, 2013. XXXp. Dissertação (Mestrado em Agronomia / Energia na Agricultura) – Faculdade de Ciências Agronômicas, Universidade Estadual Paulista.
Author: THIAGO DO NASCIMENTO SANTANA DE ALMEIDA

SUMMARY
In this papper is evaluated the estimation of daily solar ultraviolet radiation (UV) using machine learning techniques in Botucatu / SP / Brazil. To develop the model was utilized the artificial neural networks with linear function, the support vector machine with linear function and with RBF function. As input to each of the techniques, were tested five groups containing different weather variables measured as routine in Botucatu radiometry solar station.

21 Eylül 2013 Cumartesi

Novel Patterns and Methods for Zooming Camera Calibration

Novel Patterns and Methods for Zooming Camera Calibration
Andrea Pennisi, Domenico Bloisi, Claudio Gaz, Luca Iocchi, Daniele Nardi
Department of Computer, Control, and Management Engineering
Sapienza University of Rome
via Ariosto 25
00185, Rome, Italy
In Journal of WSCG, volume 21, 2013.

Camera calibration is a necessary step in order to develop applications that need to establish a relationship between image pixels and real world points. The goal of camera calibration is to estimate the extrinsic and intrinsic camera parameters. Usually, for non-zooming cameras, the calibration is carried out by using a grid pattern of known dimensions (e.g., a chessboard). However, for cameras with zoom functions, the use of a grid pattern only is not sufficient, because the calibration has to be effective at multiple zoom levels and some features (e.g., corners) could not be detectable. In this paper, a calibration method based on two novel calibration patterns, specifically designed for zooming cameras, is presented. The first pattern, called in-lab pattern, is designed for intrinsic parameter recovery, while the second one, called on-field pattern, is conceived for extrinsic parameter estimation. As an application example, on-line virtual advertising in sport events, where the objective is to insert virtual advertising images into live or pre-recorded television shows, is considered. A quantitative experimental evaluation shows an increase of performance with respect to the use of standard calibration routines considering both re-projection accuracy and calibration time.

...
The second video, that contains the “+” sign captured at different zoom levels, is used to refine the calibration
parameters, in particular, the principal point (u;v) and the focal lengths fx and fy, and the radial distortion
coefficients k1 and k2 are considered. For regularizing these parameters an Artificial Neural Network (ANN) based approach [FANN Fast Artificial Neural Networks ] is used. Two different ANNs have been implemented, the former for managing the lower zoom levels, the latter for the higher ones.

28 Ağustos 2013 Çarşamba

Prediction of the energy values of feedstuffs for broilers using meta-analysis and neural networks


Prediction of the energy values of feedstuffs for broilers using meta-analysis and neural networks
F. C. M. Q. Mariano,C. A. Paixão,R. R. Lima,R. R. Alvarenga,P. B. Rodrigues and G. A. J. Nascimento (2013).
animal, Volume 7, Issue09, September 2013 pp 1440-1445
http://journals.cambridge.org/action/displayAbstract?aid=8962130


Abstract

Several researchers have developed prediction equations to estimate the metabolisable energy (ME) of energetic and protein concentrate feedstuffs used in diets for broilers. The ME is estimated by considering CP, ether extract, ash and fibre contents. However, the results obtained using traditional regression analysis methods have been inconsistent and new techniques can be used to obtain better estimate of the feedstuffs’ energy value. The objective of this paper was to implement a multilayer perceptron network to estimate the nitrogen-corrected metabolisable energy (AMEn) values of the energetic and protein concentrate feeds, generally used by the poultry feed industry. The concentrate feeds were from plant origin. The dataset contains 568 experimental results, all from Brazil. This dataset was separated into two parts: one part with 454 data, which was used to train, and the other one with 114 data, which was used to evaluate the accuracy of each implemented network. The accuracy of the models was evaluated on the basis of their values of mean squared error, R 2, mean absolute deviation, mean absolute percentage error and bias. The 7-5-3-1 model presented the highest accuracy of prediction. It was developed an Excel® AMEn calculator by using the best model, which provides a rapid and efficient way to predict the AMEn values of concentrate feedstuffs for broilers.

FannTool;

 The software FANN TOOL 1.2 (http://code.google.com/p/fanntool/) was used to implement the networks.


29 Mart 2013 Cuma

Yacht Hydrodynamics

Yapay Sinir Ağlarının Gemi İnşa mühendisliği konusundaki bir uygulamasından bahsedeceğiz.

Yaz dizaynı için konun uzmanı olmadığımızdan  orjinal verilere atıfta bulunacağız

Data Set Information:

Prediction of residuary resistance of sailing yachts at the initial design stage is of a great value for evaluating the ship’s performance and for estimating the required propulsive power. Essential inputs include the basic hull dimensions and the boat velocity.

The Delft data set comprises 308 full-scale experiments, which were performed at the Delft Ship Hydromechanics Laboratory for that purpose.
These experiments include 22 different hull forms, derived from a parent form closely related to the ‘Standfast 43’ designed by Frans Maas.

Attribute Information:

Variations concern hull geometry coefficients and the Froude number:

1. Longitudinal position of the center of buoyancy, adimensional.
2. Prismatic coefficient, adimensional.
3. Length-displacement ratio, adimensional.
4. Beam-draught ratio, adimensional.
5. Length-beam ratio, adimensional.
6. Froude number, adimensional.

The measured variable is the residuary resistance per unit weight of displacement:

7. Residuary resistance per unit weight of displacement, adimensional. 

Veri setine UC Irvine Machine Learning Repository den Yacht Hydrodynamics adıyla ulaşabilirsiniz.

Veriler  Delft Teknik Üniversitesinin  Gemi Hidromekanik Labaratuvarındayapılan deneylerden alınmıştır. Bizim Çalışmamıza benzer bir çalışma da yapılmıştır

"Prediction of Total Resistance Coefficients Using Neural Networks"
 I.Ortigosa, R. López and J.García
Daha detaylı bilgi ve Çalışmaya ulaşmak için bakınız sayfa 15

Biz öncelikle Verileri FANNTool 'un DataProcessing kısmıyla açıp verileri normalize edip FANN formatına çevirdik. ilk 6 sütün giriş Son sütüun Çıkış değeri olarak  seçildi. Verilerin 184 adedi Eğitim ve 124 adedi Test için kullanıldı. Değişik konfigurasyonlarda Pek çok YSA eğitildi.
Ulaşılan sonuçları şöyle gösterelim




Bu sonuçlar Test verileri üzerinden çıkarılmıştır, Eğitim veri sonuçları daha da başarılıdır.


10 Mart 2013 Pazar

Baraj Yatay Deformasyon Modellenmesi


Barajlarının deformasyonların ölçülmesi ve modellenmesi, Güvenlik açısında önemlidir. Biz bu çalışmamızda Yapay Sinir Ağları ile bir modelleme yapacağız.

Veriler :

"Schlegeis barajı Avusturya’nın en önemli hidroelektrik santrallerinden biridir. Çift eğrilikli beton kemer şeklinde 1973 yılında hizmete giren baraj 131m yüksekliğinde ve kret uzunluğu 725m’dir.

Asılı (Düz) ve ters pendulumlar kemer barajın düşey ekseni boyunca gövdenin bağıl yatay hareketlerini doğruluklu olarak belirlemek için yerleştirilen düzeneklerdir. 




Gövdenin oturduğu kaya zemine gömülen ters pendulum teli sayesinde gövdenin mutlak yatay hareketleri 0.5mm doğrulukla belirlenebilir.


Su kotu değerleri 9 yıllık dönem boyunca her gün sabah saat 09:00 da kaydedilen baraj gölü su düzeyi kayıtlarıdır. Hava sıcaklığı, 24 saatlik kayıtların günlük ortalama değerlerini gösterir. Analize konu olan pendulum değerleri ise, barajın en büyük düşey kesitinin yatay konum değişimleridir. Bu değişimler memba(su tarafı), mansap(gövdenin su olmayan tarafı) ile gövdenin dayandığı vadi yamaçlarına (sağ ve sol sahil) göre tanımlanır. Elektronik olarak kaydedilen bu değerler; kuzey (memba), güney (mansap), doğu (sağ sahil) ve batı  (sol sahil) yönleriyle ifade edilir."

 Veriler ve gereken bilgiler YTÜ meslek yüksek okulu öğretim üyesi ve Harita Y. Mühendisi Seyfullah Demirkaya 'dan alınmıştır

Modelleme

 Biz bu çalışmamızda deformasyon modellemesini Yapay Sinir Ağlarıyla yaptık, Öncelikle verilerin
YSA sistemine uygulanmasına bakalım

 Girişler :
W_LEVEL  : Su sevyesi metre
T_H12_UP, T_H12_MI, T_H12_DO , T_H15_UP , T_H15_MI,T_H15_DO   :
Beton sıcaklıkları
   UP  : Upstream: Memba (Baraj gövdesinin su tarafı)
   DO : Downstream: Mansap (Barajın hava olan tarafı)
   MI  : Mid: Gövdenin ortası 
T_AIR_M :  Hava Sıcaklığı
Çıkış :
PENDULUM : Ölçülen deformasyon ( mili metre )

Giriş ve çıkış değerleri kararlaştırıldıktan sonra, veriler üzerinde gereken normalizasyon işlemi yapılmış ve Eğitim ve Tes için veriler ikiye ayrılmıştır.

YSA kütüphanesi olarak FANN kullanılmıştır. YSA eğitimi FannTool ile  gerçekleştirilmiştir. İstendiğinde Eğitilmiş YSA ile Tahmin yapmak üzre program yazılabilir...



Sonuç:


Eğtim Verileri için Ortalama Mutlak Hata Yüzde :  %  2.4
Test Verileri için Ortalama Mutlak Hata Yüzde :     % 3,67


2 Mart 2013 Cumartesi

Yapay Sinir Ağları ile Epilepsi İçin Otomatik EEG analizi


Özet :

Bu çalışma Epileptik ve Normal EEG verilerinin , Yapay Sinir Ağları ile ve PoincarePlot2D metoduyla çıkarılan öznitelikleri kullanarak sınıflandırılması üzerinedir.

Giriş :


Epilepsi Dünya nufusunun %1'ni etkileyen bir rahatsızlıktır. Beynimiz milyarlarca sinir hücresinden oluşur ve bu hücreler üzerinde sürkeli bir elektiriksel iletişim vardır. Epilepside Beynin normalde çalışması ile ilgili elektriğin, aşırı ve kontrolsüz yayılımı sonucu oluşan ve herhangi bir uyarı olmaksızın tekrarlayan, çoğunlukla geçici bilinç kaybına neden olan bir hastalıktır.

EEG yani Elektroensefalografi beynin elektriksel aktivitesini ölçmek için kullanılan bir metoddur. Aynı zamanda epilepsili hastaları ve şüphe oluşturan nöbet bozuklukları olan hastaları incelemekte kullanılan önemli bir tetkiktir.

Uzun süreli EEG sinyallerinin incelenmesi ve istenen bilgilerin çıkarılması oldukça uzun zaman alan ve tecrübe gerektiren bir iştir. Bu yüzden  Otomatik EEG analiz sistemleri üzerinde çalışmalar yapılmaktadır. Bu çalışmada benzeri bir sistem üzerinedir.

Metod :

Pek çok Yapay Zeka uygulamasında olduğu gibi ilk aşamalardan biri Öznitelik Çıkarma işlemidir. Biz bu çalışmada PoicarePlot2D diye adlandırdığımız -deneysel- bir metodu uyguladık.

Poicare Plot  adını fransız matematikçi H. Poincare den alan bir metoddur.  Basitçe anlatırsak
X1, X2,... Xn 
şeklindeki bir zaman serisinin  2 boyutlu bir koordinat sisteminde  sırayla

 (X1, X2 ) ,   (X2, X3 ) ,  (X3, X4) , .... ,   (Xn-1, Xn )

noktalarının  çizilmesidir.

 Mesela Basit bir sinus serisinin

Poincare Grafiğine dönüşmüş hali

 Şeklinde görünür.

Öznitelik çıkarma işleminde veri seti ile Poincare Grafiği oluşturulur ve çıkan şeklinden yola çıkılarak 20x20 lik bir matris oluşturulur.


Sinus verisi için çıkarılan öznitelik matrisi bu şekildedir.

İkinci aşama ise çıkarılan özniteliklerin seçilecek bir Yapay zeka Algoritmasıyla sınıflandırılmasından ibarettir. Biz çalışmamızda Yapay Sinir Ağı metodunu kullandık. YSA için FANN kütüphanesini kullandık .  Eğitimi ve sonuçların testi içinde FannTool programından faydalandık.

Veri Seti :


Çalışmamızda kullandığımız ,  Bonn Üniversitesinde,  Epileptoloji Bölümünün hazırladığı  bir EEG veri setidir.  Verilere  bu adresden ulaşabilirsiniz. 
Bütün kayıtların alımı 128 kanallı kayıt sisteminde 12-bit A/D dönüstürücü ile yapılmıştır. Örnekleme frekansı 173.61 Hz dir. Band-geçiren filtre aralıgı ise 0.53–40 Hz (12 dB/octave) dir.
5 sınıfa ayrılmış veriler var ve her sınıfda 100 adet veri dosyası var her dosyada 4096 değer var.

  • Sınıf A  : Sağlıklı Gönüllülerden alınmış Göz Açık ( Z )
  • Sınıf B  : Sağlıklı Gönüllülerden alınmış Göz Kapalı ( O )
  • Sınıf C  :  Epilepsi hastası Kriz dışında Epileptik olmayan bölgeden  ( N )
  • Sınıf D  : Epilepsi hastası Kriz dışında Epileptik olan bölgeden  ( F )
  • Sınıf E  : Epilepsi hastası Kriz esnasında  ( S )

Uygulama :


Öncelikle  Veri setimizden

PoincarePlot2D metoduyla

Öznitelik çıkarma işlemini gerçekleştiriyoruz.




Bütün Sınıflandırma işlemini tek YSA ile yapmaya kalkıştığımızda Yaptığımız çeşitli denemeler sonucunda Test için ulaşabildiğimiz en yüksek başarı % 70 lerin biraz üstünde oluyor.

Bu yüzden bizde sınıflandırma işlemini parçalara ayırıyoruz ve her parça için ayrı YSA eğitiyoruz.
Bütün sınıflandırmayı 3 YSA ile gerçekleştiriyoruz

Birinci YSA ;  EEG verisi Sağlıklı birinden mi Epilepsi hastasından mı alınmış  kararını veriyor
500 veriden  375'ini eğitim ve 125'inide test için kullanıyoruz.

400 giriş 1 Çıkış

İkinci YSA ;  İlk YSA sonucunda Epilepsi Hastasından alınmış bir EEG ise, Verinin alınma konum ve yerine karar veriliyor.
  • Kriz sırasında, 
  • Kriz dışında, Epileptik taraftan 
  • Kriz dışında, Epileptik olmayan taraftan 

Kriz dışında 3 durum var. 300 veriden  225'ini eğitim ve 75'inide test için kullanıyoruz.


400 giriş 3 Çıkış

Üçüncü YSA ;  İlk YSA sonucunda Sağlıklı bireylerden alınmış bir EEG ise Göz Kapalımı, Açıkmı  kararını veriyor.  200 veriden  150'ini eğitim ve 50'inide test için kullanıyoruz.
 400 giriş 1 Çıkış  



Sonuç :

YSA ile yaptığımız bütün sınıflandırmalarda  ulaştığımız sonuç;
hem Eğitim hemde Test verileri için %100 başarı
Aynı veri seti kullanılarak yapılan  diğer çalışmaların başarıları aşağıdaki tabloda görülmektedir.





Yapılmış olan benzeri çalışmalar hakkındaki detaylı bilgiye
Automated Epileptic Seizure Detection Methods: A Review Study 
çalışmasından ulaşabilirsiniz yukardaki tabloda o çalışmadan alınmıştır.

13 Kasım 2012 Salı

Yapay Sinir Ağları ile Koroner Arter Hastalığı Risk Hesaplama


Kırıkkale Üniversitesi - Bilgisayar Mühendisliği Bölümü
Yapay Sinir Ağları Final Projesi
Sinem Özder

Bu çalışmada amaç, bir hastadan alınan input seti ile hastada 10 yıl içinde Koroner Arter hastalığı görülme olasılığının tahmin edilmesidir

Proje için şekildeki gibi bir YSA dizayn edilmiştir.
Giriş değerleri ;
• Cinsiyet
• Yaş
• LDL Kolesterol
• HDL Kolesterol
• Diyastolik Kan Basıncı
• Sistolik Basıncı
• Diyabet
• Sigara
Çıkış değeri;
• KAH Riski
Yazıyı İndirmek için ;  KAH-Risk 

FANN Kütüphanesinin Kullanımı


FANN yani Fast Artificial Neural Network Library Bir Yapay Sinir Ağı (YSA) Kütüphanesi.
YSA nın ne olduğunu bildiğinizi varsayıp. Basitçe kullanımını anlatmak istiyorum.
1) YSA oluşturulur
2) YSA Eğitilir
3) YSA Çalıştırılır.
4) YSA yı Tekrar Kullanama

1) Öncelikle Bir YSA oluşturmamız lazım
Kullanabileceğimiz Fonksiyonlardan biri fann_create_standard

struct fann *FANN_API fann_create_standard( unsigned int num_layers, ... )

YSA nın kaç katmandan oluştuğunu yazıp - num_layers -
Sırayla Giriş, Gizli Katman - yada Katmanlar - Çıkış Katmanlarının kaç birimden oluştuğunu yazıyoruz

Mesela :

5 giriş 2 çıkışlı Tek ve 7 birimlik Gizli Katmanlı bir YSA oluşturmak için

struct fann *ann = fann_create_standard(3, 5, 7, 2);

5 giriş 2 çıkışlı , 7 ve 3 birimlik olmak üzere 2 Gizli Katmanlı bir YSA oluşturmak için

struct fann *ann = fann_create_standard(4, 5, 7,3, 2);

ann işaretçisi artık bizim oluşturduğumuz YSA yı gösteriyor


2) YSA Eğitimi için Kullanabileceğimiz Fonksiyonlardan biri fann_train_on_file

void FANN_API fann_train_on_file(
struct fann * ann, // fann_create_standard ile almıştıkconst char * filename, // Veri Dosyaunsigned int max_epochs,unsigned int epochs_between_reports,
float desired_error
)
ann : fann_create_standard ile aldığımız bizim YSA mızı gösteren işaretçi
filename : Eğitim için kullanacağımız Veri Dosyasının adı
max_epochs : Eğitimin çalışacağı maksimum adım Sayısı
epochs_between_reports : Kaç Adımda bir Rapor verilmesi isteniyor
desired_error : Eğitim sonunda arzulanan hata miktarı

Bu fonksiyonu çağrılınca İsmini belirttiğimiz Dosyadan veriler alınır ve Hata miktarı istenen değere yada maksimum adım sayısına ulaşana kadar YSA eğitime tabi tutulur. Arada belirttiğimiz adımda rapor verilir. Eğer istenen hata değerine ulaşılamazsa eğitim başarısız olmuş olur.

Veri Dosyasının yapısı : Veri Dosyası dediğimiz şey Giriş ve çıkış değerlerinin bulunduğu basit bir text dosyasıdır.
Örnek Sayısı(N) Giriş(K) Çıkış (J)
G11 G12 G13 ...G1K
Ç11 Ç12 Ç13...Ç1J
G21 G22 G23 ...G2K
Ç21 Ç22 Ç23...Ç2J
....
GN1 GN2 GN3 ...GNK
ÇN1 ÇN2 ÇN3...ÇNJ

Mesela 3 Giriş 1 Çıkışlık 2 Örnekli bir veri dosyası

2 3 1
1 1 1
0
1 0 1
1

Eğitim öncesi Aktivasyon Fonksiyonlarını Ayarlamak istiyorsanız

fann_set_activation_function_hidden(
struct fann * ann,
enum fann_activationfunc_enum activation_function
)

fann_set_activation_function_output(
struct fann * ann,
enum fann_activationfunc_enum activation_function
)

Mesela
fann_set_activation_function_hidden(ann, FANN_SIGMOID);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);
gibi

Kendi rapor Fonksiyonumuzuda tanımlayabiliriz
void fann_set_callback( struct fann * ann, fann_callback_type callback )
Mesela 

int FANN_API my_report(struct fann *ann, struct fann_train_data *train,
unsigned int max_epochs, unsigned int epochs_between_reports,
float desired_error, unsigned int epochs)
{ 
printf("Adım %8d. MSE: %.5f. Desired-MSE: %.5f\n", epochs, fann_get_MSE(ann),desired_error);return 0;
 }

fann_set_callback( ann, my_report );




Eğer Dinamik bir eğitme süreci gerekmiyorsa, Eğitim ve Parametre ayarlarını kolayca FannTool ile yapabilirsiz

3) Artık Eğitimini tamamladığımız YSA yı çalıştırabiliriz. YSA'nın çalışması demek Giriş değerleri verilerek sonuçta elde edilen çıkış değerlerini almak demektir
Bu iş için kullanacağımız fonksiyon fann_run

fann_type * FANN_API fann_run( struct fann * ann, fann_type * input )

Yani YSA'yı giriş değerlerini içeren bir dizinin adresini gönderiyoruz.

Mesela 3 giriş 2 çıkışlı bir YSA için

fann_type *sonuc;
fann_type input[3]={1,1,0}; // giriş değerleri
sonuc = fann_run(ann, input);
printf("Çıkış Değerelri %f %f \n", sonuc[0], sonuc[1] );

4) YSA yı her kullandığımızda yukardekileri tekrar tekrar yapmamıza gerek yok. YSA eğitildikten sonra Kaydedip. Kullanacağımız zaman bu kayıttan yeniden YSA yı oluşturabiliriz.
Kaydetmek için fann_save Kullanımı çok basit

int fann_save( struct fann * ann, const char *FileName )

FileName kısmına bir Dosya ismi girip kaydediyoruz. Kayıt Geri dönüş değerine göre 0 ise başarılı -1 ise başarısız.

Kaydettiğimiz YSA yı tekrar yüklemek için fann_create_from_file fonksiyonu kullanılır.

struct fann * fann_create_from_file(const char *FileName)

Fonksiyon Kaydedilmiş Dosya ismiyle çağrılır.

Eğer YSA ile işimiz bittiyse fann_destroy kullanılarak hafızada YSA için kullandığımız alanlar boşaltılır.

void fann_destroy( struct fann * ann )

Mesela : YSA için İlk üç adımı yaptık kaydediyoruz

fann_save(ann, "YSA.net");
fann_destroy(ann);

Tekrar çağırıyoruz

fann_create_from_file("YSA.net");

 5) Test Etmek : Eğittiğimiz YSA yı test etmek gerekmektedir Eğitim için kullandığımız verinin % 10 - 30 arasındaki bir miktarda veriyle YSA test edilir ve Hata faktörüne bakılır. Öncelikle aynı Eğitim verisi için kullandığımız dosya yapısında bir dosya hazırlanır ve fann_read_train_from_file fonksiyonuyla yüklenir. Bundan sonra tek yapacağınız fann_test_data fonksiyonunu çağırmak. işi bitincede fann_destroy_train ile hafızdaki yerleri boşaltmak

Mesela :
struct fann_train_data *dt;
dt=fann_read_train_from_file("test.dat");
ann=fann_create_from_file("aproje.net");
fann_reset_MSE(ann);
fann_test_data(ann,dt);
printf("\n Test Sonucu MSE : %f \n\n", fann_get_MSE(ann) );
fann_destroy_train(dt);

MSE (Mean Square Error) dediğimiz şey ortalama karesel hata yani bizim YSA mız yaptığı - Eğitim yada Test - işte istenenle hesaplanan değerler arasındaki - Hata - farklarının karelerinin ortalaması gibi birşey

void fann_reset_MSE(struct fann *ann)
MSE değerini sıfırlar

float FANN_API fann_get_MSE(struct fann *ann)
MSE değerini okur


6) Diğer Faydalı Fonksiyonlar

Eğitim Algoritmalarını ayarlayanlar

enum fann_train_enum fann_get_training_algorithm(struct fann *ann)
Kullanılan Eğitim metodunu okur

void fann_set_training_algorithm(struct fann *ann,enum fann_train_enum training_algorithm)
* Eğitim metadunu değiştirir.

Eğitim metodları ise  
FANN_TRAIN_INCREMENTAL, 
FANN_TRAIN_BATCH, 
FANN_TRAIN_RPROP, 
FANN_TRAIN_QUICKPROP 
olarak 4 çeşittir. Metodların detayı için kitaplara yada google müracaat edilsin

* Öğrenme hızını ayarlayanlar


float fann_get_learning_rate(struct fann *ann)
kullanılan öğrenme hızını döndürür.

void fann_set_learning_rate(struct fann *ann, float learning_rate)
Öğrenme hızını ayarlar. Öğrenme hızı için geçerli Normal Değer 0.7
Bu fonkisyonları FANN_TRAIN_RPROP metodu için kullanamıyoruz

* Aktivasyon Fonksiyonlarını Ayarlayanlar
Daha önce geçmişti
Gizli katman için
fann_set_activation_function_hidden(
struct fann * ann,
enum fann_activationfunc_enum activation_function
)
Çıkış katamanı için
fann_set_activation_function_output(
struct fann * ann,
enum fann_activationfunc_enum activation_function
)

kullanılır
Aktivasyon fonksiyonlarıda ;  
FANN_LINEAR,
FANN_THRESHOLD,
FANN_THRESHOLD_SYMMETRIC,
FANN_SIGMOID, 
FANN_SIGMOID_STEPWISE, 
FANN_SIGMOID_SYMMETRIC, 
FANN_GAUSSIAN, 
 FANN_GAUSSIAN_SYMMETRIC, 
FANN_ELLIOT, 
FANN_ELLIOT_SYMMETRIC, 
FANN_LINEAR_PIECE, 
FANN_LINEAR_PIECE_SYMMETRIC 

gibi pek çok çeşit var detayı için bakınız


Uygulama 

 Güneş lekeleri

Güneş lekeleri , Güneş'in yüzeyinde (ışık yuvarda), çevresine oranla daha düşük sıcaklığa sahip olan, ve mıknatıssal etkinliğin gözlemlendiği bölgelerdir. Her ne kadar 4000-4500 K sıcaklık ile son derece parlak olsalar da, çevrelerinin 5778 K'de olması, karanlık bölgeler olarak görüldüklerinden bu ismi alırlar.
Neyse işte insanların işi gücü yok bu lekeleri sayıp kaydını tutmuşlar.Biz de bu verileri kullanacağız.

Öncelikle Neural networks for financial time series prediction isimli dosyaya bir göz atın. O yazıda detaylarıyla anlatıldığı gibi Verileri aldığımız haliyle kullanmayız, ön işlemeden geçirmeliyiz. ( 3.4 Design of ANNs in finance kısmı )

Güneş lekelerinin (2006 - 1980) aralığında aylık ortamalarını raw.dat isimli dosyaya her satır 1 değer olarak kaydedildi. Öncelikle verileri YSA da kullanabilmek için - Kullandığınız aktivasyon fonksiyonuna göre - (0 , 1) yada ( -1 , 1 ) değerleri arasına çekiyoruz Normalizasyon. Bir ay sonraki ortalama güneş lekesi sayısını bulmak için önceki 24 ayın değerleri kullanılıyor. 2 adet gizli katman kullanılıyor yani YSA mızın yapısı girişten çıkışa doğru
24 -> 16 -> 7 -> 1

şeklinde oluyor. Peki Bu değerleri Nasıl belirliyoruz ? derseniz Net bir cevabı yok.* Genellikle Giriş ve çıkış düğüm sayısı bellidir. Saklı katman yada katmanlardaki düğüm sayıları YSA nın eğitim performansına göre seçilir.

Programımız
LoadRawData("raw.dat");
Normalize();
WriteTrainData(24,1,"sunspot.dat");
Train();
Test();
Run();

dan ibaret
Açıklamalarına gelince
  • LoadRawData : Ham verileri ismi verilen - Veri dosyasında Her satır 1 veri içeriyor- text dosyasından okuyup data dizisine aktarıyor
  • Normalize : Diziye atılmış verileri -0.8 ile 0.8 arsına çekerek Normalize ediyor
  • WriteTrainData : Normalize edilmiş verileri alıp FANN kütüphanesinin kullanabileceği veri dosyası olarak kaydediyor
  • Train : YSA yı Eğitiyor.
  • Test : test.dat dosyasındaki verileri kullanarak Eğitilmiş YSA'yı test edip sonuçta ulaşılan Hatadeğerini bildiriyor
  • Run : Verilerimizden Rasgele 10 adedini kullanarak YSA çalıştırılıyor ve YSA nın hesapladığı ve gerçek değeri birlikte gösteriyor
Şimdi gelelim benim yapmadığım fakat aslında yapılması gereken şeylerden bazılarına

1) Veri sayısı yeterince büyük olması lazım
2) Bu veriler Eğitim, Test ve Kontrol için 3 parçaya ayrılıp her işlem için kendine ayrılan veri kulanılması lazım.


Sonuçta yazılan projeyi indirmek için : SunSpot

* bakınız NN_FAQ Bu YSA için yazılmış Sıkça Sorulan Soruları İndirmenizi ve incelemenizde tavsiye ediyorum FAQ.