Ana Menü

  • Ana sayfa
  • Teknoloji Haberleri
  • Haberler
  • Makaleler
  • Download
  • Forum Knite Online Koxp
  • İletişim


  • Donanım
  • Mühendislik
  • Network
  • Oyunlar
  • Programlama
  • Tasarım
  • Yazılım
  •  
    Haberler

  • ASUS, A6000N serisi yeni diz üstü bilgisayarlarını duyurdu
  • Türk Telekom'dan öğrencilere ADSL kampanyası
  • ASUS WL-HDD 2.5: Kablosuz Ağlar İçin Disk Paylaştırıcı
  • Virüs En İyi 10: Sober'in Hoş Olmayan Geri Dönüşü
  • Microsoft WINS Yamasını Hazırlıyor
  • Devlet Yazışmaları İnternete Taşınıyor
  • ISS'ler de ADSL Hizmeti Vermeye Başlıyor
  • Taşınabilir Video oynatıcılarda devrim DivX-POD 7010
  • Kablo Internet'te indirim oldu mu, olmadı mı ?
  • Mobil kablosuz foto yazıcısı: HP Photosmart 375
  • En küçük Pocket Pc Phone Qtek s100
  • Google, interneti yeniden tanımlıyor
  • Kitap yorumu: Dijital Kale
  • Fedora Core 3
  • Zarif ve işlevsel
  • RoboDemo 5
  • Ateşli internet tilkisi
  • Türkçe GPL Wiki Yazılımı : Wiksis
  • VII. Bilisim Haftasi Etkinlikleri
  • Teknohaber.NET TRT INT'de
  • MyDoom: Yeni sanal kurt eskilerini temizliyor
  • Google artık 1/3 daha fazla web sayfası arıyor
  • MSN Messenger’da virüs!
  • 2003’ün ‘most wanted’ sitesi; Kazaa
  • Mars Express, gezegene yaklaşıyor
  •  
    Linkler

  • Bilgisayar
  • Diğer
  • Geyik
  • Internet
  • Üniversiteler
  •  
    WinBaglama Özel
  • Hakkında
  • Nota Dosyaları
  • Download
  •  
    Teknohaber.Net

    Site hakkında
    Editörler

     
    Arama

     
    Sponsor
     
     
    İstatistik
    eXTReMe Tracker
     

    Yapay Sinir Ağları ve MATLAB ile kullanımı

    Tarih: 25.02.2007 > Kaç kez okundu? 11206

    Yapay Sinir Ağı (YSA) nedir? Nöron modeli, Çok katmanlı perseptron (MLP) yapısı, ileri beslemeli (feed forward) geriye yayılımlı (back propagation) ağlar, ön işleme seçenekleri (normalizasyon ve PCA) ve örnek problemler içeren bir 'tutorial'





    YAPAY SİNİR AĞLARI ve MATLAB ile KULLANIMI

    Sinir ağları, nöron ismi verilen hesaplama elemanlarının paralel bir şekilde çalışmasından meydana gelir. Bu elemanlar biyolojik sinir sistemlerinden esinlenerek tasarlanmıştır. Belirli bir fonksiyonu gerçekleştirmek için bir sinir ağını, elemanlar arasındaki bağlantıların (ağırlıkların) değerlerini ayarlayarak eğitebiliriz.

    Genelde, sinir ağları eğitilerek belirli bir girişe karşılık verilen arzu edilen çıkışı elde ederler. Bu durum aşağıdaki şekilde verilmiştir. Ağın çıkışı arzu edilen hedefe ulaşıncaya kadar çıkış ile hedef karşılaştırılarak ağın eğitimi (ağırlık değerlerlerinin ayarlanması) gerçekleştirilir. En basit tanımıyla yapay sinir ağları, bilinen en iyi eğri uydurma tekniklerinden birisidir.

    Sinir ağları, örüntü tanıma, kimliklendirme, sınıflandırma, konuşma işleme, bilgisayarla görü ve kontrol sistemleri gibi karmaşık problemler içeren pek çok sahada kullanılmaktadır.

    Nöron Modeli

    Basit bir yapay nöron, bir ya da birden çok skaler girişe ve bir çıkışa sahip olan bir hesaplama elemanıdır. Tek girişli nöron modeli aşağıda verilmiştir.

    burada, p: nöronun girişi olan skaler değeri, w: p girişi ile nöron arasındaki ağırlık değerini, b: nöronun bias değerini, f: transfer fonksiyonunu, a: nöronun çıkışını belirtmektedir. p girişi önce w ağırlığı ile çarpılır. Ardından b bias değeri ile toplanır ve transfer fonksiyonundan geçirilerek a çıkışı hesaplanır. Transfer fonksiyonu doğrusal ya da doğrusal olmayan türevlenebilir bir fonksiyondur. İşte bu basit nöron modelinde, giriş ile çıkış arasında basit bir matematiksel bağıntı kurulmuştur. Fakat nöronun arzu edilen çıkışı verebilmesi için w ve b ağırlık değerlerinin optimum olacak şekilde ayarlanması gerekmektedir.

    Birden fazla girişi olan nöron modeli aşağıda verilmiştir.

    burada, R nöronun giriş sayısıdır. Görüleceği üzere giriş sayısı kadar da w ağırlık değeri vardır. Bu durumda yukardaki modelin matematiksel ifadesi şu şekilde olur:

    Transfer Fonksiyonları

    Bir nöronun çıkışı hesaplanırken çok çeşitli transfer fonksiyonları kullanılabilir. Burada en çok kullanılan 4 transfer fonksiyonu tanıtılacaktır.

    1)

    Keskin-limitli (hard-limit) transfer fonksiyonunun grafiği yukarıda verilmiştir. Burada, n fonksiyonun girişi, a ise çıkışıdır: a=f (n). Bu fonksiyonda, giriş değeri 0 (sıfır)’dan büyükse çıkış değeri 1 (bir), giriş değeri 0 (sıfır)’dan küçükse çıkış değeri 0 (sıfır) olmaktadır. Genelde sınıflandırma uygulamalarında kullanılmaktadır.

    2)

    Doğrusal (linear) transfer fonksiyonunun grafiği yukarda verilmiştir. Görüldüğü gibi giriş hiçbir değişikliğe uğramadan aynen çıkmaktadır (a=n). Doğrusal süzgeç problemlerinde sıklıkla kullanılmaktadır.

    3)

    Sigmoid fonksiyonunun grafiği yukarda verilmiştir. Sigmoid, doğrusal olmayan (non-linear) logaritmik bir fonksiyondur. Giriş değerleri hangi aralıkta olursa olsun, çıkış 0 ile 1 arasında olmaktadır. Türevlenebilir olduğu için geriye yayılım algoritmaları ile kullanılabilir. Doğrusal olmayan problemlerin çözümünde tercih edilmektedir. Matematiksel ifadesi şu şekildedir: a=logsig(n) = 1 / (1 + exp(-n))

    4)

    Hiperbolik tanjant sigmoid fonksiyonunun grafiği yukarda verilmiştir. Algoritması:

    a = tansig(n) = 2/(1+exp(-2*n))-1 olarak verilmiştir.

    MATLAB’de kullanabileceğiniz pek çok transfer fonksiyonu bulunmaktadır. Bunların listesine şu adresten erişilebilir.

    Çok Katmanlı Perseptron (ÇKP) Ağı (Multi-layer Perceptron)

    Yapay sinir ağlarında çok çeşitli ağ yapıları ve modelleri vardır. En çok kullanılan ağ yapılarından birisi ÇKP’dir. Bu ağda bilginin akışı ileri yönlüdür. Öğrenme ve eğitme algoritması olarak genelde türeve dayalı geriye yayılım (back propagation) algoritmaları tercih edilir. Burada, aşağıdaki şekilden de görüleceği üzere nöronlar katmanlar şeklinde organize edilmiştir. Her bir katmanda en az bir nöron bulunur. Bir önceki katmandaki tüm nöronlar bir sonraki katmandaki nöronlara bağlantı içermektedir. Bu şekilde arzu edildiği kadar katman oluşturulabilir. Aşağıdaki şekilde, katman transfer fonksiyonu logsig olan bir perseptron katmanı görülmektedir. Burada, giriş sayısı R, katmandaki nöron sayısı da S olarak verilmiştir.

    Aşağıda ise üç katmanlı bir ÇKP YSA yapısı verilmiştir. Burada giriş vektörleri, aslında nöron olmamalarına rağmen bir sonraki katmana herbiri birer çapraz bağlantı içermektedir. 3 adet nöron katmanı bulunmaktadır. Son katman çıkış katmanı olarak da isimlendirilir. Giriş ile çıkış katmanı arasında yer alan katmanlar gizli katman (hidden layer) olarak da anılmaktadır. Bu durumda giriş ile çıkış arasında paralel bir matematiksel ilişki kurulmuş olur. Uygun bir öğrenme algoritması ile ağırlık değerleri ağın arzu edilen çıkışını verecek şekilde ayarlanmaktadır.

    MATLAB’de İleri Beslemeli (Feed Forward) ÇKP Ağların Tasarımı

    Öncelikle bu ağ yapısını kullanabilmek için bir ileri beslemeli ağ nesnesi oluşturmamız gerekir. MATLAB’deki newff komutu bu işlemi gerçekleştirmektedir. newff komutunun yazım biçimi aşağıda verilmiştir:

    net = newff(PR,[S1 S2…SNl],{TF1 TF2…TFNl},BTF,BLF,PF)

    Burada;

           PR  - R elemanlı giriş vektörünün minimum ve maksimum değerlerini içeren Rx2 ‘lik matris.
           Si  - i’nci katmanda bulunan nöron sayısı.
           TFi - i’nci katmanın transfer fonksiyonu, varsayılan= 'tansig'.
           BTF - Geriye yayılım ağ eğitim fonksiyonu, varsayılan = 'trainlm'.
           BLF - Geriye yayılım ağırlık/bias öğrenme fonksiyonu, varsayılan = 'learngdm'.
           PF  - Performans fonksiyonu, varsayılan = 'mse' dir.

    Aşağıdaki kod ile 2 katmanlı bir ağ oluşturmaktayız. Bu problemde iki elamanlı bir giriş vektörü vardır. Giriş vektörünün ilk parametresinin değer aralığı -1 ve 2 olarak belirtilmiştir. İkinci parametrenin değer aralığı ise 0 – 5 olarak verilmiştir. İlk katmanda 3 nöron, ikinci katmanda bir diğer ifadeyle çıkış katmanında ise 1 nöron bulunmaktadır. İlk katmanın transfer fonksiyonu tanjant sigmoid, ikinci katmanınki ise lineer’dir. Öğrenme algoritması, gradyent azaltım algoritması traingd’dir. Problem iki girişli bir çıkışlı bilinmeyen bir sistem olarak düşünülebilir. Amacımız örnek giriş ve çıkış verileri vererek sistemi karakterize etmektir.

    net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');

    Bu komut ağ nesnesi oluşturur ve aynı zamanda ağırlık ve bias değerlerinin ilklendirme (initialization) işlemini rastgele değerler atamak suretiyle gerçekleştirir. Haliyle ağ eğitime hazır olarak beklemektedir. Bazı durumlarda ağı tekrar ilklendirmek (reset’lemek) gerekebilir. Bu durumda;

    net = init(net);

    komutu kullanılabilir.

    Tasarlanan ağın simulasyonu için sim komutu kullanılır. Similasyon’dan kasıt, ağa bir giriş değeri verip ağın çıkışını hesaplatmaktır.

    p = [1;2];
    a = sim(net,p)
    a =
       -0.1011

    Burada p ağın giriş verisini temsil etmektedir. Ağın iki girişi olduğu için p matrisi iki satırdan meydana gelmektedir. Görüleceği üzere ağ bir çıkış üretmektedir. Ancak bu, ağ henüz eğitilmediği ve ağırlık değerleri rastgele atandığı için arzu edilen çıkış değildir. Bu komutları kendi bilgisayarınızda çalıştırdığınızda muhtemelen farklı bir çıkış elde edeceksiniz. Çünkü ağırlık değerleri ilklendirilirken rastgele olarak atanmaktadır.

    Diğer bir yandan ağı çoklu örneklerle de simüle edebilirsiniz.

    p = [1 3 2;2 4 1];
    a=sim(net,p)
    a =
      -0.1011   -0.2308    0.4955

    Burada iki girişli ağ için 3’er adet değer verilmiştir. Haliyle ağ her bir örnek için bir çıkış üretmiştir. Buradan açıkça görülüyorki ağın girişi için (simulasyon veya eğitim aşamasında) organize edilecek matrisin satırları parametrelere, sütunları ise örneklere karşılık gelmektedir.

    Ağırlıklar ve bias değerleri ilklendirildikten sonra ağ eğitime hazırdır. Eğitim işleminde ağın davranışını ortaya koyacak giriş (p) ve çıkış (t) verileri gereklidir. Bunlar eğitim verisi olarak adlandırılır. Eğitim verileri çözüm uzayının tamamını veya en azından büyük bölümünü temsil edecek şekilde seçilmelidir. Eğitim esnasında ağırlık ve bias değerleri iteratif olarak hata fonksiyonunu minimize edecek şekilde güncellenir. Hata fonksiyonunun MSE olması durumunda hata, arzu edilen çıkış (t) ile ağın o anki çıkışı arasındaki farkın karesinin ortalamasıdır.

    YSA’da kullanılan en temel öğrenme algoritması geriye yayılım (back propagation) algoritmasıdır. Basit anlamda ağırlıklar negatif gradyent yönünde güncellenir. Pek çok geriye yayılım algoritması vardır. En temel yapısı şu şekildedir:

    burada,  ağırlık vektörünün k anındaki değerlerini, k anındaki gradyenti,  ise öğrenme oranını temsil etmektedir.

    Toplu gradyent azaltım (batch gradient descent) eğitme algoritması MATLAB’de traingd ile temsil edilir.

    Verdiğimiz problemin eğitim verilerini oluşturup ağın eğitimini şu şekilde gerçekleştirebiliriz:

    p = [-1 -1 2 2;0 5 0 5];
    t = [-1 -1 1 1];

    burada, p matrisi ağın eğitimi için kullanılacak giriş verisini temsil etmektedir. Görüldüğü üzere 2 satırdan ve 4 sütundan oluşmaktadır. Problem iki parametreli olduğu için satır sayısı 2’dir. Ağın eğitimi için ise 4 örnek verilmektedir. Ağın çıkışını t matrisi temsil etmektedir. Tek satır olduğuna göre tek çıkış parametresi vardır (hatırlanırsa sistemimiz 2 girişili 1 çıkışlıdır). Her bir örnek için birer çıkış verilmiştir. Daha açık bir ifadeyle verilen sistemin doğruluk tablosu şu şekildedir:

    p1

    p2

    t

    -1

    0

    -1

    -1

    5

    -1

    2

    0

    1

    2

    5

    1

    Ağın eğitimi ile ilgili temel parametreleri şu şekilde düzenleyebilirsiniz:

    net.trainParam.show = 50;
    net.trainParam.lr = 0.05;
    net.trainParam.epochs = 300;
    net.trainParam.goal = 1e-5;

    burada, show parametresi kaç iterasyonda bir eğitim durumunun MATLAB ekranına aktarılacağını belirmekte, epoch parametresi iterasyon sayısını, goal parametresi hedeflenen hata değerini, lr ise geriye yayılım algoritması için öğrenme oranını belirtmektedir. epoch veya goal parametrelerinden birisi sağlandığında eğitim işlemi durdurulacaktır.

    Ağın eğitimine başlamak için train komutu kullanılır.

    [net,tr]=train(net,p,t);
     TRAINGD, Epoch 0/300, MSE 1.59423/1e-05, Gradient 2.76799/1e-10
     TRAINGD, Epoch 50/300, MSE 0.00236382/1e-05, Gradient 0.0495292/1e-10
     TRAINGD, Epoch 100/300, MSE 0.000435947/1e-05, Gradient 0.0161202/1e-10
     TRAINGD, Epoch 150/300, MSE 8.68462e-05/1e-05, Gradient 0.00769588/1e-10
     TRAINGD, Epoch 200/300, MSE 1.45042e-05/1e-05, Gradient 0.00325667/1e-10
     TRAINGD, Epoch 211/300, MSE 9.64816e-06/1e-05, Gradient 0.00266775/1e-10
     TRAINGD, Performance goal met.

    Görüleceği üzere 211. iterasyonda hedeflenen hata oranına erişilmiş ve ağın eğitimi durdurulumuştur. Ağın eğitilip eğitilmediğini test etmek için giriş verisi (p) ile ağı tekrar simule edelim:

    a = sim(net,p)
    a =
       -1.0010   -0.9989    1.0018    0.9985

    Görüleceği üzere ağ arzu edilen çıkışları sağlamaktadır. Yani YSA verilen sistemi modellemiştir. Sistemin girişi ve çıkışı arasındaki bağıntıyı bulmuştur. Bunuda uygun ağırlık değerlerini seçerek yapmıştır. Bu aşamadan sonra eğitim verisinde kullanmadığımız yeni veriler vererek ağı test edebiliriz.

    MATLAB’de kullanabileceğimiz pek çok eğitim algoritması bulunmaktadır. En temel algoritma yukarda bahsedilen geriye yayılım tabanlı toplu gradyent azaltım algoritmasıdır. Fakat MATLAB’de varsayılan eğitim algoritması olarak Levenberg-Marquardt (trainlm) seçilmiştir. Bu algoritma çok hızlıdır ancak çalışabilmesi için fazla hafızaya ihtiyaç duymaktadır. Bunların yanı sıra trainbfg ve trainrp algoritmaları da tercih edilebilir.

    Ön-işleme Seçenekleri (Pre-processing)

    Bazı temel ön işlemleri gerçekleştirerek YSA’nın eğitim ve öğrenme performanısını artırabilirsiniz. En temel ön-işleme yöntemlerden birisi giriş verilerinin normalize edilmesidir. premnmx komutu ile giriş ve çıkış verilerini -1 ile 1 arasına ölçekleyebilirsiniz:

    [pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);
    net = train(net,pn,tn);

    Eğitimden sonra simulasyon aşamasında ise normalize edilen verilerin tekrar eski haline çevrilmesi gerekmektedir. Bu işlem için postmnmx komutu kullanılır.

    an = sim(net,pn);
    [a] = postmnmx(an,mint,maxt);

    Bir diğer normalizasyon yöntemi de verilerin ortalamasını 0 ve standart sapmasını -1 olacak şekilde yeniden düzenlemekdir. Bu amaç için prestd ve poststd komutları kullanılmaktadır.

    p = [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93];
    t = [-0.08 3.4 -0.82 0.69 3.1];
    [pn,meanp,stdp,tn,meant,stdt] = prestd(p,t);
    net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');
    net = train(net,pn,tn);
    an = sim(net,pn);
    a = poststd(an,meant,stdt);

    Bazı durumlarda ağın girişi çok fazladır. Bu durumlarda eğitim işlemi çok uzun sürmektedir. Eğer giriş verileri arasında birbirleri ile ilintili veriler varsa bunlar ağın eğitimi için bir katkıda bulunmayacaktır. Temel bileşen analizi (principle component analysis - PCA) adı verilen teknikle ağın eğitimine katkıda bulunmayacak veriler indirgenerek giriş verisi azaltılabilir. Böylece giriş verilerinin kendi aralarında korelasyonlu olması engellenmiş olur.

    p=[-1.5 -0.58 0.21 -0.96 -0.79; -2.2 -0.87 0.31 -1.4  -1.2];
    [pn,meanp,stdp] = prestd(p);
    [ptrans,transMat] = prepca(pn,0.02);

    Buradaki örnekte giriş verisinin ikinci satırı birinci satırın yaklaşık olarak belli bir katsayı ile çarpılmış halidir. Temel bileşen analizi sonucunda iki parametreli giriş vektörü tek parametreli hale getirilmiştir (ptrans).

    Örnek 1: Çarpım Tablosunun YSA’na Öğretilmesi

    Çarpma işlemi doğrusal olmayan bir işlemdir ve yapay zekâ için zor bir problemdir. Bu örnekte 1 ile 10 arasındaki sayıların çarpım işlemi YSA’ya öğretilmiştir. Çarpma işleminde iki giriş ve bir çıkış vardır. Eğitimde 20 adet rastgele sayı seçilmiş ve test aşamasında yine 20 adet rastgele sayı seçilerek sistemin performansı oraya konmuştur.

    clear all, close all,clc;
    p=round(rand(2,20)*10) % Giris verisi 2x20’lik matris, rastgele 0-10
    t = p(1,:).*p(2,:)     % Cikis verisi p1*p2

    %Normalizasyon islemi
    [pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);

    %YSA’nin tasarimi, egitimi ve simulasyonu
    net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');
    net = train(net,pn,tn);
    an = sim(net,pn);
    [a] = postmnmx(an,mint,maxt); %Normalizasyonun tersi

    %Egitim verilerinin gercek ve YSA cikisinin gosterimi
    figure(1),plot3(p(1,:),p(2,:),t,'o');
    hold on,plot3(p(1,:),p(2,:),a,'r*'),grid on;
    legend('Gerçek deger','YSA cikisi'),xlabel('p1'),ylabel('p2'),zlabel('t'),title('Egitim verisi')

    %Test verilerinin hazirlanmasi, farkli 20 adet ornek
    ptest=round(rand(2,20)*10)
    ttest = ptest(1,:).*ptest(2,:)
    [ptn,minpt,maxpt,ttn,mintt,maxtt] = premnmx(ptest,ttest);
    atn = sim(net,ptn); %Simulasyon
    [at] = postmnmx(atn,mintt,maxtt);

    %Test verilerinin gercek ve YSA cikisinin gosterimi
    figure(2),plot3(ptest(1,:),ptest(2,:),ttest,'o');
    hold on,plot3(ptest(1,:),ptest(2,:),at,'r*'),grid on;
    legend('Gerçek deger','YSA cikisi'),xlabel('p1'),ylabel('p2'),zlabel('t'),title('Test verisi')

    Kaynak: H. Demuth, M. Beale, M. Hagan, "Neural Network Toolbox, for use with MATLAB", "User Guide Version 5", Mathworks, 2006.

    Derleyen:
    Rifat KURBAN
    Bilgisayar Yük. Müh.

    rkurban [ a.t ] erciyes edu tr






    Yorumlar

    Gönderen: Rifat Kurban Tarih: 01:49 30.04.2007
    burak: appcr1 isminde cok guzel bi matlab demosu var karakter tanima ile ilgili, tam sorunun cevabi. esma: giris ve cikis matrisimizin satırları problemin parametrelerini, sutunlarıda elde ettigimiz ornekleri ifade etmektedir. bu sekilde istediginiz digital isareti istediginiz uzayda (zaman, frekans) ysa\'ya verebilirsiniz.

    Gönderen: kopuk Tarih: 05:07 22.05.2007
    gerçekten tam aradığım ödev buydu hazırlayan arkadaşa minnetarım çok teşekkür ederim Saygılar...

    Gönderen: Deli Emin Tarih: 09:32 10.05.2007
    Şerefsizim benim aklıma gelmişti !Gerçek, yürü.

    Gönderen: Ayşegül Özdemir Tarih: 01:18 01.05.2007
    Çooook çoook teşekkür ederim Harika bir makale

    Gönderen: Burak SARICA Tarih: 02:51 27.02.2007
    Hocam eline sağlık, çok güzel bir makale olmuş. Matlabı açıp eğitesi geliyor insanın :) Böyle basit optik karakter tanıma için falan nasıl kullanırız YSA yı? Girişlerimizin tipi ne olmalı?

    Gönderen: eren Tarih: 01:54 18.03.2007
    çok iyi plmuş ama ayrıntılı değil.... lütfen train,test ve validation hakkında (komut,grafik) ayrıntılı bilgi verirmisiniz......

    Gönderen: esma Tarih: 09:28 26.03.2007
    gerçekten çok yararlı bir makale olmuş,elinize sağlık. dijital sinyallerin ysaya giriş olarak nasıl verildiği konusunda da bilgiler verilirse sevinirim. iyi çalışmalar

    Gönderen: MisafiR Tarih: 03:01 14.05.2007
    çok teşekkürler..inanın çok makbule geçti...yusra65

    Gönderen: Bahadır Çetinkaya Tarih: 08:35 03.07.2007
    Rıfat kardeşimin yaptığı her iş zaten güzel olur. Bu makalede gerçekten çok açıklayıcı ve güzel olmuş. Tekrar teşekkür ederiz.

    Gönderen: uğur demir Tarih: 11:33 10.12.2008
    çok teşekkürler

    Gönderen: yasemin saygılı Tarih: 04:19 28.12.2008
    iyi olmuş

    Gönderen: Ayhan yıldız Tarih: 04:33 11.11.2009
    çok güzel hazırlanmış.tşk

    cheap viagra online
    overnight propecia
    buy viagra line
    buy canada in propecia
    viagra levitra cialis
    viagra prescription label
    levitra viagra
    cheapest propecia pharmacy online
    lowest price propecia
    get propecia cheap
    fast propecia
    cialis endurance
    price of propecia from canada
    cialis buy
    viagra blister 4
    low cost viagra
    cialis alternative
    soft gel viagra tablets
    viagra rx in canada
    viagra pill
    order propecia online
    buy mg propecia
    buy line viagra
    real cialis online
    indian cialis
    cialis discount
    cialis kanada
    liquid propecia
    viagra prices
    drug generic propecia
    viagra order
    viagra non prescription
    purchase propecia
    women viagra
    viagra samples
    buy propecia in the uk
    mail order propecia
    get cialis
    buy propecia now
    online prescription propecia
    generic propecia viagra
    buy cialis once daily
    discount propecia propecia
    order prescription propecia
    cialis sales
    cost of cialis
    online order propecia
    viagra uit india
    drug hair loss propecia
    cialis sale overnight shipping
    viagra tablet weight
    ordering propecia
    lowest-price propecia costs us
    cheapest propecia prescription
    order viagra
    viagra online sales
    generic propecia mastercard
    cialis vs viagra
    viagra how much
    viagra 100mg england
    bruising on cialis
    cheap cialis pills
    order cheapest propecia online
    us cialis
    cheap price viagra
    mexico viagra
    generic viagra in canada
    canadian viagra
    online propecia sales
    cialis cost
    cialis order
    herbal alternative to cialis
    cialis strenght mg
    order propecia
    uk propecia sales
    uk cialis sales
    cialis daily
    buying propecia online
    viagra cost
    name brand cialis
    buy branded cialis
    online pharmacy propecia
    viagra for women
    viagra fast delivery
    viagra label
    buy now propecia
    cialis herbal
    bio viagra herbal
    viagra for sale
    cialis buy overnight
    canadian drugs propecia
    canadian propecia rx
    cialis india pharmacy
    online viagra levitra cialis
    cialis online canada
    generic propecia sale
    purchasing cialis
    cialis tablets foreign
    buy propecia without prescription
    buy discount viagra
    viagra generic
    cialis no prescription
    cialis women
    generic propecia effective
    cialis samples
    cialis for woman
    viagra dosage
    canada viagra pharmacies scam
    buying viagra
    cialis soft
    overnight delivery cialis
    buying viagra in canada
    cialis sales usa
    chip cialis
    order propecia pill
    canadian pharmacy cialis
    buy drug propecia
    cialis 30 mg
    buy cialis
    buy propecia in canada
    purchase cialis cheap
    viagra india
    cialis from mexico
    viagra onlines
    best doses for propecia
    how does viagra work
    online pharmacy propecia
    soft cialis
    where to buy propecia
    best price on propecia
    cialis quick shipment
    cialis sale
    buy cheap online propecia
    canada online pharmacy propecia
    buy viagra in canada
    propecia for hair loss
    buy propecia uk
    viagra sales
    herbal viagra
    viagra in spain
    online cialis
    levitra viagra online
    viagra concerns
    buy cialis fedex shipping
    viagra prescriptions
    real cialis
    propecia cialis viagra
    rx generic viagra
    cialis pills for sale
    cialis next day
    cheapest prices for viagra
    cheapest propecia sale uk
    buy prescription propecia
    united healthcare viagra
    online drug sales cialis
    viagra dose
    cialis on sale
    how much cialis
    baldness male propecia
    generic propecia alternative
    cialis levitra sales
    cialis levitra
    canada viagra
    viagra mexico
    cheap viagra
    viagra professional
    similar cialis
    best price for propecia online
    buy online prescription propecia
    levitra vs cialis
    cialis cheapest price
    generic propecia effective
    viagra 50 mg
    cialis prescription
    generic propecia viagra
    viagra prescription
    discount drug propecia
    viagra and cialis for sale
    cheap order prescription propecia
    usa cialis
    order viagra online
    viagra purchase
    viagra injectable
    cialis delivered overnight
    cialis com
    cheap propecia 5mg
    buying cialis online
    buy viagra
    should i chew cialis
    cialis fast delivery
    cheap propecia uk
    sale cialis
    buy real cialis
    what is cialis
    generic propecia canada
    hydrochlorothiazide cialis
    cialis no rx
    canadian pharmacy viagra legal
    viagra canadian
    online viagra sale
    online viagra
    purchase cheap cialis
    cialis professional
    generic viagra online
    cheap generic india viagralevitra 20mg
    sell viagra
    buying propecia
    cialis 20 mg
    cheap propecia canada
    china viagra
    viagra cookies
    viagra discount sale
    buy propecia prescriptions online
    best price propecia
    natural viagra
    viagra gel
    viagra buy
    buy viagra pills
    5 mg cialis
    cialis mastercard
    cialis using
    low price cialis
    canadian generic viagra online
    generic cialis
    cialis for women
    drug propecia
    sildenafil viagra
    viagra pfizer
    generic propecia india
    how to get viagra
    get viagra
    viagra usa
    cialis price 100 mg
    buy cialis professional
    cialis transdermal
    levitra or viagra
    next day viagra
    viagra aus usa
    viagra on line
    real viagra
    cialis sample
    buying propecia
    buy cheap generic propecia
    buy viagra cheap
    usa cialis sales
    viagra alternatives
    canada cheap propecia
    viagra canda
    buy propecia without a prescription
    buy propecia where
    brand viagra
    canadian viagra and healthcare
    canada propecia prescription
    order propecia now
    buying cialis
    soft gel viagra
    pfizer viagra cheap
    viagra lawyers
    pill price propecia
    discount propecia rx
    canadian healthcare cialis
    get propecia prescription
    cost of propecia

    Teknohaber.Net sitesi üzerinde özgür bir yazılım olan tekno.Portal isimli portal yönetim sistemi çalışmaktadır. Sitede bulunan yazılar kaynak gösterilerek yayınlanabilir. Yazıların sorumlulukları yazarlarına aittir. Her hakkı saklıdır, © 2001. google articles article