Cuma, Ocak 01, 2016

Caffe for Windows

Caffe bir derin öğrenme kütüphanesi ve uygulaması. Derin öğrenme yazılarımızın üçüncüsünde kısaca bahsetmiştik.

Caffe hali hazırda görüntü tanıma üzerine çalışma yapacaklar için en oturmuş ve en hızlı kütüphane. Üç şekilde kullanma imkanına sahibiz. komut satırı, python, matlab. Nedendir bilinmez python dili epey bir revaçta. Derin öğrenme yazılarımızın dördücüsünde gerebileceğiniz gibi çoğu kütüphane ya python yada hız faktörü yüzünden çekirdek kısmı C++ yazılıp kullanımını pythona bırakmışlar. Python bilmeyen biri için buna malesef demek zorundayım. İnşallah ilerde en azından böyle Caffe gibi çekirdeği C++ yazılmış kütüphaneler için doğru düzgün bir C / C++ arabirimi yazsınlar. Beklemek yerine elbette bizimde bir taraftan python öğrenmeye çalışmamız gerekiyor. Caffe için biz bu sıkıntıyı komut satırı kullanımı ile aşmayı planlıyoruz.

Derin Öğrenme kütüphanelerinin genel ikinci sıkınıtısı genel olarak Windows desteği olmaması. Bence bir başka hatada bu. Akademik camiada makale için bir şeyler yapılacaksa elbette windows la muhatp olmak zorunda olmayabilirsiniz. Fakat Ticari bir faaliyete girilecekse, windows işletim sistemini dışlamak müşteri portföyünüzü küçültmek anlamına gelir.

Caffe de resmi windows dağıtımı yok malesef. Resmi dağıtım dışı bazı çalışmalar var

Caffeyi kullanmak için ilk etapta bu linklerden birine müracaat edin. Yada Daha Önce derlenmiş bir paket bulun.  Biz derlemek için İlk alternatifi kullandık. Linki verilen siteden zip olarak indirip harddiskte bir dizine açtık.
  • Öncesinde  yapmanız gerekenler
  • Cuda desteği olan bir derleyiciyi kurun Visual Studio gibi 
  • Cuda ve CuDNN kütüphanelerini  indirip kurun - NVIDIA sitelerinden -
  • halen kurulu değilse CMake i kurun



 CMake ile kaydettiğimiz  dizine gelin ve orda derlemek için bir dizin oluşturun derleyiciyi seçin.  Önce Configure sonra Generate ile önce gereken indirmeleri internetten kendisi otomatik yapacaktır. en sonda derlemek için seçtiğiniz derleyiciye göre -solution file - derleme projelerini oluşturacaktır.
Visual Studio ile biz bu dosyayı açtık ver derlmeye başlattık. Cuda kodlarıda içerdiğinden derleme işlemi epey bir uzun sürüyor. İşlemin sonunda çalıştırılabilir dosyaları elde ederiz.



isim adının peşine -d olanlar debug olarak derlenmiş olanlar. Burda en önemli dosya elebette caffe.exe . Derleyemediysenizde canınızı sıkmayın bizden temin edebilirsiniz. Windowsun nimetlerinden.

Peki Nasıl kullanacağız ?

Önce resmi sayfadan CommandLine  kısmını okumanızı öneririm.

genel kullanımı 
caffe

şeklinde komutlar   { train  , test ,device_query, time } dan oluşuyor parametreler ile  birlikte
caffe ile komut satrından pek çok işlemi yapabiliyorsunuz. Mesela Grafik işlemcinizin durumunu sorgulamak için
caffe device_query -gpu 0

dediğinizde



yukardaki gibi bir ekran gelir Elbette CUDA destekli bir GPU olması lazım.

train komutu eğitim için için kullanılır. Caffede Eğitim işlemi için elbette verilere ve  bu verilerin üzerinde eğitim için kullanılacağı model dosyasına ihtiyaç vardır.  Model dosyası prototxt  denen bir formatta tutuluyor. text bir dosya ve okunabilir bir yapı


İlk etapda böyle bir model dosyasını oluşturmak zor olacağından hali hazırda test edilmiş ve kullanılmış model dosyalarının kendi verilerimize göre güncellenip uygulanması öneriliyor.
Her halükarda bu konuda bir şeyler öğrenmemiz gerekiyor. bulabildiğim  açıklamalar şunlar

  • http://caffe.berkeleyvision.org/tutorial/net_layer_blob.html
  • http://caffe.berkeleyvision.org/tutorial/layers.html

