Keras ile Yapay Sinir Ağı Oluşturma

Bu yazımızda Keras ile ilk yapay sinir ağımızı oluşturacağız. Kolektif çalışma kolaylığı sunması açısından projeyi Google Colab üzerinde test edeceğiz.

Ele alacağımız adımlara şu şekilde bakabiliriz:

  1. Verileri yükle.
  2. Modeli tanımla.
  3. Modeli derle.
  4. Modeli eğit.
  5. Modeli test et.
  6. Tüm kodlara bir arada bak.

Gereksinimler:

  1. Python 2 veya Python 3 yüklü olmalı.
  2. NumPy kullanımından ötürü SciPy yüklü olmalı.
  3. Keras ve arka planda Theano veya TensorFlow) yüklü olmalı.

Biz bu gereksinimleri en pratik yoldan karşılamak için Google Colab kullanıyoruz.

Adım 1: Verinin yüklenmesi

Makine öğrenmesi algoritmaları üzerine çalışırken, rastgele sayılar üretmek bazen akıllıca bir yol olabiliyor. Bu örnekte de rastgele sayı üretecinin nasıl kullanılacağını göstermiş.

from keras.models import Sequential
from keras.layers import Dense
import numpy
# burada random.seed metoduyla rastgele sayı üretiyoruz
numpy.random.seed(7)

Şimdi verilerimizi yükleyelim . Bu örnekte Amerikanın Yerlisi bir grup olan Pima Indıans’ın diyabet değerlerine dair bir veriseti kullanılmış. Bu veriseti Kaliforniya Üniversitesinin makine öğrenmesi verisetleri sayfasında mevcut olarak bulunuyor. Bu veriseti yerliler için tıbbi kayıtları ve beş yıl içinde diyabet başlangıcı olup olmadığını açıklıyor.

Verisetimizdeki tüm değerlerin sayısal girdi olması ve çıktımızın da ikili sınıflandırma problemi olan bir sayısal çıktı olması ilk sinir ağı projesi için işimizi kolaylaştırıyor.

Verisetini buradan indirebilirsiniz.

Verisetiyle ilgili detaylara buradan bakabilirsiniz.

Verisetini colab’a yüklemek için farklı yollar mevcut. Ben şöyle bir yol izledim. Önce;

from google.colab import files
file = files.upload()

Kodunu çalıştırdım. Ardından benden dosya yüklememi istedi. Bilgisayarımdan dataset.csv ismini verdiğim bu dosyayı yükledim. Ardından da;

dataset = numpy.loadtxt(“dataset.csv”, delimiter=”,”)

X = dataset[:,0:8]
Y = dataset[:,8]

Diyerek verisetimi içe aktardım. X ve Y ile girdi ve çıktı seçimimi yaptım.

2- Modelin Tanımlanması

Keras’ta oluşturulan modeller katmanların dizisi olarak tanımlanıyor. İlk olarak model oluşturuluyor ve ağ topolojisi yeterli görülene kadar katmanlar ekleniyor.

Emin olmamız gereken ilk şey doğru sayıda girdiyi giriş katmanında tanımlamış olmaktır. Bu katman input_dim argumanını kullanıyor ve 8 giriş değişkeni için biz 8 olarak belirledik.

Peki katmanların sayısını ve çeşitlerini nasıl belirleriz ?

Bu doğrudan cevabı olmayan zor bir soru. Kullanılabilen bazı buluşsal yöntemler var ve genellikle en iyi ağ yapısı deneme yanılma sürecinde belli oluyor. Yeterince büyük bir ağa sahip olmanız sorunun yapısını anlamak için yardımcı olabiliyor.

Bu örnekte, üç katmanlı ve birbirine tamamen bağlı bir ağ yapısı kullanacağız.

Tamamen bağlı katmanlar Dense isimli sınıfı kullanıyor.İlk argumanda nöronların sayısını belirleyip, başlangıç metodu olarak ikinci argümanda aktivasyon fonksiyonunu seçebiliriz.

Bu meyanda, ağ ağırlığını düzgün bir dağılımdan (‘düzgün‘) üretilen küçük bir rasgele sayıya başlatırız, bu durumda 0 ile 0,05 arasındadır, çünkü bu, Keras’ta varsayılan düzgün ağırlık başlatmadır. Bir diğer geleneksel yöntem de Gauss dağılımını kullanarak rastgele küçük bir sayı üretmektir.

