Zeki Optimizasyon Teknikleri - 2 (Tavlama Benzetimi)


        Optimizasyon algoritmalarımızdan ikincisi Simulated Annealing olarak ta bilinen tavlama benzetimi algoritması. İsmi Metalurji biliminden gelmektedir. Metallerin tavlanması işleminden esinlenerek ortaya çıktığı için bu ismi almıştır. Genellikle ayrık optimizasyon problemleri için kullanılır.

Devamını oku...>>

OpenCV 2.0 Windows .lib dosyaları?


     OpenCV v2.0 kararlı sürüm yayınlandı. Pek çok güncelleme ve yeni fonksiyonlar içeriyor.(Neler Mesela?)

    OpenCV yi windows ortamında visual studio ile kullanıyorsanız bir süprizle karşılaşabilirsiniz. Kurulumla birlikte lib dosyaları gelmiyor. Bu dosyaları elde etmek için kaynak kodun isteğinize uygun konfigürasyon parametreleri ile derlenmesi gerekiyor.

   Derleme işlemine girmeden hazır olarak kullanmak isterseniz. Kendim için derlediğim libleri sizinle paylaşabilirim :)

 Download OpenCV 2.0 lib,dll,include files for Visual Studio. 


Devamını oku...>>

Zeki Optimizasyon Teknikleri - 1 (Hill Climbing)




    Optimizasyon Algoritmalarımızdan ilki Stochastic(içerisinde rastgelelik bulunan) tekniklerden birisi olan Hill Climbing algoritması. Bu yöntem pek çok uygulamada uygulama kolaylığı nedeniyle seçilebilir.
   Optimizasyonu istenen problemin gösterimi, elde olan çözüme göre komşu çözüm üreteci, ilk çözüm üreteci ve çözüm değerlendirme fonksiyonu uygulama için yeterli olmaktadır.
  Algoritmanın dezavantajları olarak yerel çözümlere takılabilmesini ve  çözümün seçilen başlangıç noktasına çok bağlı olmasını sayabiliriz.
   Hill Climbing yöntemden bahsedersek:

Devamını oku...>>

OpenCV altında SVM kullanmak. (OpenCV SVM Sample Code)

Bilindiği gibi OpenCV kütüphanesinin machine learning modülünde libsvm wraplenmiştir. Böylece biz OpenCV kullanıcıları harici bir kütüphane kullanmadan SVM(Support Vector Machines) i uygulamalarımızda kullanabiliriz. Aşağıda bu konuda bir örnek hazırlamaya çalıştım. Yorumlarda açıklamalar mevcuttur.
#include
#include 
#include 
#include 

using namespace std;