Veri dosyamızı nasıl vereceğimize gelirsek. Caffe , LMDB, levelDB , HDF5 gibi data veri dosya formatlarından okuma yapabiliyor. Böyle bir imkanınız yoksa  doğrudan görüntü dosyasınıda kendisi okuyup kullanabiliyor. Nerden ne şekilde okunacağını model dosaysında  belirtmeniz gerekiyor.
Mesela MNIST için levelDB formatındaki bir veriyi okutmak için model dosyasında


yazılıyor.  Doğrudan Görüntü dosyasını kullanmak isteseydik. Her satırda Görüntü dosyasının yolu ve adını tutan sonunada ait olduğu sınıfı gösteren bir formatta text dosyası oluşturmamız gerekiyordu



gibi
Sonrasında Model proto dosyasında  bu text dosyayı verileri okumak için kullanmasını bildirirdik
bakınız



gibi. aynı şeyleri test verisi içinde yapmamız gerekiyor. Eğitim test verileri olmaksınızın bizi yanıltabilir. bakınız

Eğitim esansında kullanılacak parametreler teker teker parametre olarak mümkün olduğu gibi yine prototxt formatında bir solver dosyası olarakda vermek mümkün.
mesela yukardaki model dosyası için

# net : Eğitimde kullanılacak model dosyasının adı
net: "alpha_train_text.prototxt"
# test_iter geri besleme öncesi kaç ke ağın ileri besleyeceği.
test_iter: 25

# test_interval: Test verisi ile yapılacak kontrolün aralığı mesela 300 iterasyonda bir
test_interval: 300

# Yapa Sinir ağı parametreleri öğrenme hızı vs...
base_lr: 0.001
momentum: 0.7
weight_decay: 0.0005
# Öğrenme hızı ile ilgili parametreler
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# her 100 iterasyonda durumu gösteriyor.
display: 100
# En çok kaç iterasyona kadar çalışacağı
max_iter: 1500
# arada eğitilmiş model saklanacakmı ve kaç iterasyonda bir
snapshot: 100
snapshot_prefix: "alpha"
# Caffenin çalışma modu CPU yada GPU
solver_mode: GPU
böyle bir solver dosyası kullanılıyor.  yukarda # peşinden gelen açıklma satırları ile açıklamaya çalıştım. YSA parametreleri için YSA üzerine bir şeyler okumanız lazım...
biraz eski bir kaynak ama burdan  aratıp bazı şeyleri öğrenmeniz mümkün
http://www.faqs.org/faqs/ai-faq/neural-nets/

Solver dosyamızı da ayarladıktan sonra şu komutu verip

caffe train -solver lenet_solver.prototxt 

çalışmasını izleyip



sistemin eğitilmesini bekliyoruz. Caffe uzantısı  ".caffemodel" olarak eğittiği modeli kaydeder.

Eğitim Bitti peki biz bu eğitilmiş modeli nasıl kullanacağız. Bu konuda OpenCv yardımımıza koşuyor. OpenCv 3.0 dan itibaren contrib kısmında DNN diye bir modül var. OpenCv kurarken contib modülünü dahil edip derlediyseniz - kitapta derlemeyi anlattım -  kullanabilirsiniz. İlaveten model prototxt dosyasının kullanım için hazırlanmış versiyonu lazım genelde deploy ön adı ile sağlıyorlar. Çünkü normal dosyada veri girişi için dosya kullanılıyor. OpenCv nin sağladığı bu kolaylıkla OpenCv ve bahsettiğimiz DNN modülünü derlediğiniz her sistemde eğitilmiş model dosayası ve deploy protxt dosyası ile çalıştırabilirsiniz.

Bizde yukarda gösterdiğimiz gibi mnist verisi için bir eğitim yaptık ve daha önce OpenCv KNN ile yazdığımız programa DNN ekledik.



KNN ile % 97.6 olan başarı caffe ile yaptığımız bu eğitim ile %99.3 e yükseldi.

Şimdilik yazacaklarımız bu kadar sorularınız olursa bildiğimiz kadarıyla cevaplamaya çalışırız.


Mnist with Deep Neural Network from bluekid on Vimeo.



Perşembe, Aralık 31, 2015

Derin Öğrenme 4

Geçen yazımızda konuyu bitirmiştik ama yeni gelişmeler çıktı. Bu gelişmelerden en önemlisi Google'ın   kendi geliştirdiği sistemi açık kaynak olarak yayınlamasıydı. Pek çok büyük firma derin öğrenme üzerine hazırladıkları kütüphanelerini açık kaynak kodlu yayınladılar. Aslında henüz oturmamış bir alan ve bu alanda baskın bir kütüphane yok.  Bu yüzden bende en azından genel kullanılan diğer  kütüphaneleri  listeleyim  istedim.