Ayrıca örneğimizin ilk iki katmanında doğrultucu (‘relu‘) aktivasyon fonksiyonunu ve çıkış katmanındaki sigmoid fonksiyonunu kullanacağız.

İlk katman 12 nöron ve 8 giriş değişkeni içeriyor. İkinci (gizli) katman 8 nöron ve son katman 1 nöron içeriyor. Bu nöron da diabet olup olmadığını tahmin ediyor.

model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

3- Modelin Derlenmesi

Modeli tanımladık, derleme aşamasına geçelim.

Modelin derlenmesi, Theano veya TensorFlow gibi verimli sayısal kütüphaneleri kullanır. Bu kütüphaneler, eğitim için en iyi yolu otomatik olarak seçer ve CPU veya GPU gibi donanımınız üzerinde çalışacak ve hatta dağıtılacak tahminlerde bulunur.

Bu derleme sırasında bazı özellikleri belirtmemiz gerekiyor. Unutmamız gereken ağın eğitimi ile yapmamız gereken problemin çözümü için doğru ağırlıkları tahmin etmek.

Ayrıca ağırlıkları hesaplarken kullanılacak iyileştiriciyi ve kayıp işlevini belirtmeliyiz.

Bunun için, ikili sınıflandırma problemlerinde Keras’ta “binary_crossentropy” olarak tanımlanan logaritmik kayıp fonksiyonunu kullanacağız.

Uyumlayıcı olarak verimli bir dereceli iniş algoritmasına sahip olan “Adam” algoritmasını kullanacağız.

Son olarak, ele aldığımız bir sınıflandırma problemi olduğu için sınıflandırma doğruluğunu metrik olarak toplayıp raporlayacağız.


model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

4-Modelin Eğitimi

Modeli tanımladık ve derledik. Şimdi biraz veriyle eğitmemiz gerekiyor. fit() fonksiyonu bize yardımcı oluyor. Burada ilk belirlediğimiz argüman epoch yani kaç tur eğitim olacağı. Biz bu problemde az sayıda iterasyon yapacağımız için epoch u 150 olarak belirledik. Mini batch boyutumuzu da 10 olarak belirledik. Bunları deneme yanılma yöntemiyle de daha iyi yapmaya çalışabiliriz.

Epoch Nedir ?

Model eğitilirken verilerin tamamı aynı anda eğitime katılmaz. Belli sayıda parçalar halinde eğitimde yer alırlar. İlk parça eğitilir, modelin başarımı test edilir, başarıma göre geriyeyayılım (“backpropagation”) ile ağırlıklar güncellenir. Daha sonra yeni eğitim kümesi ile model tekrar eğitilip ağırlıklar tekrar güncellenir. Bu işlem her bir eğitim adımında tekrarlanarak model için en uygun ağırlık değerleri hesaplanmaya çalışılır. Bu eğitim adımlarının her birine “epoch” denilmektedir.


https://medium.com/deep-learning-turkiye/derin-ogrenme-uygulamalarinda-en-sik-kullanilan-hiper-parametreler-ece8e9125c4
model.fit(X, Y, epochs=150, batch_size=10)

5- Modelin Ölçümlenmesi

Yapay sinir ağımızı veri setinin tamamı üzerinde eğittik ve ağın performansını aynı veri setinde değerlendirebiliriz. Fakat bu bize sadece veri setinin ne kadar iyi modellendiğine dair fikir verir fakat algoritmanın yeni veriler üzerinde ne kadar iyi performans gösterebileceğine dair fikir vermez. Bunun için verisetimizi eğitim ve test kümelerine ayırarak değerlendirebiliriz.

Modeli eğitim veri setindeki evaluate() fonksiyonunu kullanarak değerlendirebiliyor. Bu fonksiyon her giriş ve çıkış çiftleri için ve oluşturduğunuz accuracy(doğruluk), gibi metrikler için skorlar oluşturuyor.

scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

6- Tüm Kodlara Bir Arada Bak

Şimdi tüm kodları bir araya toplayalım ve programımızı çalıştıralım.

# Create your first MLP in Keras
from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
numpy.random.seed(7)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10)
# evaluate the model
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

Uygulama çalıştığında her biri için kayıp ve doğruluk yazan 150 mesaj, Ardından da eğitim seti üzerinde eğitilen modelin son değerlendirmesini görüyoruz.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir