5
Kaynak: http://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/ Caffe ve Python ile Derin Öğrenmeye Giriş Derin öğrenme, makine öğrenmesindeki yeni bir eğilimdir. Bilgisayarla görme, konuşma tanıma ve doğal dil işleme alanlarında birçok yeni başarı elde etti. Bu blog yayınının amacı size derin öğrenmeye uygulamalı olarak bir giriş yapmaktır. Bunu yapmak için, konvolüsyonel sinir ağı (CNN) ve Kaggle veri seti denilen derin bir öğrenme algoritmasını kullanarak bir Kedi / Köpek resim sınıflandırıcısı oluşturacağız. Bu yazı 2 ana kısma ayrılmıştır. Birinci bölüm derin öğrenmenin ardındaki bazı temel kavramları kapsarken, ikinci bölüm uygulamalı formatta hazırlanmıştır. Uygulamalı dersin (bölüm 4) ilk bölümünde, sıfırdan konvülasyonel sinir ağı kullanan bir Kedi / Köpek resim sınıflandırıcısı oluşturacağız. Eğiticinin ikinci bölümünde (bölüm 5), aktarım öğrenme adı verilen konvolüsyon sinir ağlarının eğitimi için gelişmiş bir tekniği ele alacağız. Sınıflandırıcıyı oluşturmak için bazı Python kodlarını ve Caffe adı verilen popüler bir açık kaynaklı derin öğrenme kütüphanesini kullanacağız. Sınıflandırıcı % 97'lik bir sınıflandırma doğruluğu elde edebilecek hale gelecektir. Bu yazının sonunda, konveksiyonel sinir ağlarının nasıl çalıştığını anlayacaksınız ve bu ağların oluşturulması için gerekli olan adımları ve kodu öğrenmiş olacaksınız. Bu dersin kaynak kodu bu github deposunda bulabilirsiniz. 1. Problem Tanımı Bu yazıda, Kaggle'dan bir veri kümesi kullanacağız. Veri seti, köpeklerin ve kedilerin 25.000 imajından oluşmaktadır. Amacımız yeni hayali hayvanı (kedi veya köpeği) yeni görülen imgelerde bulabilen bir makine öğrenme algoritması oluşturmaktır. Makine öğrenmede, bu tip problemler sınıflandırma olarak adlandırılır. 2. Geleneksel Makine Öğrenme ve Derin Öğrenme'yi kullanarak sınıflandırma Bir makine öğrenme algoritması kullanılarak sınıflandırma iki aşamada gerçekleşir: Eğitim aşaması: Bu aşamada, görüntülerden ve ilgili etiketlerden oluşan bir veri kümesi kullanarak bir makine öğrenme algoritması yetiştiriyoruz.

Caffe Derin Öğrenme Kütüphanesi

Embed Size (px)

Citation preview

Page 1: Caffe Derin Öğrenme Kütüphanesi

Kaynak: http://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/

Caffe ve Python ile Derin Öğrenmeye Giriş

Derin öğrenme, makine öğrenmesindeki yeni bir eğilimdir. Bilgisayarla görme, konuşma tanıma ve

doğal dil işleme alanlarında birçok yeni başarı elde etti.

Bu blog yayınının amacı size derin öğrenmeye uygulamalı olarak bir giriş yapmaktır. Bunu yapmak için,

konvolüsyonel sinir ağı (CNN) ve Kaggle veri seti denilen derin bir öğrenme algoritmasını kullanarak bir

Kedi / Köpek resim sınıflandırıcısı oluşturacağız.

Bu yazı 2 ana kısma ayrılmıştır. Birinci bölüm derin öğrenmenin ardındaki bazı temel kavramları

kapsarken, ikinci bölüm uygulamalı formatta hazırlanmıştır. Uygulamalı dersin (bölüm 4) ilk

bölümünde, sıfırdan konvülasyonel sinir ağı kullanan bir Kedi / Köpek resim sınıflandırıcısı

oluşturacağız. Eğiticinin ikinci bölümünde (bölüm 5), aktarım öğrenme adı verilen konvolüsyon sinir

ağlarının eğitimi için gelişmiş bir tekniği ele alacağız. Sınıflandırıcıyı oluşturmak için bazı Python

kodlarını ve Caffe adı verilen popüler bir açık kaynaklı derin öğrenme kütüphanesini kullanacağız.

Sınıflandırıcı % 97'lik bir sınıflandırma doğruluğu elde edebilecek hale gelecektir.

Bu yazının sonunda, konveksiyonel sinir ağlarının nasıl çalıştığını anlayacaksınız ve bu ağların

oluşturulması için gerekli olan adımları ve kodu öğrenmiş olacaksınız.

Bu dersin kaynak kodu bu github deposunda bulabilirsiniz.

1. Problem Tanımı