1) TensorFlow : Google ın yayınladığı açık kaynak kodlu bir kütüphane. Derin öğrenme konusunda Tensor terimini çok duyacaksınız. Tensor çok boyutlu veri matrisleridir.

Bu kütüphane ile tensörlerin akışı ile yapay öğrenme metodları gerçekleştiriliyor.  Tıpkı caffe deki gibi çekirdek kütüphane c++  ile yazılmış olsada, ana kullanım Python üzerinden yapılabiliyor. Lisansı ticari kullanıma uygun. Bence bir başka eksi yön windows desteği yok malesef.

2) The VELES :  Bu kütüphanede Samsung firmasının  geliştirmiş olduğu derin öğrenme kütüphanesidir. Pythonda geliştirilmiş ve GPU için hem CUDA hem OpenCL desteği var.
Lisansı yine ticari kullanıma uygun.

3) Computational Network Toolkit (CNTK)  : Bu kütüphanede Microsoft'un C++ temelli geliştirdiği yine açık kaynak kodlu kütüphane. Benim gibi C++ kullanan kişiler için  bir avantaj elbette. Microsoft ne derece arkasında duracak bilemiyorum. Malesef halen beta statüsünde duruyor.



4) Intel® Deep Learning Framework :  Intel firmasının geliştirmiş olduğu yine C++ temelli bir kütüphane C API kullanılarak çağrılıyor. hem CPU hemde GPU desteği var fakat GPU için OpenCl temelli kodlama yapılmış.

5) Theano : Python da yazılmış çok genel bir kütüphane doğrudan derin öğrenme için kullanıldığı gibi  üzerine yazılmış keras veya lasagne gibi kütüphanelerle de kullanabiliyorsunuz. pyCuda ile GPU kullanarak çalışmasını hızlandırabiliyor.

6) MXNet  : C++ temelli bir kütüphane. Hemen hepsinde olduğu gibi C++ ile değil.  Python,R, Julia gibi diller üzerinden kullanabiliyoruz. Windows için hazır paketleri var.

 7) warp-ctc  : C temelli bir kütüphane. Baidu nun ürünü  Torch üzerinden kullanılacak şekilde düşünülmüş. Ses tanıma  üzerine çalışmışlar





Bu liste böyle uzuyor gidiyor.  Bu tür kütüphaneler ,dökümanlar ve kitaplar gibi kaynakların listelendiği aşağıdaki linke bir göz atın.







Cumartesi, Kasım 07, 2015

Derin Öğrenme 3

Bir önceki yazımızda kabaca çalışma sisteminden bahsetmiştik. Bu yazımızda pratik olarak neler yapabileceğimize bakalım.

Sitemizi takip ediyorsanız görmüşsünüzdür. eskiden beri pratik uygulamalara ağırlık vermişizdir. klasik YSA kütüphanesi olan FANN 'ın pek çok değişik alanda kullanarak gösterdik. Genel kullanım aslında aynı.

  • Uygulanacak bir alan bul. 
  • Verileri topla. 
  • Sistemi eğit. 
  • Eğitilmiş sistemi kullan.

Sıfırdan bir derin öğrenme sistemi yazmak çoğumuz için mümkün değildir. Gerekli de değildir.  Hali hazırda pek çok kişi  tarafından geliştirilmekte olan uygun kütüphanneler mevcuttur. Bunları kullanmak hem daha sağlıklı hemde daha kolaydır. Tekerleği icat edilecek yer var edilmeyecek yer var ... Bizim görüşümüz kendinize en yakın gördüğünüz ve gelişmesi devam eden bir kütüphaneyi seçmektir. Sonrasında çalışmalarımızı bu sistemi öğrenmek ve uygulamak üzerine harcaya biliriz. Biz bir kaç tanesinden bahsedelim.

Torch 

Torch aslında genel bir Yapay Öğrenme kütüphanesi ve Geçmişi epey eski hatta bir vakitler üzerine yazılmış görüntü işleme kısmıyla birlikte çıkmıştı Torch Vision diye biz de bahsetmiştik. Torch Vison pek gelişmesede ana kütütüphane olan Torch çok gelişti. Ana kütüphane C de yazılmış olsada, Lua destekli olarak epey revaçta bir kullanıma sahip. GPU desteği zaten derin öğrenme sistemlerinin olmazsa olmazı. Açık kaynak kodlu ve ticari kullanımada uygun bir lisans yapısı var.