int main()
{
 CvSVM SVM;
 CvMat trainData;
 CvMat labels;
 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_EPS,100,0.001); //eğitim için term kriterimiz.

 int array_labels[5]= {1,1,1,-1,-1}; //5 eğitim verisinin bildiğimiz etiketleri.(labels, responses).
           //ilk 3 veri 1 sınıfına, diğer iki veri ise  -1 sınıfına ait.

 //eğitim verilerini diziye doldurdum. Gerçek uygulamalarda filedan okuma veya hesaplama şeklinde olur.
 //kodu basit tutmak için bu şekilde gösterdim.
 #pragma region data
 //5 egitim verisi olsun herbiri 40 tane feature içersin.
 
 float array_trainData[5][40] = { 1,0.443137,0.333333,0.392157,0.0313725,
          0.270588,0.870588,0.964706,1,0.439216,
          0.337255,0.380392,0.0235294,0.266667,0.862745,
          0.964706,1,0.431373,0.337255,0.368627,
          0.0156863, 0.262745, 0.854902, 0.964706, 1,
          0.423529, 0.341176, 0.360784, 0.0156863, 0.258824,
          0.847059, 0.964706, 1, 0.419608, 0.341176,
          0.34902, 0.0117647, 0.254902, 0.839216, 0.968627,

          0.572549,0.4,0.113725,0.0784314,0.137255,
          0.160784,0.00784314,0.337255,0.580392,0.407843,
          0.121569, 0.0745098, 0.133333, 0.156863, 0.00392157,
          0.341176, 0.584314, 0.411765, 0.12549, 0.0666667 ,
          0.129412, 0.152941, 0, 0.34902, 0.592157,
          0.419608, 0.129412, 0.0588235, 0.12549, 0.14902,
          0.00392157, 0.352941, 0.596078, 0.423529, 0.137255,
          0.054902, 0.121569, 0.145098, 0.00784314, 0.356863,

          0.882353, 0.741176, 0.305882, 0.305882, 0.278431,
          0.141176, 0.156863, 0.509804, 0.882353, 0.741176,
          0.305882, 0.305882, 0.27451, 0.141176, 0.14902,
          0.501961, 0.886275, 0.741176, 0.305882, 0.305882,
          0.270588, 0.141176, 0.141176, 0.498039, 0.886275,
          0.741176, 0.305882, 0.305882, 0.266667, 0.141176,
          0.137255, 0.490196, 0.886275, 0.737255, 0.305882,
          0.305882, 0.266667, 0.137255, 0.129412, 0.486275,

          0.929412, 0.917647, 0.717647, 0.356863, 0.133333,
          0.156863, 0.231373, 0.709804, 0.929412, 0.913725,
          0.721569, 0.356863, 0.137255, 0.164706, 0.219608,
          0.694118, 0.92549, 0.905882, 0.729412, 0.356863,
          0.141176, 0.168627, 0.207843,0.67451, 0.917647,
          0.901961, 0.733333, 0.360784, 0.141176, 0.172549,
          0.196078, 0.658824, 0.909804, 0.894118, 0.737255,
          0.360784, 0.141176, 0.180392,0.180392, 0.639216,

          0.760784, 0.372549, 0.407843, 0.298039, 0.160784,
          0.72549, 0.988235, 0.960784, 0.772549, 0.372549,
          0.411765, 0.305882, 0.160784, 0.709804, 0.992157,
          0.960784, 0.780392, 0.376471, 0.419608, 0.309804,
          0.160784, 0.698039, 0.992157, 0.960784, 0.784314,
          0.376471, 0.419608, 0.317647, 0.164706, 0.686275,
          0.996078, 0.964706, 0.792157, 0.376471, 0.423529,
          0.32549, 0.160784, 0.670588, 1, 0.964706
 };

#pragma endregion data

 cvInitMatHeader(&trainData,5,40,CV_32FC1,array_trainData); //eğitim verimizi tutacak matris.
 cvInitMatHeader(&labels,1,5,CV_32SC1,array_labels); //etiketlerimizi tutacak matris.
            //classification olduğu için CV_32SC1 kullandık.


 SVM.train(&trainData,&labels,0,0,CvSVMParams(CvSVM::C_SVC,CvSVM::RBF,3,0.025,0,1,0.5,0.1,NULL,
  criteria));  //train fonksiyonumuz (libsvm ile kontrol etmek için libsvm ile
      //gelen svm-train.exe nin default parametreleri kullanıldı.)
      //Parametrelerin detaylı açıklaması için opencv docs.

 //SVM.save("test.volkan"); //eğittiğimiz modeli kaydedip daha sonra kullanabiliriz.
for(int i = 0; i < 5; i++ )
 {
  double r;
  CvMat sample;
  cvGetRow(&trainData, &sample, i );

  r = SVM.predict( &sample );  //predict edip sonuçları kontrol edelim.
 }
}

Devamını oku...>>

Programınız için performans ipuçları.(x86)

Genel amaçlı üretilmiş mimariler üzerinde sinyal işleme, görüntü işleme gibi ağır matematiksel işlemler gerektiren uygulamalar yapıyorsanız optimizasyon çok önemli bir hale gelir. Bilgisayar tasarımı çalışırken bir zamanlar Türkiye Görüntü İşleme mail grubuna gönderilen bir yazı aklıma geldi. Faydalı bir yazı olduğunu düşündüm ve blogumda paylaşmak istedim. Yazı 17 Şubat 2008 tarihinde Mustafa Sakar tarafından AMD x86 Code Optimization Guide tan yararlanılarak yazılmış.

Devamını oku...>>