Bu yazıda, Kaggle'dan bir veri kümesi kullanacağız. Veri seti, köpeklerin ve kedilerin 25.000 imajından

oluşmaktadır.

Amacımız yeni hayali hayvanı (kedi veya köpeği) yeni görülen imgelerde bulabilen bir makine öğrenme

algoritması oluşturmaktır.

Makine öğrenmede, bu tip problemler sınıflandırma olarak adlandırılır.

2. Geleneksel Makine Öğrenme ve Derin Öğrenme'yi kullanarak sınıflandırma

Bir makine öğrenme algoritması kullanılarak sınıflandırma iki aşamada gerçekleşir:

Eğitim aşaması: Bu aşamada, görüntülerden ve ilgili etiketlerden oluşan bir veri kümesi kullanarak bir

makine öğrenme algoritması yetiştiriyoruz.

Page 2: Caffe Derin Öğrenme Kütüphanesi

Tahmin aşaması: Bu aşamada, eğitim görmüş modeli kullanarak eğitim veri setinde olmayan

görüntülerin etiketlerini tahmin etmek için kullanırız.

Resim sınıflandırmanın eğitim aşamasında karşılaşılan problemin iki ana adımı vardır:

Özellik Çıkarma: Bu aşamada, makine öğrenme algoritması tarafından kullanılacak yeni özellikler

çıkarmak için alan bilgisinden faydalanırız. HoG ve SIFT, görüntü sınıflandırmasında kullanılan

özelliklerin örnekleridir.

Model Eğitimi: Bu aşamada, makine öğrenme modelini eğitmek için resimlerin özelliklerinden ve ilgili

etiketlerden oluşan temiz bir veri kümesini kullanıyoruz.

Tahmin aşamasında, yeni görüntülere aynı öznitelik çıkarma sürecini uygularız ve özellikleri eğitilmiş

makine öğrenme algoritmasına geçirerek etiketi tahmin ederiz.

Geleneksel makine öğrenimi ve derin öğrenme algoritmaları arasındaki ana fark, feature engineering.

Geleneksel makine öğrenme algoritmalarında, özellikleri elle hazırlamamız gerekir. Buna karşılık, derin

öğrenme algoritmalarında, mühendislik otomatik olarak algoritma tarafından yapılır. feature

engineering zor, zaman alıcı ve alan uzmanlığı gerektirir. Derin öğrenme vaadi, daha az ya da hiç

feature engineering olmaksızın geleneksel makine öğrenimiyle karşılaştırıldığında daha doğru makine

öğrenme algoritmalarıdır.

