Sayfalar

Pazar, Temmuz 10, 2016

Caffe ile Finetune - Eğitimin Transferi - Örneği

Caffe malumunuz bir derin öğrenme kütüphanesi. Daha önce bahsettiğimiz için bu yazımızda anlatmayacağız. Önceki yazımız okumamış olanlar
Caffe for Windows 

burdan okuyabilirler. Biz bu yazımızda eğitimin transferinden - finetune - bahsedeceğiz. Derin öğrenme için gerekenlerin başında büyük mikdarda ve çeşitlilikte veri. Ve bu veriyi uygun hızda eğititebilecek işlem gücü. Eldeki -evdeki- imkanlarla bu tür bir uygulamaya girişmek bu yüzden pek mümkün olmuyordu. İşte burda eğitimin transferi imdadımıza yetişiyor.

-Fine Tune- Eğitimin Transferi nedir ?   Eğitim Ağ yapısında giriş den çıkışa en az hata ile ulaştıran ağırlık değerlerinin bulunmasından ibarettir. Adım adım anlatmak gerekirse.
  1. Ağırlık değerleri başlangıçta belli metodlarla yada rastgele belirlenir. 
  2. Giriş verileri, ağırlıklar ile çalıştırılıp çıkış değerleri hesaplanır.
  3. Hesaplanan değerlerle gerçek değerler arasındaki fark hesaplanır.
  4. Eğer bu fark istenen küçüklükte ise eğitim tamamlanır.
  5. Fark istenenden büyük ise Farka  göre ağ boyunca geriye doğru ağırlıklar güncellenir
  6. 2. Adıma dönülür.
Fine Tune terimin tam tercümesi ince ayardır. Başka bir veri seti için uygun şekilde eğitilmiş ağın yapısındaki ağırlık değerlerinin  kısmen alınarak,  yeni  başka bir veri için daha kısa sürede eğitiminde kullanma işlemine eğitimin transeferi diyoruz.

Örnek :  Men vs Women Shoes  

Önce veri hazırlayalım. Amacımız Erkek-Kadın ayakkabısı ayrımını yapabilen bir sistem olsun. Veriler için Ayakkabı satan bir e-ticaret sitesine - shoes.com -  uğradık


http://www.shoes.com/

Kadın ve erkek ayakkabıları için 420 şer tane örnek resim aldık. Bunların %70 ini eğitim %30 unu test için kullanılacak şekilde ayarladık. 'convert_imageset' ile resimler 256x256 ebatına getirilip LMDB formatında veritabanına aktarıldı. 'compute_image_mean' ile eğitim için kullanacağımız veri tabanından ortalama matrisi çıkarıldı.

Bundan sonraki adım için daha önceden eğitilmiş bir model seçmek gerekiyor. Caffe-Model Zoo da pek çok  eğitilmiş hazır model bulmanız mümkün.  Biz GoogLeNet i kullandık.  Caffe ile gelen modellerden biri pek çok  finetune örneğide var.  mesela;

modelin eğitim için kullanılacak prototxt dosyasında  eğitim transferi için yapmamız gereken değişiklikler var.

Öncelikle Loss katmanı - genellikle softmax - öncesi "InnerProduct" katmanının adını değiştirin. Bağlantılı olduğu katmanlardaki  adlarıda unutmayın. Sonra "InnerProduct" katmanının çıkış sayısını  kendi uygulamamıza göre güncelleyin. bizde 2 sınıf olduğunda 2 yapıyoruz.

Sonrasında Güncellediğimiz "InnerProduct" katmanı haricindeki bütün katmanların öğrenme parametrelerini sıfırlıyoruz.  'blobs_lr'  yada  'lr_mult' diye geçen parametreler.  Bu katmanların öğrenme parametrelerini sıfırlayarak eğitim transferi esnasında değişmemesini sağlıyoruz. Çünkü transfer ettiğimiz ağırlıklarda bu katmanlardan geliyor.

Bizim Örneğimizde çıkış sayımız iki olduğundan 'top-5 accuracy'  katmanları yani ilk 5 tahminin doğruluk oranını hesaplayan kısımlarında bir anlamı kalmıyor onlarıda kaldırıyoruz.

Veri giriş dosyalarımızı ve ortalama matris bilgisini data katmanına yazıyoruz. Artık model dosyamız kullanıma hazırdır.

Eğitim için kullanılacak olan solver prototxt dosyasında sadece başlangıç öğrenme hızını normalde olması gereken dendaha düşüğünü seçiyoruz. Eğitimde ilk başta birz daha büyük bir öğrenme hızı ile başlanır. Sonra eğitimde ileri safhalar geçtikçe öğrenme hızı azaltılır. Biz Eğitim transferi yaptığımızdan adını değiştirdiğimiz katman haricinde zaten eğitilmiş bir yapımız vardır. Bu yüzden daha düşük hızla başlıyoruz.

Eğitim transferide bir çeşit eğitimdir. Tıpkı eğitimdeki gibi caffe programını çağırıyoruz.

caffe train -solver solver-fine.prototxt -weights bvlc_googlenet.caffemodel -gpu 0

  Sonuç:

 İmkanımız kısıtlı olduğunda uzun boylu denemler yapamadık.  800 iterasyonla  0.768  başarı oranına - top 1 accuracy - eriştik.


  Modeli kullanıp sonuçları analiz edelim.


