Derin Öğrenmeye Giriş

Source: Deep Learning on Medium

train_images ve train_labels modelin eğitimi için kullanılacak veri setidir. test_images ve test_labels modelin eğitimi sonrası test gerçekleştirilecek veri setleridir.

Eğitim verimizi inceleyecek olursak :

60000’lik diziden oluşan 28 x 28 pixellik fotoğraflardan oluşmaktadır. train_labels ise train_images dizisinde karşılık gelen sayılardan oluşmaktadır.

Neler Yapacağız?

İlk önce eğitim verisiyle oluşturduğumuz ağı besleyeceğiz. Ağımız görüntülerle karşılık gelen etiketleri eşleştirmeyi öğrenecek.

Daha sonra test_images için ağımızın tahminlerini üretip test_labels ile doğruluklarını karşılaştırıp sonuçları kontrol edeceğiz.

Derin ağların yapı taşı filtre olarak düşünülebilecek katmanlardır. Katmanlar verilen veri setinden problemin çözümüne yardımcı olacak anlamlar çıkarmaya çalışır. Derin öğrenme, verinin ilerledikçe arıtıldığı birbirini takip eden süzgeçlere bezetilebilir.

Modelimiz 2 adet birbirini takip eden Dense katmanı içeriyor.

  • DENSE = Önceki katmanla kendi katmanındaki tüm birimleri birbirine bağlayan katmandır. İngilizce ‘full connected’ olarak adlandırılır.

İkinci yani son katman 10 adet çıktı birimi bulunan ve 10 elemanlı olasılık puanlarını gösteren (toplamları 1) bir diziyi geri döndürür. Dizinin her elemanı verilen fotoğraftaki sayınin 1 den 10’a kadar hangi sınıfa ait olduğunun olasılık değerini gösterir.

Ağımızı eğitmek içi 3 parametreye daha ihtiyacımız vardır :

  • Kayıp fonksiyonu (lose function) = Kısaca ağımızın eğitim seti üzerinde kendi performansını gözlemlemesi ve doğru sonucu üretmesi için yöntem
  • Eniyileme (optimization) = Ağımızın girdi ile sonucun doğruluğunu göz önünde bulundurarak kendini güncelleme yöntemi
  • Eğitim ve test sürecinde takip edilecek metrikler = Doğru sınıflandırılan görüntülerin toplam görüntü sayısına oranına odaklanacağız

Eğitime başlamadan önce tüm girdi değerlerini [0,1] aralığına ölçeklendiriyoruz. Veri setindeki görüntüler (60000, 28, 28) şeklinde bir dizi ve her elemanı uint8 veri tipinde [0,255] veri aralığında saklanmıştır. Eğitim veri setindeki görüntüleri (60000, 28, 28) float32 veri tipinde 0 ile 1 arasında olacak şekilde düzenliyoruz.

Aynı zamanda etiketleri kategorik olarak etiketlememiz gerekiyor.

Artık Eğitime başlayabilir. Modeli eğitmek için ‘fit’ methodunu kullanıyoruz.

Eğitim süresince 2 değer gösteriliyor. Ağın eğitim seti üzerindeki kaybı ve doğruluğu. Eğitimin bitmesinin ardından test seti üzerinde doğruluğunu görelim:

Sinir Ağları için Veri Gösterimi

Önceki çözdüğümüz örnekte verilerimizi ‘tensör’ adı verilen çok boyutlu Numpy dizileriyle gösterdik. Tüm makine öğrenmesi sistemlerinde temel veri yapısı olarak genellikle tesör kullanılır. Tensör alanın o kadar temelindedir ki Google kendi kütüphanesine TensorFlow adını vermiştir.

Tensör Nedir ?

  • Temel olarak veriler için taşıyıcı vazifesi görür.
  • Genellikle sayısal veriler tutar.

Skalerler (0B Tensörler)

Sadece bir eleman taşıyan tensörlere skaler (skaler tensör, 0B tensör veya 0 boyutlu tensör) denir. Numpy kütüphanesinde float32 ve float64 sayılar birer skaler tensördür. Numpy kullanarak bir tensörün kaç ekseni olduğunu öğrenmek için ndim niteliğini kullanabiliriz. Skaler sıfır (ndim = 0) eksene sahiptir. Tensörün eksen sayısı aynı zamanda derecesini verir.

Vektörler (1B Tensörler)

Sayı dizilerine vektör veya 1B tensör denir. Sadece 1 eksene sahiptir.

Bu vektör 5 elemandan oluşmaktadır. 5 boyutlu vektör denebilir fakat 5 boyutlu tensör diyemeyiz. 5B tensörün 5 ekseni vardır.

Matrisler (2B Tensörler)

Bir vektör dizisi matris veya 2B tensördür. Bir matrisin 2 ekseni vardır (Genellikler sütun ve satır). Görsel olarak, matrisleri dikdörtgen ızgaralardaki sayılar olarak hayal edilebilir.

3B ve Daha Fazla Boyutlu Tensörler

Matrisler de oluşan diziler olarak söyleyebilir.

Özellikler

Bir tensörün 3 ana özelliği bulunur:

  • Eksen Sayısı (Derecesi) : Örneğin 3B tensörlerin üç ekseni, matrislerin ise iki ekseni vardır. Numpy da ‘ndim’ olarak adlandırılır.
  • Şekli : Bu, tuple (python da ön tanımlı veri tipi) şeklinde her eksende kaç boyut olduğunu belirten sayılardır. Örneğin matriste (3, 5), 3B tensör örneğimizde (3, 3, 5), vektörde ise (5,) şeklindedir.
  • Veri Tipi : (Pythonda dtype olarak) Tensörün taşıdığı veri tipidir. Örneğin uint8, float32, float64 olabilir. Nadiren de char tipinde olur. Bu noktada Numpy kütüphanesinde string veri tipi bulundurmaz. Çünkü tensörlere baştan hafıza bitişik olarak verilmektedir.

Bu verileri MNIST data setinde gösterelim:

Burada çıkardığımız 8 bitlik sayıları taşıyan 3B tensörlerimiz mevcuttur. Yani 28 x 28 boyutundaki matrislerde 60000 adet bulunmakta ve her matris 0 ile 255 arasında değer alan gri ölçekli (gray scale) bir görüntüdür.

Şimdi tensörümüzün bir elemanını matplotlib kütüphanesi kullanarak görüntüleyelim.