(*feature engineering:https://en.wikipedia.org/wiki/Feature_engineering)

Derin öğrenme, birçok işleme katından oluşan bir sınıf yapay sinir ağları (ANN) anlamına gelir. *YSA

çok uzun yıllardır varlığını sürdürüyordu, ancak YSA'ların derin mimarilerini denemek için girişimler,

Geoffrey Hinton'un 2000'lerin ortasında gerçekleştirdiği atılım çalışmalarına kadar başarısız oldu.

Algoritmik yeniliklere ek olarak, GPU'ları kullanarak bilgi işlem yeteneğinde artış ve daha geniş veri

kümeleri toplamak, son zamanlarda derin öğrenme dalgalanmalarına yardımcı olan faktörlerdir.

(YSA/ANN: Yapay Sinir Ağı)

Page 3: Caffe Derin Öğrenme Kütüphanesi

3.1. Yapay Sinir Ağları (ANN’s)

Yapay sinir ağları (YSA), biyolojik sinir ağlarından esinlenen bir makine öğrenme modelleri ailesidir.

Yapay Sinir Ağları vs Biyolojik Sinir Ağları

Biyolojik Nöronlar insan beyninin temel bileşenleridır. Bir nöron, bir hücre gövdesi, dendritler ve bir

aksondan oluşur. Elektrik sinyalleri yayarak bilgiyi diğer nöronlara işler ve iletir. Her nöron kendi

dendritlerinden girdi sinyalleri alır ve akson boyunca çıktı sinyalleri üretir. Akson dallanıp sinapslar

vasıtasıyla diğer nöronların dendritlerine bağlanır.

Nöronların çalışma şekli için temel bir model şu şekildedir: Her sinaps, öğrenilebilir bir güce sahiptir ve

bir nöronun bir başkasına etkisinin gücünü kontrol eder. Dendritler sinyalleri hedef nöronun vücuduna

taşıdıkları yerde toplarlar. Eğer nihai toplam belirli bir eşiğin üstündeyse, nöron ateþ edilerek

aksonunda bir diklik gönderilir. [1]

Yapay nöronlar, biyolojik nöronlardan esinlenir ve yukarıda açıklanan modeli hesaplama formunda

formüle etmeye çalışırlar. Bir yapay sinir hücresi, ağırlıkları kendisine bağlı olan sonlu sayıda girişe ve

bir aktive fonksiyonuna (aktarım fonksiyonu olarak da adlandırılır) sahiptir. Nöronun çıkışı,

ağırlıklandırılmış girişlerin toplamına uygulanan aktivasyon işlevinin sonucudur. Yapay sinir ağları

oluşturmak için yapay sinirler birbirlerine bağlanır.

Feedforward Sinir Ağları

Feedforward Sinir Ağları, Yapay Sinir Ağlarının en basit şeklidir.

Bu ağların 3 katman türü vardır: Giriş katmanı, gizli katman ve çıktı katmanı. Bu ağlarda, veriler giriş

katmanından gizli düğümler (varsa) ve çıktı düğümleri arasında geçiş yapar.

Aşağıda, 2 gizli katmana sahip, tamamen bağlı bir feedforward sinir ağı örneği verilmiştir. "Tam bağlı"

her düğüm bir sonraki katmandaki tüm düğümlere bağlı olduğu anlamına gelir.

Unutmayın, gizli katmanların sayısı ve bunların boyutu yalnızca bağımsız parametrelerdir. Gizli

katmanlar ne kadar büyük ve derin olursa, teoride modelleyebileceğimiz daha karmaşık modeller de o

kadar artar.

Page 4: Caffe Derin Öğrenme Kütüphanesi

Aktivasyon Fonksiyonları

Aktivasyon fonksiyonları, yapay sinir hücrelerine giren girdilerin ağırlıklı toplamını dönüştürür. Bu

işlevler, verilerin karmaşık modellerini kodlamak için doğrusal olmayan olmalıdır. En popüler

aktivasyon fonksiyonları Sigmoid, Tanh ve ReLU'dur. ReLU, derin sinir ağlarında en popüler aktivasyon

fonksiyonudur.

Yapay Sinir Ağı Eğitimi

Eğitim aşamasının amacı ağın ağırlıklarını öğrenmektir. Bir yapay sinir ağı yetiştirmek için 2 elemente

ihtiyacımız var:

Eğitim verileri: Resim sınıflandırması durumunda, eğitim verileri görüntülerden ve ilgili etiketlerden

oluşur.

Loss fonksiyonu: Tahminlerin hatalılığını ölçen bir fonksiyon.

Yukarıdaki 2 elemente sahip olduktan sonra, geriye doğru yayma (backpropagation) olarak

adlandırılan ve degradasyon inişiyle (veya türevlerinden biri) bir algoritma kullanarak ANN'yi eğitiriz.

Geri yayılımın ayrıntılı bir açıklaması için, bu makaleyi öneriyorum.

3.2. Dönüşümsel Sinir Ağları (CNN'ler veya Konvetsiyonlar)

Dönüşümlü sinir ağları, ileri besleme ağlarının özel bir türüdür. Bu modeller, görsel bir korteksin

davranışını taklit etmek için tasarlanmıştır. CNN'ler görsel tanıma görevlerinde çok iyi performans

gösterirler. CNN'lerin konvolüel katmanlar ve katman havuzu katmanları adı verilen özel katmanları

vardır ve bu katmanlar bazı görüntü özelliklerini kodlamak için ağa izin verir.

Page 5: Caffe Derin Öğrenme Kütüphanesi

Konvolüsyon Katmanı

Bu katman, görüntünün uzamsal olarak kaydırıldığı, filtrenin girdileri ile girdi görüntüsü arasında nokta

ürünleri hesaplayan bir dizi öğrenilebilir filtreden oluşur. Filtreler giriş görüntüsünün tam derinliğine

kadar uzanmalıdır. Örneğin, 32x32 boyutundaki renkli bir görüntüye 5x5 boyutunda bir filtre

uygulamak istersek, filtrenin resmin 3 renk kanalının (Kırmızı, Yeşil, Mavi) tamamını kapsayacak şekilde

derinlik 3 (5x5x3) olması gerekir. Bu filtreler, görüntülerde aynı özel yapıyı gördüklerinde etkinleştirilir.

Havuzlaşma Katmanı

Havuzlaşma, doğrusal olmayan aşağı örneklemenin bir biçimidir. Havuz katmanının amacı, ağdaki

parametrelerin ve hesaplamanın miktarını azaltmak ve dolayısıyla aşırı uygunluğu kontrol etmek için

temsilin uzamsal boyutunu aşamalı olarak azaltmaktır. Havuzlamayı uygulamak için, maksimum

havuzlamanın en yaygın olduğu birkaç işlev vardır. Havuzlaşma sıklıkla, her derinlik diliminde 2 adımla

uygulanan 2x2 boyutlu filtrelerle uygulanır. İki boyutlu 2x2 boyutlu bir havuzlama katmanı, giriş

görüntüsünü orijinal boyutunun 1 / 4'ü kadar küçültür. [2]