Keras ile Derin Öğrenme - Veri Hazırlama

Verileri ağımıza beslemeden önce, ağın gerektirdiği biçime dönüştürülmelidir. Buna ağ için veri hazırlama denir. Genellikle çok boyutlu bir girdinin tek boyutlu bir vektöre dönüştürülmesinden ve veri noktalarının normalleştirilmesinden oluşur.

Girdi Vektörünü Yeniden Şekillendirme

Veri setimizdeki görüntüler 28 x 28 pikselden oluşmaktadır. Bu, ağımıza beslemek için 28 * 28 = 784 boyutunda tek boyutlu bir vektöre dönüştürülmelidir. Bunu arayarak yapıyoruzreshape vektör yöntemi.

X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)

Şimdi, eğitim vektörümüz, her biri 784 boyutunda tek bir boyut vektöründen oluşan 60000 veri noktasından oluşacak. Benzer şekilde, test vektörümüz de 784 boyutunda tek boyutlu bir vektörün 10000 veri noktasından oluşacaktır.

Verileri Normalleştirme

Giriş vektörünün içerdiği veriler şu anda 0 ile 255 arasında ayrı bir değere sahiptir - gri tonlama seviyeleri. Bu piksel değerlerini 0 ile 1 arasında normalleştirmek eğitimi hızlandırmaya yardımcı olur. Stokastik gradyan inişini kullanacağımızdan, verileri normalleştirmek aynı zamanda yerel optimada takılma olasılığını azaltmaya da yardımcı olacaktır.

Verileri normalleştirmek için, onu float türü olarak temsil ederiz ve aşağıdaki kod parçacığında gösterildiği gibi 255'e böleriz -

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

Şimdi normalleştirilmiş verilerin nasıl göründüğüne bakalım.

Normalleştirilmiş Verileri İnceleme

Normalleştirilmiş verileri görüntülemek için, burada gösterildiği gibi histogram işlevini çağıracağız -

plot.hist(X_train[0])
plot.title("Digit: {}".format(y_train[0]))

Burada, ilk öğenin histogramını çiziyoruz X_trainvektör. Bu veri noktasının temsil ettiği rakamı da yazdırıyoruz. Yukarıdaki kodu çalıştırmanın çıktısı burada gösterilmektedir -

Sıfıra yakın değere sahip kalın bir nokta yoğunluğu göreceksiniz. Bunlar, görüntünün büyük bir kısmı olduğu açık olan görüntüdeki siyah nokta noktalarıdır. Beyaz renge yakın olan gri tonlama noktalarının geri kalanı rakamı temsil eder. Başka bir rakam için piksel dağılımını kontrol edebilirsiniz. Aşağıdaki kod, eğitim veri kümesindeki 2 dizinindeki bir hanenin histogramını yazdırır.

plot.hist(X_train[2])
plot.title("Digit: {}".format(y_train[2])

Yukarıdaki kodu çalıştırmanın çıktısı aşağıda gösterilmiştir -

Yukarıdaki iki şekli karşılaştırdığınızda, iki görüntüdeki beyaz piksel dağılımının farklı bir rakamın - yukarıdaki iki resimdeki "5" ve "4" rakamlarının temsilini göstererek farklı olduğunu fark edeceksiniz.

Daha sonra, tam eğitim veri setimizdeki verilerin dağılımını inceleyeceğiz.

Veri Dağıtımının İncelenmesi

Makine öğrenimi modelimizi veri kümemiz üzerinde eğitmeden önce, veri kümemizdeki benzersiz basamakların dağılımını bilmeliyiz. Görüntülerimiz 0 ile 9 arasında değişen 10 farklı haneyi temsil etmektedir. Veri setimizdeki 0, 1 vb. Basamakların sayısını bilmek istiyoruz. Bu bilgileri kullanarak elde edebiliriz.unique Numpy yöntemi.

Benzersiz değerlerin sayısını ve her birinin oluşum sayısını yazdırmak için aşağıdaki komutu kullanın

print(np.unique(y_train, return_counts=True))

Yukarıdaki komutu çalıştırdığınızda, aşağıdaki çıktıyı göreceksiniz -

(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8), array([5923, 6742, 5958, 6131, 5842, 5421, 5918, 6265, 5851, 5949]))

0'dan 9'a kadar 10 farklı değer olduğunu gösterir. 5923 basamak 0, 6742 basamak 1, vb. Vardır. Çıktının ekran görüntüsü burada gösterilmektedir -

Veri hazırlamanın son adımı olarak verilerimizi kodlamamız gerekiyor.

Kodlama Verileri

Veri setimizde on kategorimiz var. Böylece çıktımızı tek sıcak kodlama kullanarak bu on kategoride kodlayacağız. Kodlamayı gerçekleştirmek için Numpy yardımcı programlarının to_categorial yöntemini kullanıyoruz. Çıktı verileri kodlandıktan sonra, her veri noktası 10 büyüklüğünde tek boyutlu bir vektöre dönüştürülür. Örneğin, basamak 5 artık [0,0,0,0,0,1,0,0,0 olarak gösterilecektir. , 0].

Verileri aşağıdaki kod parçasını kullanarak kodlayın -

n_classes = 10
Y_train = np_utils.to_categorical(y_train, n_classes)

Kategorize edilmiş Y_train vektörünün ilk 5 elemanını yazdırarak kodlamanın sonucunu kontrol edebilirsiniz.

İlk 5 vektörü yazdırmak için aşağıdaki kodu kullanın -

for i in range(5):
   print (Y_train[i])

Aşağıdaki çıktıyı göreceksiniz -

[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]

İlk eleman 5 rakamını, ikincisi 0 rakamını temsil eder ve bu böyle devam eder.

Son olarak, aşağıdaki ifadeyi kullanarak test verilerini de sınıflandırmanız gerekecek -

Y_test = np_utils.to_categorical(y_test, n_classes)

Bu aşamada, verileriniz ağa beslenmek için tamamen hazırlanır.

Daha sonra, en önemli kısım geliyor ve bu, ağ modelimizi eğitmektir.