Pazartesi, Ocak 22, 2018

Bir derin öğrenme deneyi ( dropout ve batch normalization )

Derin öğrenme artık hemen her alanda kullanılmaya başladı. Popüler oldular çünkü yapay öğrenme algoritmalarından en güçlüsü olduklarını kanıtladılar. Buraya şöyle bir not düşeyim güçlü olması her zaman en doğru çözüm olmasını gerektirmiyor. Neyse konumuza dönelim.  Gerçek bir uygulamaya başlayan insanların hemen farkına varacağı tuhaf bir durumu var. Ağ yapısının bir standardı yok. Çeşitli uygulamalar için başarılı olmuş modeller var elbette.  Lakin "benim şöyle bir problemim var buna en UYGUN ağ yapısı nedir ?"  sorusunun  bir cevabı yok.
Problem, ağın sadece yapısında değil. Standart bir ağ yapısıda kullansanız ;
  • bazı katmanların varlığı yada yokluğu,  ( batchnormalization, dropout, pooling,...)
  • bazı katmanların çeşitleri ( relu , elu,.... )
  • hiper parmetrelerin değerleri. ( filtre büyüklükleri, sayıları , ... )
  • Ağ parameterelerinin başlangıç değer atama metodları ( gaussian , xaiver,... )
  • vs ..
gibi pek çok konuda belirsizlikler var. Bu gibi belirsizlikler alanı  tecrübi yani deneysel hale getiriyor.
Lafı çok dolandırmadan devam edelim. Geçen hafta sonu bizde gpu nun boşkalmasından istifade bir deney yapalım istedik.

Deneyimizin konusu Droput ve BatchNormalization denen  katmanlar hakkında.
Kısaca bahsedelim;


Dropout Katmanı  ; Ağ içindeki bazı bağlantıların kaldırılmasıyla  eğitim performansı artacağı varsayılıyor.  Dropout katmanına  0 dan büyük 1 den küçük bir oran veriyorsunuz. Eğitim esnasında bu oran miktarındaki bağlantıyı rastgele kapatıyor.

Batch Normalization ;  Ara Normalizasyon diyeceğiz. Normalde ağın girişini ve çıkışını başlangıçda normalizasyon işlemine sokmanız zaten gerekiyor. Ama ağın içinde işlemler sonucunda da veri dağılımı değişebiliyor. Bu katmanda ağın katmanları arasındaki geçişde verileri normalize ediyor. Olumlu etkilediği söyleniyor.
Deneyimiz için cifar 100 veri setini seçiyoruz. 
bakınız 
www.cs.toronto.edu/~kriz/cifar.html

32x32 lik renkli görüntülarin 100 sınıf için sınıflandırılmasını gerektiren bir veri seti.
Ağ yapısı olarakda VGG benzeri bir ağ yapısı kullanacağız. Şöyle;


 Deneyimiz de  bu ağ yapısında dropout katmanına  sırasıyla  [0.1,0.2,0.3,0.4,0.5] değerlerini vereceğiz ve Bunu hem ara normalizasyon  - Batch Normalization - katmanı varken hemde yokken   deyeceğiz. Sonuçlara bakacağız. Yani Toplamda  5x2 = 10 defa cifar 100 verisi için ağı eğiteceğiz.
  • Ağı eğitmek için maksimum epoch değeri olarak 250 yi seçdik. 
  • Erken durma - Early Stopping - işleminide koyduk. 13 kez Test başarımında - validation acccuracy - bir iyileşme olmuyorsa eğitim sonlandırılıyor.
  • Öğrenme hızınıda Test Başarımına  bağladık. 3 epoch boyunca  Test başarımında bir düşme olmuyorsa öğrenme hızımızı yarıya düşürüyoruz.
  • optimzasyon algoritması için "adam" kullandık
  • batch size : 128
  •  loss='categorical_crossentropy' 
  •  metrics=["accuracy"]
Ara Normalizasyon  olmaksızın sonuçlar


Ara Normalizasyonlu sonuçlar


başlıkların anlamlarını verelim
  • 'Dropout' ; dropout oranı 
  • 'MaxAccuracy' ; Eğitim esnasında ulaşılan maksimum Başarı değeri 
  • 'MaxValAccuracy' ; Test verisiyle ulaşılan maksimum Başarı değeri 
  • 'MinLoss' ;   Eğitim esnasında ulaşılan minimum Hata değeri 
  • 'MinValLoss' ; Test verisiyle ulaşılan minimum Hata değeri
 Başarı değerinin büyük hata değerin küçük olması daha iyi. Problemimin sınıflandırma olduğundan başarı değeri daha önemlidir. Başarı değerininde Test için olan değeri daha anlamlıdır. Ağ yapıları çok güçlü olduklarından veri setiniz büyük bile olsa ezbere kayabilmekdedirler. Tablolarda en iyi değerleri kırmızı olarak yazdırdık.

İlk tabloda gördüğümüz gibi dropout oranı arttıkça Eğitim başarısı  düşüyor. Fakat 0.2 ye kadar Test verisi başarısını artırıyor. 

İki tabloyu karşılaştırdığımızda bariz bir şekilde görüyoruz ki ara normalizasyon eğitimimizi olumlu etkilemiş

Ara normalizasyonlu tabloda  dropout oranı arttıkça Eğitim başarısı  düşüyor. Fakat 0.4'e kadar Test verisi başarısını artırıyor. 

 Ezberleyince eğitim grafiğimiz nasıl oluyor bakalım
Başarı grafiği


Hata değeri grafiği

Eğitim başarı değerimiz 0.99 sevyesine çıkmasına rağmen test  başarı değerimiz 0.45 civarında kalıyor.

deneyimizdeki en başarılı test değerine 0.4 dropout ile ulaşılmış 0.589 Ama 0.3 de ona çok yakın bir değer vermiş 0.585 aslında ralarındak fark çokda büyük değil. Eğitim başarısına bakarsak.
0.3 için 0.962
0.4 için 0.911
Bence 0.35 dropout değeri ile yeniden bir eğitim yapmak lazım.  İlla birini seçeceksen 0.3 dropout değerini seçeriz.  En başarılı sonucumuzun grafiklerinede bakalım
Başarı Grafiği





Özetlersek ;
  • Ara Normalizasyon iyi etkiliyor
  • Dropout u kullanmak lazım ama fazlası zarar 
  • En başarılı modelimiz bile 0.60 başarı sevyesine ancak geliyor başka bir ağ yapısını denemek lazım
Bizden bu kadar.  Akadamik camiadan  daha geniş deneysel çalışmalarıda bekliyoruz...

Perşembe, Ocak 18, 2018

OpenZeka MARC Mini Otonom Araç Yarışması





Duyanlarınız vardır muhakkak ,MIT de önderliğinde ABD de  Mini otonom araç yarışması düzenlenenmektedir. 
Bu yarışmanın Türkiye versiyonu ilk defa düzenleniyor.  Türkiyede bu  sorumluluğun altına OpenZeka firması girdi. OpenZeka, Türkiyede derin öğrenme farkındalığının öncülerinden olan Ferhat Kurt beyin bir girişimidir.

OpenZeka Marc
En son teknoloji ürünü sensör ve yapay zeka algoritmalarını kullanmak ve uygulama geliştirmek,
Takım çalışması ve takımlara arası etkileşim kültürünü artırmak,
Kendine güvenen ve robotik alanında ülkemizi temsil edecek genç girişimcileri yetiştirmektir.

Bu yarışmaya katılan takımlara yarışmada kullanılacak mini otonom aracın tasarımı ve yapay zeka algoritmalarının kullanımı konusunda ücretsiz eğitim verilecektir.

Open Zeka, bu yarışmayla yakın gelecekte hayatın her alanında yer bulacak otonom sistemleri tasarlama ve algoritma geliştirme seviyesini lise düzeyine indirerek ülkemizde teknoloji firmalarının ihtiyaç duyacağı otonom sistemleri geliştirebilen insan kaynağını oluşmasına katkı sağlamayı hedeflemektedir.
diye  anlatılmış etkinliğin web sayfasında. Bizcede Bu yarışma,Yapay Zeka ve uygulamaları konusunda bir sosyal sorumluluk projesidir.


Etkinlik kapsamında verilecek eğitimler için elimizden geldiğince yardımcı olmaya çalıştık.

Etkinlik kapsamında
  • ROS, 
  • kontrol teorisi
  • lidardan veri okuma
  • lidar verisiyle duvarı takip
  • Kameradan veri okuma 
  • Renk Filtreleme 
  • Duba takibi ( Renk  Filtreleme )
  • Parkur ve joyistik kaydı
  • Kayıtı kulanarak Derin Öğreneme Modeli Eğitimi
  • Eğitilmiş Model ile aracın otonom olarak parkurda hareket etmesi
Anlatıldı. Bizde  OpenCv anlattık ve Derin Öğrenme modeli için veri seti toplama, eğitme ve eğitilmiş modelin kullanımı konusunda yardımcı olduk. Pek çok ilgili bilgili insanlarla tanışıp, konuşmakda ayrıca mutlu etti bizi.

Yarışmalar önümüzdeki ay başlayacağını burdan duyurmuş olalım.

Yarışmanın ülkemiz açısından önemi büyük,  pek çok kesimde bilgi birikimi ve tecrübe kazanma vesilesi olacak bir etkinlik.   Bu yüzden uzun ömrülü bir etkinlik olmasını arzu ediyoruz.  Yapay Zeka konusunda  ilgili herkesinde destek olmasını canı gönülden istiyoruz.

Salı, Ocak 16, 2018

2017 de neler yaptık

2018 in ilk yazısı olarak geçen sene neler yaptığımıza dair bir yazıyla başlamak istiyorum.  Öncelikle blogdan başlayalım.

Blog da yine uygulamalı ve pratik örnekler vermeye çalıştım. Yazılarımızın pek çoğu Derin öğrenme ile ilgiliydi.  Derin Öğrenme ile ilgili pek çok kütüphane ortaya çıkdı. Avantajlar , dezavatajları neler, Hangisini tercih etmek lazım ? gibi sorulara cevap niteliğinde  yazılar yazdık


Özetle Elbette Caffede kullanıyoruz ama tercihimizi Keras dan yana yaptık.  Bu yüzden  Caffenin yanı sıra bu yıl Kerası da kullanmaya ve öğrendiklerimi anlatmaya başladım
 ilki temel açıklamalar hakkında bir giriş yazısı ikincide LSTM anlatılıyor ve zaman serisi ile bir uygulama yazıyoruz.

 
Semantik bölütleme bilgisayarlı görü ile ilgili autoencoder denen bir Ağ tipiyle Uydu görüntüsünden bina bulma işlemi yapdık. 



Duygu analizi diye geçen yazıdan Doğal dil işlemenin bir uygulamasını yapıyoruz.

Caffe ilede ilgili iki yazımız var
 İlkinde FCN ağ yapısında hazır bir caffe modelinin kullanımıyla semantik bölütleme yapılıyor.
Ağ yapısından bahsediliyor.

İkicisi aslında Caffe modellerini görselleştirip hangi katmanda neler oluyor görebilmemizi sağlayan bir uygulama.





 Açık kaynak kodlu bir proje olarak paylaşıyoruz.


 Elbette OpenCv hakkında da yazılar yazdık
 Yazılar  OpenCv nin pythondan kullanımı ve Derin Öğrenme modellerinin opencv içinden çağrılmasıyla ilgili.


Bu rda bahsettiklerimiz dışında da yazılarımız var. Bu senede klasik olan şey malesef  yine ilgi çok tepki yok  durumunun devam ediyor olması. Ben yinede hatırlatmış olayım her türlü görüş önerilerinizi bekleriz.