Eğitilmiş modeli doğrulamak için yine aynı siteden eğitim için kullanmadığımız resimlerden topladık 112 adetlik bu doğrulama verimizde 55 tane erkek ayakkabısı ve 57 adet kadın ayakkabısı vardı.

Kısa bir python programı yazdık ve doğrulama programı ile çalıştırdık.
 Erkek ayakkabılarından  55 tanesinin 37 tanesi doğru sınıflandırılmış
Kadın ayakkabılarından  57 tanesinin 49 tanesi doğru sınıflandırılmış
Ortalama Tahmin doğruluğu % 76.8

Yanlış sınıflandırlan resimlere bir bakalım.
 Kadın ayakkabısı zannedilen  Erkek ayakkabıları


 Erkek ayakkabısı zannedilen  Kadın ayakkabıları



 Resimlerden görüleceği gibi model haksızda sayılmaz.

Modelimizin doğruluğunu düzeltmek için kullanabileceğimiz bir başka faktörde ihtimal değeri. Model her iki sınıf içinde bir ihtimal değeri veriyor. yüksek olanı tahmin etti diyoruz. Lakin ihtimallerin bir birine yakın olması durumlarıda var
Mesela ;

Bu ayakkabı için Erkek : 0.45  Kadın = 0.55 diye ihtimal verilmiş.  Kadın ayakkabısı diye tahmin edilmiş ama erkek ayakkabısıymış

Bu ayakkabı için Erkek : 0.49  Kadın = 0.51 diye ihtimal verilmiş.  Kadın ayakkabısı diye tahmin edilmiş Kadın ayakkabısıymış ama ihtimali çok yakın. Muhtemelen bu modele çok benzer erkek ayakkabılarıda vardır.


Sonuç olarak; Başarı oranı çok yüksek gibi görünmeye bilir. Ve elbette daha çok veri ve bazı ince ayar ve denemelerle muhakak ki daha iyi sonuçlara ulaşılabilir. Fakat pek ala insan tarafından da karıştırılabilecek kadın ve erkek ayakkabı modelleri var. Normal olarak bizim modelimizde karıştırıyor. 

Cuma, Temmuz 08, 2016

Python İle Yapay Zeka 3

Regresyon :

Problemimizin sınıflandırıcı ile çözümünü yapmıştık şimdide regresyon metodlarından biri ile aynı problemi çözelim.

Biz problemimizde LassoLarsCV metodunu kullanacağız. Liner bir metodun Lars algoritmasıyla ve cross validation ile sağlaması yapılmış bir regresyon modeli çıkarır. Lars ağgoritması için verdiğimiz linke bakın. Cross-validation kavramından bahsedelim biraz.

'Cross Validation' diye de geçen bir terim bu. Türkçeye çapraz doğrulama diye geçmiş. Bir önceki örnekde de görmüştük. Eğitimini yaptığımız sistemin eğitim için kullanmadığımız verilerle doğrulmasının yapılması gerekiyor.  Kabaca anlatırsak ; çapraz doğrulama ile eğitim verisi  istenen sayıda parçaya ayrılır.

Bir parçasının ayrılıp diğerleri ile model eğitilir.  Ayrılan parçası ile doğrulaması yapılarak o modelin performansı ölçülmüş olur.  Sonuçda elede edilen eğitilmiş modellerin  performanslarının ortalaması kullanılır.

Uygulamamıza dönersek. Verimiz zaten hazırdı. Aynı kısımdan devam edersek önce kullanacağımız sistem için gereken çağrıları yapalım



 İlk satırda LassoLarsCv  sınıfını kullanmak için gerkeken çağrıdır. İkinci satırda ise bu tip modellerde performansı artıran bir ön işleme metodudur. 


Scale- Ölçekleme  fonksiyonu ile her değerden ortalama çıkarılıp standart sapmaya bölünerek uygulanıyor.  İlk satırda Ölçekleme için gereken sınıf oluşturuluyor. İkinci satırda Ölçekleme için gerken parametreler fit fonksiyonu ile ve eğitim verisi kullanılarak  elde ediliyor.  Sonraki satırlarda Sonrasında transform fonksiyonu ile gereken ölçekleme işlemleri eğitim ve test verisi için uygulanıyor.

ilk satırda LassoLarsCV sınıfı tanımlanıyor 10 parçalı bir çapraz doğrulama yapılması için parametre olarak 'cv=10' veriliyor.
ikinci satırda diğer sklearn modellerindeki gibi fit fonksiyonu ve eğitim verileri ile eğitim işlemi yapılıyor

bu model yine aynı diğer çoğu sklearn modelinindeki gibi predict fonksiyonu ile eğitilmiş modelimizin test verisi için tahminlerini alıyoruz.

Fakat bu modelimizde sınıflandırmanın aksine tahminler sadece 0 ve 1 arası bir değer olarak hesaplanır.


Modelimizin performansını ölçmek için  bu sayıların bir eşik eğerin altında olanlarını 0  üstünde olanlarını 1 olarak  filitreliyoruz. Eşik değeri olarak orta noktayı seçiyoruz 0.5

Artık tahminlerimizi tıpkı sınıflandırmadaki gibi değerlendirebiliriz.


İlk  satırda karşılaştırma matrisini -confusion matrix-  hesaplıyoruz.  Bu yazımızda konuyu biraz daha açalım bu matrisde sutunlar tahminleri satırlar gerçek değerleri gösteriyor
yani ilk satırda 1638 + 55 = 1693 gerçekde 0 olması gereken gözlem var.  Bunun 1638 i  0 diye doğru tahmin edilmiş 55 tanesine 1 denilmiş Aynı şekilde ikinci satırda yani 1 değeri için 3+969 = 972 gözlem vardır bunlardan 969 tanesi 1 diye doğru tahmin edilmiş 3 tanesi 0 diye yanlış yahmin edilmiş.

Sınıflandırma örneğimizde giriş özelliklerinin önem derecesini görmüştük.  Şimdi kullandığımız metod da aşağı yukarı aynı amaç için coef_ özelliğini kullanıyoruz.



Regresyon modelimiz de de en önemli giriş özellikleri sırası ile Aydınlık değri Light  ve  Karbondioksit değeri CO2. Sınıflanırdmadaki modelimizin aksine bu iki özellik dışındakilerin bir önemi görünmüyor.

Eşik değerini  orta nokta olarak seçtik farklı eşik değerleri için tahminlerimizin doğruluk oranı değişirmi ?




Hesaplayalım  Yukardaki kodda hem eğitim verisi hemde tes verisi için tahminler yapılıp değişik eşik değerleri için doğruluk oranları hesaplanıyor. eğitim ve test verisi doğruluk oranını  ortalamalırnın maksimum olduğu eşik değeri hesaplanıyor.


Hesaplanmı eşik değerlerini grafik olarak gösteriyoruz ve altında bulduğumum optimum eşik değeri için hesaplanan eşik değerlerini yazıyoruz.

Koda ulaşmak için buraya bakabilirsiniz 

Evet Bir yazımızın daha sonuna geldik. Eğer Uygun zaman ve uygun bir veri seti bulabilirsem bu yazı serisinin bir sonrakinda Danışmansız - Unsupervised - metdola ilgili bir uygulama yapmak ve anlatmak istiyorum. Her türlüğörüş öneri ve sorularınızı bekleriz.

Pazartesi, Temmuz 04, 2016

Python İle Yapay Zeka 2

Yazımıza devam edelim

Eğitim için datamızı hazırlamıştık aynı işlemleri test verisi içinde uygulamamız gerekiyor. Bizim şimdi kullandığımız veri setinde test verileri için ayrı bir dosya hazırlanmış öyle bir dosya olmasa bile bizim verinin bir kısmını test için ayıırmamız gerekmektedir. Çünkü eğitim sonunda sistemi eğitimde kullanılmayan verilerle doğrulamak gerekli bir adımdır.



Eğtim verilerini hazırlamak için uyguladığımız adaımlarla aynı. sadece Giriş veri sutun adlarını grafiklerde kullanmak için kaybolmadan inLabels dizisine atıyoruz.

Eğitim :

Şimdi elimizde sensörlerden gelen verilerimiz var ve  sensör verilerine karşılık odanın boş olduğu yada içinde birilerinin olduğu bilgisi var. Böyle bir sisteme danışmanlı -Supervised - sistem deniyor.
Kullanacağımız kütüphanenin pek çok değişik modeli var. Eğitim hakkında dikkat edilmesi gereken pek çok konu var. YSA üzerine yazdığımız şu yazıdaki 
ysa-buyu-degildir.html
 bilgilerden çoğu bütün danışmanlı eğitim sistemlerinde geçerlidir okumanızı öneriririm.
Probelmimizi iki şekilde ele alabiliriz, Sınıflandırma ve Regresyon. Sınıflandırmada çıkış değeri odanın boş yada dolu olması üzerine bir sınıflandırma. Regresyonda ise 0 ila 1 arası bir çıkış değerine ulaşmak şeklinde bir her ikisi içinde deneme yapacağız.

Sınıflandırma :

 Önce gereken kütüphane  çağrılarını yapıyoruz.


Biz sınıflandırma için kullandığımızda RandomForestClassifier tercih ettiğimizden onu dahil ettik. Scikit-Learn kütüphanesinin içinde elbette pek çok değişik sınıflandırıcı mevcuttur.  Sizde onları dahil edip denemeler yapabilrsiniz.  Kütüphanenin bir güzelliği çoğu modele aynı kullanım arabirimi oluşturmuş olmasıdır. İkinci satırda ise eğitim sonrası tes aşamasında modelimiz başarısını ölçmek için kullanacağımız fonksiyonları çağırmamız için gereken modüldür.


RandomForestClassiffier  karara ağaçları türü bir sınıflandırıcıdır. Her sınıflandırcının kendisine göre ayar parametreleri vardır. Daha iyi sonuçlar için bu parametreleri ayarlamak gerekebilir. İlk aşamada varsayılan değerlerle deneme yapıp sonuçları değerlendirerek ve Probleminizi, verilerinizi dikkate alarak denemeler yapmanız gerekecektir.



Yukarda gördüğünüz gibi  biz ilk satırda RandomForestClassiffier sınıflandırıcı tanımladık sadece iki parametre ayarı yaptık. İkinci satır ise sklearn modelleri  için genel bir yapıdır. fit  fonksiyonuyla sınıflandırıcıya giriş ve çıkış verileri verilip kendini eğitim işlemi başlatıldı. Eğitimm işlemi verinize ve parametrelerinize kullandığınız sınıflandırıcıya göre değişik zaman alabilir. Bizim verimiz büyük olmadığından eğitim işlemi çok kısa sürer.

İlk satırda predict fonksiyonu ile eğitilmiş modelimize test giriş verileri verilip  bu verileri için çıkış değerleri tahmin ediliyor -predictions- . predict fonksiyonuda sklearn modelleri  için genel bir yapıdır.
 ikinci satırda  eğitilmiş model başarı ölçüm fonksiyonlarından birini görüyorsunuz. confusion_matrix fonksiyonu bizden gerçek sonuçlar ve modelin tahminlerini ister ve karşılaştırır. Ve bize matris formunda bir çıktı verir. Şimdi bizim örneğimizde odanın boş olması ve dolu olması durumu var. Modelimizde yine 2 şekilde tahmin yürütebilir. Bu taminler gerçekler sonuçlarla karşılaştırıldığında
  1. Boş Oda -- Boş 
  2. Boş Oda  -- Dolu 
  3. Dolu Oda  -- Boş
  4. Dolu Oda -- Dolu 
 diye tahmin edilebilir. Bu fonksiyon bu  bu yapıyı 2x2 lik bir matris şekline gösterir.
detaylı bilgi için bakınız
Confusion_matrix
Bu bize modelimizin tahmin geçerliliğini gösterir.  Model başarı ölçüm sistemlerinden biriside tahminlerin doğruluk oranıdır. accuracy diye geçer



Doğruluk oranı içinde accuracy_score fonksiyonunu çağırıyoruz. Elbette bu hesabın yapılması için gerçek değerlerin ve tahminlerin verilmesi gerekiyor.  Sonuçda eğittiğimiz model %97.7 bir tahmin doğruluk başarısına sahip.

RandomForestClassiffier modelininin Karar Ağacı yapısında bir sınıflandırıcı olduğunu söylemiştik  Ağaç temelli modellerin Giriş değişkenlerinin önem sıralamasınıda veren bir  özelliği vardır.
Eğitilmiş model eğitim sonrasında feature_importances_  değişkeninde giriş değişkenlerinin önemlerini tutan bir dizi oluşturur. Peki bu liste ne anlama gelir.  Grafiğe dönüştürelim ve görelim.



Kodda ise  Matplotlib  kütüphanesi ile sutun garfiği oluşturuldu. Grafikler sonucları çok daha iyi görmemizi sağlar
Odanın boşmu dolumu olduğunu tahmin etmemizde en çok önemi olan giriş değişkenleri ; grafikden de kolayca görebileceğimiz gibi  Öncelikle aydınlık -Light-  sonra Karbondioksit -CO2 - miktarı  geliyor.

Problemimizin sınıflandırmayla çözümünün de sonuna geldik bir sonraki yazımızda Regresyonla bir bir çözüm daha üreteceğiz.
Görüş ve önerilerinizi bekleriz.

Hayırlı bayramlar

Pazar, Temmuz 03, 2016

Python İle Yapay Zeka 1

Bu günlerde devamlı meşgul olduğumuz konu Python olduğunda onun ilgili yazılara devam ediyoruz.
Bu yazımızda Yapay Zekanın oldukça pratik bir alanı olan Makine Öğrenmesi -Machine Learning- üzerine basit bir örnek yapacağız.

Python dil özellikleri olarak oldukça kolay olduğundan, başka bir dili iyi bir şekilde bilen birinin zorlanmadan öğrenebileceği niteliktedir. Fakat zannımca dilin genişliği öğrenmedeki pekiştirmeyi geciktiriyor.

Pythonun öğrenmeyle, sadece giriş yapmış oluyorsunuz. Öğrenmeniz gereken devasa kütüphaneler var.  Devasa bir kaynakda İnternette var.  Malesef türkçe pek yok. Türkçe kaynak azlığından bahsetmişken bahsedeyim

 PyData  Python konusunda etkinliklerle tanınan Uluslararası bir topluluktur.  Dünyanın dör bir yanın da çok güzel organizasyonlar yapmaktalar. PyData - Ankara olarak Ayşe hanımın öncülüğünde önümüzdeki günlerde ilk etkinliği olacak
Introduction to Data Science Using Python and R
 Muhtemelen türkçe olmasını beklediğimiz :)  bu etkinliğe gitmeyi planlıyoruz -inşallah- İlgilenenlerin de katılımını bekliyoruz.  Bizden duyurması...


Neyse konumuza dönelim devasa kütüphanelerden bahsediyorduk. Biz bu yazımızda çok yaygın olan bir kaç tanesini kullanacağız.
  • Pandas : Verileri Aanlizi kütüphanesi ; okumak yazmak evirmek çevirmek vs...
  • Matplotlib : daha çok 2 boyutlu çizim ve grafikler görseleştirmeler için kullanılan bir kütüphane
  • Scikit-Learn :  Makine Öğrenmesi kütüphanesi
  • Numpy : n boyutlu dizi ve matrisleri kullanmak ve üzerinde hesaplamalar yapmanıza yarayacak bir kütüphane
  • IPython : Adım adım görerek python programı yazmanıza olanak veren sihir ! ;)
Örnek uygulama için şöyle giriş niteliğine uygun bir veri seti bulamamız lazım. Daha Önceki yazılarımızda da çok müracaat ettiğimiz kaynağa yöneliyoruz.
UC Irvine Machine Learning Repository
 Burda ufak bir aramayla "Occupancy Detection" veri setinde karar kılıyoruz.
http://archive.ics.uci.edu/ml/datasets/Occupancy+Detection+

Veriyi Anlamak

Problemi çözmenin ilk adımı veri setini anlamakdan geçer.

Verimiz Enerji tasarrufuna yönelik. Binalardaki ısıtma havalandırma ve iklimlendirme için kullanılan enerjinin talebe göre otomatik ayarlanmasıyla tasarruf edilmesi düşünülüyor. Özetle yapılmak istenen ; sensörlerden alınan bilgilerle o kısmın - odanın - kullanılıp kullanılmadığını tespit ederek, kullanılmadığında tassaruf moduna geçilmesi.
Veri setinin sayfasında da konuyla ilgili bağlantılar var. keza  ufak bir internet araması ilede

gibi çeşitli başka çalışmalara ulaşabilirsiniz.

Şimdi verinin içeriğine bakalım
  • Temperature : Sıcaklık ,
  • Relative Humidity : Bağıl Nem, %
  • Light : Aydınlık Sevyesi, Lux
  • CO2 : Karbondioksit Miktarı, ppm
  • Humidity Ratio : Nem Oranı , Sıcaklık ve Bağıl nemden hesaplanıyor
  • Occupancy : Ölçümün yapıldığı kısımda birilerinin olup olmaması, 0 kimse yok , 1 var
ilk 5 değeri kullanarak  son değişkeni tahmin eden bir sistem geliştireceğiz.



Veriyi Okumak

 Evet kodlamaya geçelim bakalım...
IPython NoteBook 'umuzu açıyoruz.

İlk önce lazım olan kütüphaneleri yüklüyoruz.


son satır IPython üzerinde matplotlib çizimlerinin gösterilmesi için



verilerimiz eğitim için datatraining.txt test içinde datatest.txt dosyalrında csv formatında tutuluyor.
pythonda pek çok şekilde okumamız mümkünsede. En rahatı olan pandas ile okuyoruz.
read_csv ile okuyoruz.

 columns ile okuduğumuz verinin sutun isimlerini görüyoruz.

describe ile sayısal değerler sahip sutunlar için ortalama, minimum, maksimum vb gibi istatistikler ayrı ayrı hesaplanır ve tablo olara size gösterilir.


head(n) ile verimizin ilk n satırının değerleri tablolarak gösterilir




Verimizin kullanmadığımız sutununu kaldıralım - drop - ve giriş  çıkış  değerlerini ayıralım.

1)  date sutununu siliyoruz.
2)  Occupancy sutununu çıkış verisini tutacağımız out_train değişkenine atıyoruz.
3)  Occupancy sutununu data_train den siliyoruz.

ve son aşama  Makine Öğrenmesi algoritmalarında veriler genellikle Numpy ndarray formatında istenir. Bu yüzden verilerimizi values ile numpy ndarray formatına çeviriyoruz.


Evet artık makina öğrenmesi kısmına geçebiliriz elbette test için kullanacağımız verilerede aynı işlemleri uyguladıktan sonra
Yazı baya uzamış burda keselim.
Devamı bir sonraki yazımıza....

Pazartesi, Haziran 27, 2016

Python ile GUI - pySide -


Bu ara python ile uğraştığımdan bahsetmiştim. Python devasa kütüphane desteğine rağmen, GUI konusunda pek de gelişkin araçlara sahip değil malesef. Dağıtımlarda standart gelen Tkinter ne yazıkki pek güzel değil. Aktif, güncel  bir GUI aracı yok malesef. Kod yazarak GUI oluşturmakda eziyet. Epey bir araştrıma yapdıktan sonra bulabilidiğim en rahat çözümden bahsetmek istiyorum. PySide

PySide Qt bazlı bir  kütüphane. pyQt de öyle bir çözüm, hatta daha da yaygın. Ama malesef arkasında ticari bir firma var. Anladığım kadarıylada ticari kullanım için lisans satın almanız gerekiyor. Pyside ın hali hazırdaki versiyonu 1.2.4 ve Qt 4.8 bazlı. Lisansı ticari kısıtlama içermiyor LGPL.  Ek olarak Qt. 5.x bazlı bir dağıtım -PySide2- üzerinde çalışmalar devam ediyor hatta Qt nin desteğide var bakınız.  
https://wiki.qt.io/PySide2
Peki nasıl kullanacağız ?

* Öncelikle PySide paketini kurmamız gerekiyor windows için kolay bir kurulum var.

pip install -U PySide
 
* GUI oluşturmak için QtDesigner ı kullanacağız. Pythonun kurduğunuz dizinin altındaki dizine geçin. Ben Anaconda dağıtımını kullandığım için

'C:\Anaconda2\Lib\site-packages\PySide'
bu dizin içinde designer.exe  adı altında Qt Designer ' ulaşıyorsunuz. Bu programı çalıştırın


Dialoglu bir seçeneği kullanın.

Bundan sonrasında sol tarafta GUI araçlarında sürükle bırak tarzında  GUI dizaynımıızı yapıyoruz.



Biz bir tek giriş nesnesi ve bir liste kutusu ortayada bir düğme koyduk girişi yapılan texti listeye ekleyeceğiz. Dizayı işimiz bitince dizaynımızı
'PySide-Deneme.ui' 
olark kaydediyoruz. komut satırından
pyside-uic PySide-Deneme.ui -o PySide-Deneme.py

yazarak dizaynımızı python koduna çeviriyoruz.



kodda Ui_Dialog diye bir sınıf tanımlanmış ama yeterli değil, ilaveler yapmamız gerekiyor.
Önce başına
import sys

sonra sonuna
app = QtGui.QApplication(sys.argv)
form = Ui_Dialog()
Dialog = QtGui.QDialog()
form.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())

satırlarını ekliyoruz. Artık uygulamamız çalışır fakat sadece  dizay ettiğimizi GUI yi görüyoruz. Listeye ekle düğmesinin çalışması için.  Önce ekeleme işlemi için  Ui_Dialog sınıfına bir fonksiyon ekleyelim.
def Ekle(self):
   self.listWidget.addItem(self.lineEdit.text())
 QLineEdit nesnesindeki text i QListWidget nesnesine ekliyoruz basitçe

Ekle Düğmesine basıldığında bu fonksiyonun çağrılması için ise
self.pushButton.clicked.connect(self.Ekle)
satırını Ui_Dialog Sınıfının setupUi fonksiyonun sonuna ekliyoruz.


ve hepsi bu kadar mutlu son....

Kodu incelemek isterseniz
github.com/birolkuyumcu/PySide-Deneme
burdan bakabilirsiniz.

Cumartesi, Mayıs 21, 2016

Günahsız Dille Duâ

Ey Rabbimiz eğer unutmuş ve yanılmışsak bizi sorumlu tutma.
Ey Rabbimiz, bizi doğru yola erdirdikten sonra kalplerimizi kaydırma, gönüllerimizi aç, işlerimizi kolaylaştır.

Allahım Bize kendine yakınlaşmayı kolaylaştır. Senden uzaklaştıracak şeylere fırsat verme. Bizi sana muhtaç olma ve senden başkasına ihtiyaç duymama hissiyle müstağni kıl....

Bize ibadet ve itaat için en kolay yolu nasib et. Gaflet ve hatalarımızdan dolayı bizi hesaba çekme. Günlerimizi sana yakınlığa vesile olacak ve rızanı kazandıracak amellerle geçirmeyi nasib eyle...

Allahım ! Dillerimizi ancak zikr-i ilahine bırak Kalblerimizi Zat-ı ilahinden başkasına bağlama. Ruhlarımızı sana yakınlığın latif rüzgarıyla ferahlandır, gönüllerimizi sevginle doldur. iç dünyamıza kullarına karşı iyi niyetler yerleştir.Nefislerimizi ilmin cihetine yönelt...

Bizi temizi alan kirliyi bırakan, afiyetin kadrini bilip şükreden ve kendisine vekil olman için
senin kefilliğine razı olan kullarından eyle. Bizleri azametini tanımaya muvaffak kıl...


....

Resûlullah (sas) Hazretleri ashabına şöyle buyuruyor:
-Allahü Teâlâ'ya günahsız dille duâ edin!
Diyorlar ki:
-Yâ Resûlallah, günahsız dilimiz yoktur, nasıl günahsız dille dua edeceğiz?
Şöyle açıklar günahsız dille dua etmeyi:
-Sizin diliniz kendiniz hakkında günahlıdır, ama başkaları hakkında günahlı değildir.
Öyle olunca siz başkaları hakkında günahsız olan dilinizle dua edin, onlar da sizin hakkınızda günahsız olan dilleriyle dua etsinler. Böylece günahsız ağızlarla birbirinize dua etmiş, makbul duaları almış sayılırsınız...

Dua eder dualarınızı bekleriz Özellikle vav çizmek için sandalcı çavuşluğunu bırakan ihtiyar için

Cumartesi, Nisan 16, 2016

Poincare Plot Feature Extraction 1

Nasettin hocaya sormuşlar hocam sizin bir icadınız varmı ?
hoca ;
 Karla ekmek yemeği icat ettim ama sonra bende beğenmedim bıraktım 
demiş.
Feyiz kaynağımız Nasrettin hocamızdan çok şeyler öğrenmdiğimizi blog'umuzu takip edenler bilir.
Bizimde naçizane bir icadımız oldu. Zaman serisi tipindeki veriler için bir öznitelik çıkarma metodu. Aslında EEG verileri için kullandıkda
Yapay Sinir Ağları ile Epilepsi İçin Otomatik EEG analizi

Yazıya okuduysanız işimizi görmüş bir öznitelik çıkarma olarak görünüyor. Fakat tabii ki genelleştirmek için kesinlikle yetersiz. Aradan epey bir vakit geçti, hep bir bakayım diyorum bir türlü vakit bulamıyorduk. Bu günlerde biraz vakit bulunca ucundan kıyısında anlatmaya ve kodu pythona çevirmeye başladık.

Öncelikle Zaman serisi tipindeki veriler çok yaygın ve çok çeşitli. Bu yüzden envai çeşit  öznitelik çıkarma metodlarıda mevcut elbette. Bir kısmından bahsetmiştik
Zihin Egzersizleri 2 


Konuya geçelim denemeler yapmak için önce seriler oluşturalım.



resimlerden çizilmiş bu serileri görünüşleri ile ayrıştırabiliyoruz. Bu haliyle kullanımı pek mümkün değildir. Elbette sabit bir genişlikteki veriyi seçip kullanabiliriz fakat verinin seçeceğimiz kısmına göre veri bir ileri veya geri gitmek bile veri vektörünü nerdeyse tamamen değiştirir.

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.

 Yukardaki serilerin Poincare Plot metoduyla çizimlerini görelim

belki bir parça daha kolay ayrıştırılacak halde . Bu haliyle kullanımını görmekteyiz. Mesela tıp alanında  kalp atım hızı değişkenliği - Heart Rate Variability -  analizlerinde kullanılıyor