Caffe 


Berkley Üniversitesi tarafından geliştirilmiş bir sistemdir Caffe .  Açık kaynak kodlu, ticari kullanıma uygun ve GPU destekli bir yapıdır. Temelde C++ olarak yazılmıştır. Hiç program yazmadan Komut satırından çalıştırılan programlarla ve google 'ın  -Protocol Buffers - Google's data interchange format - ile yazılmış model yapıları ile eğitip kullanabiliyorsunuz. 



mesela bakınız.


NVDIA'nın DIGITS  ürünü ilede  GUI  üzerinden kullanabiliyorsunuz.



Pek çok araştırma gurubu tarafından kullanılan bir sistem olan Caffe bizimde tercihimizdir. 
Matlab ve python destekleride vardır. Caffe için en büyük  eksiklik şimdilik windows desteğinin pek iyi olmaması. Resmi bir windows versiyonu yok. Fakat bu konuda değişik çalışmlar var
Sonuncusunda çalıştırılabilir bir versiyonunda var

Caffenin bizim açımızdan diğer bir  avatajı da OpenCv 3.0 ile birlikte Caffede eğitilmiş olan modelleri kullanma imkanına sahib olmamızdır.  Mesela bir önceki yazımızdaki video yu  Caffe de eğitilmiş "bvlc_googlenet.caffemodel" modeliye yazdık.  Caffe de  eğitilmiş modellerede ulaşabiliyorsunuz. 

 OpenCv de Derin Öğrenme sistemlerine ulaşmak için OpenCv 3.0 'ı contrib eklemeleri ile birlikte kurmalısınız. -Kitabımızda anlatmıştık -  Bu kısımda dnn modülünde  bahsettiğimiz özellikler var.

Dökümantasyonu ;
docs.opencv.org/master/d6/d0f/group__dnn.html
Örnek Program ;
github.com/Itseez/opencv_contrib/blob/master/modules/dnn/samples/caffe_googlenet.cpp
Dökümantasyondaan görülebileceği gibi  hali hazırda çalışmasada eğitilmiş Torch modelleri içinde üzerinde çalışılıyor.

Bizim bahsettiğimiz dışında da başka kütüphaneler var elbette. Burdan detaylı bir listeye ulaşabilirsiniz. Listenin olduğu site deeplearning.net de genel konu ile ilgili açıklamalara ve bağlantılara ulaşabilirsiniz.

Bütün yazdıklarımızı toparlarsak. Pratik bir çalışma yapmak  istediğimizde

1) Hazırda geliştirilmiş sistemlerden biri tercih edip öğrenmemiz gerekiyor. Bizim önerimiz Caffe
2) Büyük işlemgücü gerektiğinden en azından CUDA destekli bir NVDIA grafik kartlı  bir bilgisayar edinin. Daha teferruatlı açıklama için bakınız ; deep-learning-hardware-guide
3) Bol miktarda veri istediğinden ;  sabır  ve zaman  - mümkünse ekip oluşturup işi paylaşmak -
4) Bütün her şey hazır olup eğitim denemelerine başlandığında eğitim işleminin uzun olması yüzünden zaman.

Listedende anlaşılacağı üzere orjinal bir çalışma için ; İnsan para ve zaman gerekiyor...

Evet bir yazı dizimizinde böylece sonuna geldik. Bir başlangıç yapabilmek adına gerekenlerden bahsettiğimizi umuyorum. Umarım birilerine bir faydası dokunur. Her türlü soru , öneri ve eleştirilerinizi bekeleriz...

Pazar, Kasım 01, 2015

Derin Öğrenme 2

İlk yazımızda temel bazı gerçeklerden bahsetmiştim. Bu kurallardan "Derin öğrenme" için yapabileceğimiz çıkarımlar şunlar. "Derin öğrenmeyi" öğrenip kullanabilmeliyizki  geri kalmayalım. Hayranı olup kalmayalım ki derin öğrenmenin eksikliklerini ve diğer gelişmeleri görebilelim. Uygulamanın gerekliliklerine göre en uygun olan metodun seçiminde nesnel - objektif - olabilelim.


"Derin öğrenme" muğlak bir terim çünkü  rivayetler muhtelif ; Benim anladığım kadarıyla
 çok sayıda katmandan oluşan hiyerarşik  dönüşümlerle verilerin anlamdırıldığı -öğrenildiği- metodlar topluluğu. 
diyebiliriz. Yapay öğrenmenin bir dalı diyede bahsedilir. Günümüzde  başarılı olmuş bu  metodların ortak noktası çok katmanlı olmalarıdır. Anlayabildiğim kadarıyla bir birinden farklı pek çok metodu içerdiğinden,   bu  genel isim  tercih ediliyor.  Bu metodlardan  bazılarının isimleri verelim ; - kusura bakmayın mecburen  ingilizce vereceğiz -

Bütün bunları detaylıca anlatmam pek mümkün - haddimde - değil. Gereklide değil zaten.  Olabildiğince pratik anlatmaya çalışalım. Klasik metodlarda Veriden bilgiye geçişte aşamalar aşağıdaki gibidir.



Ham veri genellikle bir öznitelik çıkarma 1 - feature extraction -  aşamasından geçer. Öznitelik çıkarma aşamasınında genel bir metodu yoktu. Vakti zamanında Anderw Ng nin bir konuşmasından bir parça yayınlamıştık. - İzlemediyseniz tavsiye ederim izleyin - Derin öğrenme algoritmalarında hiyerarşik dönüşümlerle  bu işlevide yerine getiriliyor. Biraz daha somutlaştıralım.

Derin öğrenme algoritmalarının içinde en bilineni belkide 'Convolutional neural networks' - CNN - dur.  Mesela derin öğrenme dendiğinde ilk akla gelen örneklerden olan görüntü sınıflandırma  problemlerinde CNN kullanıldığını görürüz. CNN aslında gelişmiş bir Yapay sinir Ağıdır. Normal ileri beslemeli sinir ağı öncesi  bir anlamda  öznitelik çoğaltma ve özetleme katmalarıda içererek , Öznitelik çıkarma işlevini içine almışdır.



Bu metodun  iç yapısında   Convolutional  katmanları ile  ile öznitelikler çıkarılır ve çoğaltılır.  Bu katman aslında görüntü işleme pek çok işlem için  de kullandığımız basit filtreleme işlemidir.


Pool katmanları ile çoğalan öznitelikler basit işlemle küçültülür.

üzerinde işlem yapılan kısımın,  max  pooling  ile en büyüğü , min pooling ile en küçüğü  ve  median pooling ile ortalaması  alınarak özetlenmiş olur.

Bu katmanlar değişik kombinasyonlarlar ve değişik parametrelerle sıralanarak , 



bir öznitelik çıkarma işlevi yapılmış oluyor.  Öznitelik çıkarma işlevi de bir anlamda öğreniliyor.



YSA ksımında ise girdi sayısının ve katman sayısının büyüklüğü sebebiyle klasik metodlarla eğitimi  pek kolay değildir. Bu yüzden gerek öğrenememe -under fitting - gerekse ezberleme - over fitting - problemleri 2 için modern çözümler ve kullanılmaktadır.

Mesela ; Dropout diye tabir edilen bir yöntem var.  Ağ içindeki bazı bağlantıların kaldırılmasıyla  eğitim performansı artırıyor.



Mesela ; aktivasyon klasik fonksiyonları yerine - ReLu - Rectified Linear Unit  kullanımı gibi.



Ezeberleme problemi için tek başına metodlar işe yaramaz.  Bahsedilen büyüklükteki bir ağ yapısı normal bir veri setini kolaylıkla ezberler. Bu yüzden devasa büyüklükte ve genişlikte veri setleri oluşturulur.

Derin denecek kadar çok katmanlı bir yapıda ve devasa büyüklükteki bir veri seti için yine devasa bir işlem gücü gerekiyor olması süpriz olmaz sanırım. İşlem gücü için genel çözüm GPU  kullanımıdır. Günümüzde NVDIA bu işte en öndedir. Çünkü CUDA 3 ile yıllardır bu iş üzerine emek vermişti. 


İnşallah kafanızda derin öğrenme ile ilgili kabacada olsa somut bir şeyler oluşturabilmişizdir.


DeepNN from bluekid on Vimeo.


Üstteki video da Derin öğrenme ile eğitilmiş bir sınıflandırıcının kullanıldığı basit bir örnek hazırladık diyerek  bu yazıyı sonlandıralım.

Devam edecek İnşallah....
Görüş ve önerilerinizi bekleriz....

 Notlar;
1) Bir parça bu yazımızda bahsetmiştik  bakabilirsiniz.
2) YSA lar ve eğitim konusunda  bu yazımızda birşeyler anlatmıştık
3) 2008 de bahsetmişiz.  bakınız 

Pazar, Ekim 25, 2015

Derin Öğrenme 1

