Skip to main content

Veri Kümesine Genel Bakış

  • Bu eğitim için 'işaret dili rakamları veri seti' ni (https://www.kaggle.com/c/digit-recognizer/overview) kullanacağız.
  • Bu veri setinde 2062 adet işaret dili rakamlı görsel bulunmaktadır.
  • Bildiğiniz gibi rakamlar 0'dan 9'a kadardır. Dolayısıyla 10 tane işaret vardır.
  • Başlangıç seviyesi olduğu için basitlik açısından sadece 0 ve 1 işaretlerini kullanacağız.
  • Verilerde "sıfır" işareti 204 ile 408 indeksleri arasındadır. Sıfır işareti sayısı 205'tir.
  • Ayrıca "bir" işareti 822 ile 1027 indeksleri arasındadır. "Bir" işaretin sayısı 206'dır. Bu nedenle her sınıftan (etiketlerden) 205 örnek kullanacağız.
  • Not: Aslında 205 örnek derin öğrenme için çok çok çok az. Ama bu eğitim giriş olduğu için bu yüzden çok önemli değil.
  • X ve Y dizilerimizi hazırlayalım. X, görüntü dizisidir ("sıfır" ve "bir" işareti) ve Y, etiket dizisidir (0 ve 1).
# load dataset
x_l = np.load('X.npy')
Y_l = np.load('Y.npy')
img_size = 64
plt.subplot(1, 2, 1)
plt.imshow(x_l[405].reshape(img_size, img_size), cmap='gray')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(x_l[900].reshape(img_size, img_size), cmap='gray')
plt.axis('off')

(-0.5, 63.5, 63.5, -0.5)

png

  • Resim dizisini oluşturmak için "sıfır" ve "bir" işaret dizilerini birleştiriyorum.
  • Daha sonra sıfır işaretli görüntüler için 0 ve bir işaretli görüntüler için 1 etiket dizisini oluşturuyorum.
# Join a sequence of arrays along an row axis.
X = np.concatenate((x_l[204:409], x_l[822:1027] ), axis=0) # from 0 to 204 is zero sign and from 205 to 410 is one sign
z = np.zeros(205)
o = np.ones(205)
Y = np.concatenate((z, o), axis=0).reshape(X.shape[0],1)
print("X shape: " , X.shape)
print("Y shape: " , Y.shape)

X shape: (410, 64, 64)
Y shape: (410, 1)

  • X'in shape'i (410, 64, 64)
    • 410, görüntü sayımızın 410 olduğu anlamına gelir (sıfır ve bir işareti)
    • 64, resim boyutumuzun 64x64 (64x64 piksel) olduğu anlamına gelir
  • Y'nin shape'i (410,1)
    • 410, etiket sayımızın 410 olduğu anlamına gelir (0 ve 1)
  • X ve Y'yi eğitim ve test setlerine ayıralım.
    • test_size = test sayısının oranı. test = 15% ve train = 85%
    • random_state = randomize ederken aynı seed'i kullanın. Bu, tekrar tekrar train_test_split'i çağırırsak, aynı random_state'e sahip olduğumuz için her zaman aynı train ve test dağılımını oluşturduğu anlamına gelir.
# Then lets create x_train, y_train, x_test, y_test arrays
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.15, random_state=42)
number_of_train = X_train.shape[0]
number_of_test = X_test.shape[0]
print("number_of_train:",number_of_train)
print("number_of_test:",number_of_test)

number_of_train: 348
number_of_test: 62

  • Şimdi 3 boyutlu giriş dizimiz (X) var, bu yüzden ilk derin öğrenme modelimiz için girdi olarak kullanmak üzere düzleştirme (2D) yapmamız gerekiyor.
  • Etiket dizimiz (Y) zaten düzleştirilmiş (2D) olduğu için bu şekilde bırakıyoruz.
  • X dizisini (görüntü dizisini) düzleştirelim.
X_train_flatten = X_train.reshape(number_of_train,X_train.shape[1]*X_train.shape[2])
X_test_flatten = X_test .reshape(number_of_test,X_test.shape[1]*X_test.shape[2])
print("X train flatten: ",X_train_flatten.shape)
print("X test flatten: ",X_test_flatten.shape)

X train flatten: (348, 4096)
X test flatten: (62, 4096)

  • Gördüğünüz gibi, 348 görüntümüz var ve her görüntü 4096 piksele sahip.
  • Ayrıca 62 görüntümüz var ve test dizisinde her görüntü 4096 piksele sahip.
  • O zaman devriğini alalım. NEDEN diyebilirsiniz aslında teknik bir cevabı yok. Ben sadece kodu ona göre yazıyorum :)
x_train = X_train_flatten.T
x_test = X_test_flatten.T
y_train = Y_train.T
y_test = Y_test.T
print("x train: ",x_train.shape)
print("x test: ",x_test.shape)
print("y train: ",y_train.shape)
print("y test: ",y_test.shape)

x train: (4096, 348)
x test: (4096, 62)
y train: (1, 348)
y test: (1, 62)

Bu noktaya kadar yaptıklarımız:

  • "Sıfır" işaretli ve "bir" işaretli etiketlerimizi (sınıflarımızı) seçtik.
  • Eğitim ve test setlerini oluşturduk ve düzleştirdik.
  • Nihai girdilerimiz (görüntüler) ve çıktılarımız (etiketler veya sınıflar) şu şekilde görünür: 3

Hesaplama Grafiği (Computation Graph)

  • Hesaplama grafikleri, matematiksel ifadeleri göstermenin güzel bir yoludur.
  • Matematiksel ifadelerin görselleştirilmesi gibidir.
  • Örneğin; $$c = \sqrt{a^2 + b^2}$$
  • Hesaplama grafiği şudur.

d

  • Gördüğünüz gibi matematiği grafikle ifade ettik.

Lojistik Regresyon

  • İkili sınıflandırma denilince (0 ve 1 çıkışlı) ilk akla gelen lojistik regresyondur.

  • Bununla birlikte, derin öğrenme eğitiminde lojistik regresyon ile ne yapılmalı?

  • Yanıt, lojistik regresyonun aslında çok basit bir sinir ağı olduğudur.

  • Bu arada sinir ağı ve derin öğrenme aynı şeydir. Yapay sinir ağlarında 'derin' gibi terimleri detaylı olarak anlatacağım.

  • Lojistik regresyonu (basit derin öğrenme) anlamak için önce hesaplama grafiğini öğrenelim.

  • Şimdi lojistik regresyonun hesaplama grafiğine bakalım.

5