İnternette ufak bir aramayla pek çok makaleye ve çalışmaya rastlaya bilirsiniz
bir örnek verip geçiyoruz.

Poincare Plot Used As Confirmative Tool In Diagnosis Of Left Ventricular Diastolic Dysfunction For Diabetic Patients With And Without Myocardial Ischemia

Biz burdakilerden farklı metodla bu grafik üzerinden öznitelik çıkarmayı deneyeceğiz. İlk aşamada noktalar arasında vektöreler oluşturacağız. Vektör büyüklüğü ve yönü üzerinden histogramlar çıkaracağız. Sonrasında bir birini takip eden vektörler üzerinden iki boyutlu histogram çıkaracağız.

Yukardaki kadarıyla kodu

github.com/birolkuyumcu/Poincare-Plot

adresinden IPython notebook olarak inceleyebilirsiniz.

Şimdilik bu kadarını yazalımbırakalım. Devamını yazmaya kudretimiz ve dahi şevkimiz olursa devam edecek İnşallah

Cuma, Nisan 08, 2016

Bizden Haberler

Epeydir bir şey yazamıyorum. Aslında yazacak çok şey çıkıyor. Vakit bulup toparlayıp yazarım dedikçe zamanla yitip gidiyor. Bütün bütün kaybolmadan işaret taşı nevinden bir kaç satır karalıyalım dedik.

İlk olarak kitapdan bahsedelim. Kitabın ikinci baskısına geçileceği bildirildi. Memleketimizde çokda yaygın olmayan bir konudaki kitabın ikinci baskıya gitmesi bence güzel bir gelişme. Alanlara, tanıtanlara ve yayılmasına yardımcı olanlara burdan teşekkür ederim.

Geçen sene oldukça yoğun geçti aslında. Yılınbaşında Tübitak Desteği için başvurulan bir proje içindeydik. Proje konusu aşağı yukarı "nöro marketing" üzerineydi.  Nöro marketing beyin dalgalarının anlamdırılması esasına dayanan bir alan. Beyin dalagalarının anlamlandırılması zaten uygulama alanı çok geniş bir alan. Bunun pazarlama amaçlı kullanılarak ticari kazanç elde edilmesi üzerine bir projeydi. Bilimum bürokratik işlem ve alınan danışmanlık hizmeteri sonunda proje sunum aşamasına geldi. İlk aşamada 2 hakem atandı değişik üniversitelerden. Farklı tarihlerde ayrı ayrı sunum yapıldı. Aradan bir kaç ay geçince muhtemelen  hakemlerin farklı görüşlerinden yeni 2 hakem daha atandı. Onlarada ayrı ayrı sunum yapıldı. Aradan epey bir zaman geçtikten sonra projenin kabul görmediğini öğrendik malesef.

Yılın son 6 ayında bu sefer bilgisayarlı görü alanında bir projeye dışardan yardımcı olduk.


IHA görüntüleri üzerine bir Ar-Ge projesi idi.

Gerek yukarda bahsettiklerim gerekse bu tür projelerle uğraşanlardan dinleiklerime istinaden memleketimizdeki Ar-Ge projelerindeki problemler hakkında en azından başlık olarak bir şeyleyler karalayalım. Uygun bir imkan bulursak genişletilmiş versiyonunuda yazarız



* Ekip nasıl kurulur ? :  İstenen nitelikde insan bulamama çünkü yok yetişmemiş. Olmayan nitelikleri ve ilaveten "ağzıyla kuş da tutsun " şeklinde ilanlarla heveslileri kaçırmak. Hevesliler kaçınca geriye hallederiz cilerin kalması. Hallederizle hiç bir şeyin hallolmayacağı. Şaş kaza hevesli , Kısmen nitelikli insanında bütün işin üzerine yıkılması ile geldiğine pişman edilmesi.

*Plan Nasıl Yapılır :  Ekip yok, Ekipman yok, Veri yok. Beklenenlerin teknik olabilirliği meçhul. Zaman kısıtlaması evler şenlik, dünyada eşi olmayan çalışmayı 6 ayda çıkarmak istenir...  Buyrun cenaze planına...

*Akademik Danışma veya Danışamama : Projenize uygun yeterlilikte danışmanı nerden bulursunuz. Eş dost tanık diye adı yazılanlar. Bulduğunuz danışman ne derece vakit ayırabilir.  Adamın işi başından aşkındır, ip ucu nevinden ufak yönlendirmeler ancak yapar. İp ucunu takip edecek dedektif yok. Kimisi olabildiğince teorik kalır. Şuralarda daha kısa bir yol olabilir araştıralım der. projenin kısıtlamalarına bakmaz İş gücü çıkmaz sokaklarda gezer durur.

*Devlet Desteğimi , Kösteğimi :  hibe desetği olmadığı sürece  bence "Projenin teknik olabilirliği"  dışında  ıvır zıvırla uğraşmaması gerekirken. Bilimum bürokrasiyi önünüze yığması. Kabul red kriterlerinin net olmamması. Fuzuliden günümüze proje sundum tanıdık değil deyu almadılar anlayışının devam ediyor olması.  Yurt dışında başarılı olmuş projelerin çoğunluğu memleketimizde olsa destek alamıyacak oluşu...