Yapay Zeka ile ilgili konuları takip ediyorsanız, muhakak rastlamışsınızdır. Bu günlerin moda kavramı derin öğrenme - Deep Learning -  Gün geçmiyorki filan konuda, falan konuda  derin öğrenme uygulandı şöyle başarılıydı böyle başarılıydı haberleri duymayalım.  Dünayanın en büyük en parlak şirketleri ekipler kurup bu konu üzerinde  çalışıyorlar.  Dünyanın en iyi üniversitelerinde araştırma gurupları var.



Kısaca derin örğenme tarafına doğru güçlü bir rüzgar var. Bütün bunlar yapay zekanın bütün hedeflerine derin öğrenme ile ha ulaştık ha ulaşacağız hissiyatı veriliyor. Doğrudan konu hakkında konuşmadan önce giriş niteliğinde temel bazı konulardan bahsetmek istiyorum.

Bilim ve teknolojinin de bir tarihi var. Bilim ve Teknolojik gelişmelerde yıllara göre ilerlemeler görünür.



Bilim ve teknolojide gelişmeler her zaman aynı hızda gitmez. Aslında coğu zaman ortalama  bir hızda gelişmeler olur. Ama bazen bir buluş bir yenilik ile gelişme hızı eski hızına göre yıllar sürecek seviyeye bir kaç ayda ulaşılır.  Böyle parlak yenilikler pek çok  insanın gözlerini kamaştırır.  Olmadık beklentilere girilir.  Bir örnek verelim.  Günümüz yapay zeka çalışmalarına 1956  yılında 1 başlandı. Gelişmelerin gidişatından, 1960'lı yılllarda  "Bilgisayarlar  on yıl içinde insanlar kadar akıllı olacaklar " diyenler çıktı.  Ne mutluki !  yıllar  geçmesine rağmen ortada böyle bir gelişme olmadı.  :)


 Keza gelişmeler her zaman aynı yönde de olmadı. Mesela kütüphanemdeki en eski Yapay Zeka kitabının 2 tarihi 1991 ve içindeki konular Mantıklsal akıl yürütme, Doğal Dil İşleme, Uzman Sistemler, Robot bilim şeklinde sıralanıyordu. Güncel bir kitabın çok değişik konulardan bahsedeceği barizdir.  Yani bazı zamanlarda bazı alanlar çok öne çıkıyor, pek çok insan bu alanda çalışıyor. Sonra bir başka alanda bir gelişme oluyor, ve o alanda çalışmalar çoğalıyor.




Yukardaki grafikdeki gibi A ve D diye iki metod bulunmuş. A metodu gelişerek A1 ve A2 diye geçerliliğini korumuş. D metodu D1 ve D2 diye gelişmiş ama. İlk etapta gelişme olmamış hatta D1 hali hazırda terk edilmiş. D2 metodundan  uzun  zaman sonra  D21 , D22, D23 metodları geliştirilmiş halen güncelliğini koruyor. Grafik ve isimler farazide olsa Bilmin pek çok alanında ve elbetteki Yapay zeka araştırmalrında benzeri durumlar olmaktadır.

Bütün bunlardan anlamamız gereken şeyler nelerdir.

  • Gelişmelerde devrim niteliğinde ilerlemelere vesile olan modelleri takip etmemiz, öğrenip uygulayabilmemiz lazım ki geri kalmış olmayalım.
  • Bahsettiğimiz modele mucizevi bir hayranlıkla bağlanıp kalmamalıyızki. Bir başka metod çıkış yaptığında afallayıp kalmayalım. Çünkü yeni bir metdo bulabilmek, hali hazırdakinin eksikliklerini görebilmekle başlar....
Gelişme ve gelişmeye vesile olacak metod nasıl belirlenebilir.  Bunun en bariz yolu daha iyi olduğunu göstermekden geçer. Mesela bir motor için geliştirilecek metod eğer daha az yakıt ile daha çok güç üretiyorsa. Bir motor yaparsınız ve ispatlarsınız. Yapay Zeka çok daha geniş ve muğlak bir alan. Nihayi hedef olaran belirlenmiş bir "Turing Testi" olsada bunun pratik ölçümü pek mümkün değil. Bu durumda yapay zeka çalışmalarının çok önemli ve çok pratik bir kısmı olan  yapay öğrenme üzerinden metodların yarıştırılması mümkün olabiliyor.

Yapay Öğrenmede, motodların performanslarını ölçmek için veri setleri oluşturulmuştur. Yapay öğrenmede hali hazırda  pek çok metod vardır. Metodlardaki gelişme bu listelerde daha iyi - kesinlik anlamında - sonuçlarla ispatlanmaktadır. Derin öğrenme metodlarının uygulandığı sonuçlar günümüzde bu listelerin üst sıralarını oluşturmaktadır.

