​Keras, TensorFlow üzerinde çalışan üst düzey bir sinir ağları API’sidir. François Chollet tarafından geliştirilmiş olup günümüzde TensorFlow ekosisteminin önemli bir parçasıdır. Yüksek seviyeli, kullanıcı dostu, modüler ve genişletilebilir yapısı sayesinde hızlı ve etkili derin öğrenme modelleri geliştirmeyi sağlar. Keras ayrıca hem CPU’da hem de GPU’da çalıştırılabilir.

Keras, makineler için değil, insanlar için tasarlanmış bir API’dir. Kullanıcının bilişsel yükünü azaltmayı hedefleyen yalın bir yapıya sahiptir. Tutarlı ve basit API’ler sunar, yaygın kullanım senaryolarında gereken işlem adımlarını minimum seviyeye indirir ve anlaşılır hata mesajlarıyla kullanıcıyı yönlendirir. Aynı zamanda kapsamlı dokümantasyona ve geliştirici rehberlerine sahiptir.

Bu makalede, Keras’ın en yaygın kullanılan iki uygulama alanı olan sınıflandırma (classification) ve regresyon (regression) problemlerinden bahsedeceğim.

Keras ile Sınıflandırma (Classification)

Bu bölümde Keras ile bir sınıflandırma modeli geliştireceğiz. Örneğimizde makine öğrenmesi ve derin öğrenme çalışmalarında oldukça popüler olan MNIST veri setini kullanacağız.

MNIST Veri Seti Nedir?

MNIST (Modified National Institute of Standards and Technology) veri seti, el yazısı rakam görüntülerinden oluşan ve görüntü işleme modellerinin eğitilmesinde yaygın olarak kullanılan büyük bir veri setidir.

Makine öğrenmesi alanında eğitim ve test amaçlı sıkça kullanılan MNIST veri seti, 60.000 eğitim görüntüsü ve 10.000 test görüntüsü olmak üzere toplam 70.000 el yazısı rakam görüntüsünden oluşmaktadır.

İlk olarak Keras kütüphanesini Jupyter ortamına yükleyerek başlayalım.

Jupyter’a kütüphaneler import edilirken Keras’ın TensorFlow backend üzerinde çalıştığını görebilirsiniz. Hatırlatma amaçlı küçük bir not bırakmak istedim :)

Şimdi MNIST verilerini yükleyelim. Görülebileceği üzere MNIST veri setini kolayca eğitim (train) ve test verisi olarak ayırabiliyoruz.

from keras.datasets import mnist

# Veriyi yükleme

(X_train, y_train), (X_test, y_test) = mnist.load_data()

Yüklediğimiz veriden örnek bir çıktı görüntüleyebiliriz.

Dense Neural Network modellerinde görüntüleri doğrudan modele veremeyiz. Bu nedenle 28x28 boyutundaki görüntüleri tek boyutlu vektörlere dönüştürmemiz gerekir.

Yani her görüntüyü:

1 x (28 x 28) = 1 x 784

boyutunda bir vektör haline getiririz. Sonrasında model performansını artırmak için veriyi normalize ederiz.

Modelimizi oluşturmadan önce sınıflandırma problemi için hedef değişkenimizi kategorik forma dönüştürmemiz gerekir. Bunun için Keras Utilities içerisinde bulunan to_categorical fonksiyonunu kullanıyoruz.

Bu işlem aynı zamanda one-hot encoding olarak adlandırılır.

y_train = to_categorical(y_train)

y_test = to_categorical(y_test)

 

num_classes = y_test.shape[1]

 

print(num_classes)

Keras ile Regresyon (Regression)

Bu bölümde Keras kullanarak bir regresyon modeli geliştireceğiz.

İlk olarak veri setimizi tanıyalım. Kullanacağımız veri seti beton numuneleri ve bu numunelerin basınç dayanıklılığıyla ilgili bilgileri içermektedir.

Karmaşık veri setleriyle çalışırken öncelikle veriyi analiz etmek ve model performansını olumsuz etkileyebilecek eksik veya hatalı değerleri belirlemek gerekir.

İstatistiksel olarak veri setimizi incelemek için:

.describe()

komutunu kullanabiliriz.

Veri setinde eksik değer olup olmadığını kontrol etmek için:

.isnull().sum()

komutu kullanılabilir.

Verimizin temiz olduğunu doğruladıktan sonra preprocessing (ön işleme) adımlarına başlayabiliriz.

İlk olarak veri setimizi hedef değişkeni belirleyecek şekilde ayırmamız gerekiyor. Bu örnekte hedef değişkenimiz betonun dayanıklılığını ifade eden strength değeri olacaktır.

Böylelikle hedef değerimizi belirledik. Regresyon modelimizi bu değeri tahmin edecek şekilde geliştireceğiz.

Makine öğrenmesi algoritmaları geliştirirken büyük ölçek farklılıklarından kaçınmak ve modelin daha sağlıklı öğrenmesini sağlamak için verilerimizi normalize ederiz.

Bu işlem için kullanacağımız Keras kütüphanelerini çağırmamız gerekiyor.

Daha sonra 2 hidden layer’dan oluşan ve her katmanda 50 neuron bulunan sinir ağı mimarimizi oluşturalım.

Modelimizi uygun yöntemlerle eğitip test edeceğiz. Doğrulama (validation) için verilerin %30’unu ayıracağız ve modeli 100 epoch boyunca eğiteceğiz.

Optimizer olarak Adam algoritmasını kullandık. Adam, derin öğrenme modellerinde en yaygın kullanılan optimizasyon yöntemlerinden biridir.

Daha detaylı bilgi için:
https://machinelearningmastery.com/adam-optimization-algorithm-for-deep-learning/

Unutmamak gerekiyor ki. Daha iyi performans elde etmek için epoch sayısı, layer sayısı, neuron miktarı ve diğer hiperparametrelerde değişiklikler yapılabilir.