*Yatırımcı Melek mi ? : Yurt dışında başarılı olmuş projelerin çoğunluğu memleketimizde olsa yatırımcı bulamıyacağı gerçeği. Yurt dışında yatırımın fikre ve fikri gerçekleştireceği düşünülen ekibe yapılırken. Memleketimizde yatırımcı hazır sofraya ortak olma şeklinde yapılır. Yatırımcı arıyan, fikre ve ekibe, hazır sofra sorarlar.

*Ar-Ge Nedir : Gerek ekipden biri olarak, gerek devlet olarak gerek yatırımcı olarak,  Ar-Ge nin ne olduğunu farkında olmadığımızın farkındamıyız ?  Araştırma ve Geliştirme ; Araştırma ve geliştirme işini araştırmadan yapabilrimiyiz ?  Nasıl planlaya biliriz şu kadar adam saatte biter diye. Gittiğimiz yönün doğru olduğunu ve isteğiğimiz sonucu vereceğine nasıl emin olabiliriz. Emin oluyorsa bu zaten araştırma değildirki !.  Bu durumda hazır sofranın - iş modeli- olmasının imkanı varmıdır.?

Haberlere devam edelim

mbed ile embeded konusuna bakdığımı söylemiştim.  Başka bir tür kart ile yine ufak bir çalışmam oldu.

Nesnelerin interneti IoT kavramı bunca popülerken bakmamış olmamız bir eksiklik olurdu. Ardunio bazlı wireless bağlantısı kurabilen mini bir board. Eklenmiş olan düğmeye basınca
ardesine bir sayaç değeri yolluyor.  Yazılımcıların çekinmemesi gereken bir alan diye düşünüyorum. C / C++ biliyorsanız, yabancılık çekmiyorsunuz.

Son olarak da Derin öğrenme konularına değinelim.  En az IoT kadar popüler olmaya aday bir konu. Bu konuda çalışabilmek için benim emektar diz üstü bilgisayarımı devredip yeniledim. bir Toshiba i7 ve NVDIA grafik kartlı bilgisayar aldım. Elbette yeterli değil ama konu üzerinde denemeler yapabilecek sevyede bir imkan sağlıyor.

İlla Linux da kullanın  derin öğrenme kütüphaneleri şak diye kuruluyor masalına bende inanıp bazı denemeler yaptım. Sonucusu bilgisayarın göçmesiyle sonuçlanan 3 denemeden sonra vaz geçtim. İlk olarak Linuxda söylendiği gibi her şey güllük gülistanlık değil. İkinci olarak Linux komut satırı handikapından kurtulmamış. Daha doğrusu kurtulmak istemiyor. Her problemde karşınıza bir kamyon komut satırı işler düşüyor. sonuçda garanti değil bu arada.
"X problemini çözmek için şu şu komutları yazın. "
Bilmem kaçıncı aşamada biri hata veriyor ortada kalıyorsunuz Geri nasıl alınacağıda meçhul.

 İlerde bir daha denermiyim bilmiyorum ama Windows da da pek ala idare edebiliyorum şimdilik.  Caffe yi mxneti theanoyu kurdum. Caffe de eğitim denemeleri yaptım . caffe ve mxnette hazır modelleri kullandım. Tabii bu arada el mahkum pythona başladım.

Derin öğrenmede genelde bütün yollar Python 'a çıkıyor. Rahmetli İsmail Arı zamanında söylüyorduda dudak büküyorduk. Akademik camia matlabdan nedendir bilinmez pythona göç etmişler. Heme her konuda python kütüphanesi bulabiliyorsunuz. Keza Derin öğrenme kütüphaneleride çekirdiği C++ da yazılsada kullanımı python tercih edilmiş durumda. Bizde python öğrenmeye başladık.

Pythona dil olarak her şey serbest bir dil yapısında tip tanımlama yok. Bu her ne kadar özgürlük gibi görünsede bence eksiklik. C / C++ da bir fonksiyonun prototipi size iyi kötü nasıl kullanacağınızı anlatır. şu şu şu tipte verileri yollayacağım şu tipde bana sonuç dönecek vs... Pythonda en azınmdan benim için hiç bir şey ifade etmiyor. Devasa kütüphaneleri olan bir sistem ama dökümante edilmiş hatta örneklenmiş değilse kullanamazsınız. Güzel tarafı ise kütüphanelerin kurulumu için bir sistemi var pip Pek çok - dikkat her demiyorum - kütüphane için çalışıyor. Paket kurulumunda bir problem yoksa tek satırla koda dahil edilebiliyor.

Pythonda bir başka problemde hangi versiyonun kullanılacağı problemi  2.x mi 3.x mi Uzun uzun araştırmaya gerek yok. Hali hazırdaki kütüphane desetği yüzünden 2.x i tercih edin. Python kurarken pek çok kütüphanenin hazır olarak bulunduğu dağıtımları tercih etmeniz sizin için iyi olacaktır.
wiki.python.org/moin/PythonDistributions
Ben Anacondayı yı tercih ettim. Hatta şöyle bir çalışmada yaptım


Python Deneme from bluekid on Vimeo.

python + openCv + sklearn

IDE olarak önerilerim.


Yazıyı çok uzatmışız umarım okuyan çıkar. Bizden haberler şimdilik bu kadar.

Günün anlam ve önemine istinaden Kandiliniz , Cumanız, Üç aylarınız maddi manevi hayırlara vesile olsun İnşallah

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 görebileceğiniz gibi çoğu kütüphane ya tamamen  python ile yada hız faktörü yüzünden çekirdek kısmı C++ yazılıp kullanımını pythona üzerinden yapmış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


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 dosyası 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...