Yapay Öğrenmede pek çok metod var dedik. Peki metodlar arasında nasıl seçim yapabiliriz. Biraz da bu işin temellerine bakalım.

Mühedislikte tek önemli olan şey kesinlik değildir. Şöyle örnekleyelim ; Bir uygulama yazmaya çalıştığımızı düşünün.  Bölme işleminde virgülden sonra 1000 basamak hesaplayan bir metodun kesinliği virgülden sonra 3 basamak hesaplayana göre daha iyidir. Lakin pek çok iş için  3 basamaklık bir hassasiyet yeterlidir.

Bir başka konuda uygulamanın alanı ve ortaya çıkan verinin yapısıdır. Her meotod her çeşit veriye uygulanamayabilir.  Uygulamanın gerektirdiği kısıtlamalar olabilir. Mesela her metodun ortak bir noktası olan eğitim aşamasının hızı,  Uygulamanın anlık eğitime ihtiyaç duyması ile bazı metodların eğitim aşamasının çok uzun olması sebebiyle kullanışsız olabilir.

  • Yabancı dildeki şöyle tabirler var.  "No Silver Bullet" ve "No free lunch" . İşin özü  "armut piş ağzıma düş" durumu  hiç bir yerde olmadığı gibi Yapay öğrenmede de yoktur.  "Falan  diye bir metod  çıkmış  her şey bunu kullanmak lazımdır " anlayışı yanlışdır.

Genel olarak şunu söylemek isterim. Bir uygulamada sayılsal 3 ve algoritmik  bir çözüm varsa hesaplama süresi çok uzun değilse onu kullanın.  Bu mümkün değilse Uygulamanızın şartlarına göre  olan bir araştırma yapın seçiminiz ona göre yapın.

Yazıda epey uzamış sizleri daha fazla sıkmak istemiyorum. Bu kadar temel girizgah  Derin öğrenme konusuna daha akılcı bakmanızı sağlayacağını umarak. Derin öğrenme konusundaki aşağıdaki videoya bakmanızı  önereceğim. Bu video Ankarada  Derin Öğrenme Etkinliği ndeki   Ferhat Kurt tarafından yapılan konuşmadır.



Daha yeni başladık :) devam edecek...

Not :
1)  Aslında çalışmalar daha önceden başlansada  Yapay Zeka  adı bu yılda toplanınan bir kongrede verildi.

2)  Kitap İletişim yayınlarından - cep üniversitesi serisinden- çıkmış ve 1991 yılında okumuşum hey gidi günler hey...

3) Numerical Analysis , Türkçede Sayısal Çözümleme diye geçiyor.



Pazartesi, Ekim 19, 2015

DLL Cehennemi

DLL ingilizce  "Dynamic Link Library" teriminin baş harlerinden oluşur. Windows işletim sisteminde. Dinamik kullanılan kütüphane dosyaları için oluşturulmuş bir dosya formatıdır. Bu tip kütüphaneler çalışma zamanında hafızaya yüklenip gereken kısımlar çağrılarak çalıştırılır.

Bilgisayar dünyasında pek çok dil var. Her biri için birden fazla değişik derleyicilere sahip. Her ne kadar belli kuralları da olsa bu çeşitlilik pek çok zaman probleme sebep olmaktadır.  Hatta tecrübeyle sabittir ki aynı dilde aynı derleyicinin değişik versiyonları arasında bile problemler görülebilmektedir.

Yazımızın başlığı DLL Cehennemi terminolojiye de girmiştir. DLL Hell . Bu yüzden  programlamada genellikle kullanacağım dinamik kütüphaneleri derlemeye çalışırım. Yada aynı derleryici versiyonunda derlenmiş olanları bulmaya gayret ederim. Çünkü ne zaman, nerde probleme sebep olacağı belli olmaz. Sonra bir bakmışsınız boşyere çabalayıp durmuşsunuz.

Neyse geçenlerde Volkan kardeş picproje formundaki bir "Çizgi izleyen sanal robot " yarışmasından bahsetti. Uğraşmak istediğinden bahsetti , benden de  bir bakmamı rica etti. Anladığım kadarıyla Çizgi izleyen robotun, gömülü yazılımcılar camiasında fiyakalı bir yeri var. Şimdi bahsedeceğimiz yarışmada basit bir simulatörle robot yapmadan bu işe girişe biliyorsunuz.


Yanlız küçük ! bir ayrıntı varmış. simulatörde algoritmanızı çalıştırmak için bir dll yazmanız gerekiyor. Bir başka küçük ayrıntıda simulatör Delphi ile yazılmış olması. Bizim de bunu kendi kullandığımız dilde yani C de yazmamız lazım.

Neyse biraz ricadan biraz da merak saikiyle DLL cehennemine daldık.

İlk aklıma gelen Delphi üzerinde çalışması gerektiğinden Borland C  ile olacağına kanaat getirdim. Önce internette BorladC nin ücretsiz versiyonunu aradım. IDE olarak tabii ki emektar CodeBlock ile.

Neyse BorlandC ile yaptığım ilk denemelerden oluşan DLL ler doğrudan çakılıp kaldı. Neden olduğuna dair hiç bir fikrimde yok. Hata mesajı olmayınca nereye bakacağınızıda bilemiyorsunuz. Alınan hatanın önemli bir ip ucu olduğunu  unutmayın.

İkinci denememizi mingw32 ile yaptık. Denememiz sonrasında  "Algo? Yordamina ulasilamiyor" hata mesajına muhatap olduk. İlginçdir bahsi geçen fonksiyon vardı orda.

Windows için çok faydalı bir  uygulama var. "Dependency Walker" bu programla exe dosyaların ihtiyaç duyduğu DLL leri listelerken. DLL içindeki yordamların adlarınıda görebiliyorsunuz.


ordan bakınca bizim "Algo1" yordamı "Algo1@24" olmuş olduğunu gördüm.

sebebini araştırdım. "Decorated Names" diye bir kavrama  ulaştık.  Değişik derleyiciler değişik şekilde  yordamların ismini değiştiriyor. Bu problemden kurtulmak içinde Tanımlama dosyası - def- oluşturup.



linker için de def   komutuyla def file bildirilir.


Bütün bu işlemleri bir çırpıda anlattığıma bakmayın epey bir araştırma gerekti.  Ve en nihayetinde Artık  simulatörden çağrılabilen DLL dosayasını oluşturabildik.


LineFollowerRobot from bluekid on Vimeo.

Basit de bir algoritma yazdık yukardada videosunu koyduk.

İlgilenirseniz koduda burdan indirebilirsiniz.

Salı, Eylül 22, 2015

OpenCv Görüntü İşleme ve Yapay Öğrenme


Yazılım sektörünün ülke için büyük bir fırsat olduğu kanaatindeyim. Çünkü sektörün en büyük gerekliliği yetişmiş insan gücü. İstenen kalifiyede olmasada, yetiştirilebilecek insan potansiyeline fazlasıyla sahip bir ülkeyiz.
Hali hazırda yazılım sektöründe çalışmalar çoğunlukla web,  veritabanı ve daha yeni yeni mobil üzerinden yürüyor. Yazılımcılarımızın hemen hepsi bu konularda çalışıyorlar. Dolayısıyla bu konularda bilgi ve tecrübe kazanabiliyorlar. Oysa tıpkı sanayide olduğu gibi kazanç ile yapılan işin gelişmişlik seviyesi ile doğru orantılıdır.
Yazılım sektörünün gelişkinliği şüphesiz ki yapay zeka alanındaki ilerlemelerle ölçülüyor.  Akıllı cihazlar, tamamen otomatik yada daha az insan denetimi gerektiren makinalar içeriklerinde yapay zeka algoritmalarıda barındıran yazılımlardır.  Türkiye şartlarında çalışma alanınız değişmese bile daha zeki web sayfaları daha akıllı veritabanları, yada mobil uygulamaları sizlerin çalışmalarınızı daha kıymetli yapacağı aşikardır.
Yapay Zeka uygulamalarının en büyük alanlarından biride Bilgisayarlı Görü - Computer Vision - dür. Temelde Görüntü işleme metodları ilaveten Yapay Öğrenme  - Machine Learning - algoritmaları  içeren bir alandır. Bu alanda ülkemizde akademik olarak pek çok çalşmanın yapıldığı halde malesef ticari çalışmaya pek rastlanamamaktadır.
OpenCv Bilgisayarlı görü alanında dünyada yaygın olarak kullanılan bir kütüphanedir. Bu kitapla OpenCv yi sizlere tanıtmak. Bu vesileyle , Bilgisayarlı Görü alanında çalışmalar yapma ufkunuzu  bir nebze olsun açmayı umuyoruz.

Uzun bir  zaman sonra nihayet kitap çalışmamızı tamamladık.  Kitabımız Level Kitapdan çıkıyor. Bana verilen bilgiye göre önümüzdeki ayın başında dağıtıma başlanacak. 

Not : Web sitesi