Tensorflow ve Keras ile Yeni Başlayanlar için Örnek Bir Model Geliştirme ve Eğitim

Yapay zeka ve makine öğrenmesinin günümüzde her alanda kullanılmasından dolayı her sektörden çalışanın bir şekilde bu konu hakkında fikir sahibi olması gerektiğini düşünüyorum. Bu yazımda basit anlamda bir veri seti nasıl okunabilir formata getirilir. Sinirsel bir ağ nasıl tasarlanır ve eğitim nasıl yapılabilir? Gibi soruların cevaplarını vermeye çalıştım. Bunu gösterirken de günümüzde popüler olan derin öğrenme ve kullanılan bir çerçeve olan Tensorflow 2 ve Keras ile göstermeye çalıştım. Yine bulut üzerinde örneğin Google bulut ile Tensorflow 2 ve Keras kullanarak modelleri geliştirebilirsiniz. Bilgisayarınıza da kurabileceğiniz Tensorflow 2 ve Keras yardımıyla aynı işlemleri yapabilirsiniz. Eğitimin uzun sürebileceği durumlarda CPU yerine güçlü bir ekran kartı işlemcisini kullanabilirsiniz. Bu örnekte UCI veri setleri sitesinden indireceğimiz İstanbul Menkul Kıymetler Borsası veri setini YSA’ya öğretmeye çalışacağız.

https://archive.ics.uci.edu/ml/datasets/ISTANBUL+STOCK+EXCHANGE#

Bu veri setini bu örnek model için biraz düzenledim ve girdi ile çıktı bilgileri aşağıdaki gibi toparlamış oldum.

Girdiler
SP: STANDARD & POOR’S 500 ENDEKSİ
DAX: Almanya borsa endeksi
FTSE: İngiltere borsa endeksi
NIK: Japonya borsa endeksi
BVSP: Brezilya borsa endeksi
EU: Avrupa endeksi
EM:  Gelişmekte olan piyasalar endeksi
Çıktı İstanbul Menkul Kıymetler Borsası Ulusal 100 Endeksi

Model çıktı olarak İstanbul 100 endeksinin artıp azalmasını tahmin etmeye çalışacak. Dolayısıyla veri setindeki çıktı için 0 olması endeksin düşeceği 1 olması ise yükseleceği anlamına gelmektedir.

Veri setinin normalize edilmiş son halini bu linkten indirebilirsiniz.

Bilgisayarınızda kullanacağımız çerçevelerin yüklü olduğunu varsayarsak, Spyder programını açıp modeli oluşturmaya başlayabiliriz.

Önce gerekli kütüphaneleri ekliyoruz. Bu kütüphaneleri kısaca özetlersek tensorflow temel kütüphanesi, Çok boyutlu veriler üzerinde işlemler yapabilmek için numpy kütüphanesi veri setini okuyabilmek adına pandas kütüphanesi model geliştirme ve gizli katmanları oluşturmak için Sequential ve Dense kütüphaneleri.

import tensorflow as tf
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense  

Önce hazır veri setini web linkinden okuyup dosyayı temsil edecek değişkene atıyoruz.

csv_dosya = tf.keras.utils.get_file('Stock_Istanbul.csv','http://www.fatihadak.com.tr/upload/datasets/Stock_Istanbul.csv')
df=pd.read_csv(csv_dosya)

Eğitim için hiçbir zaman veri setinin tamamı kullanılmaz. Sinirsel ağın öğrenip öğrenmediğini anlayabilmek için aynı veri seti içerisinden daha önce kendisine göstermediğimiz veri seti ile test etmemiz gerekir. Veri setini %70 eğitim %30 test için rastgele ayırmak için,

msk=np.random.rand(len(df)) < 0.7
egitim = df[msk]
test=df[~msk]

Böylelikle eğitim veri setinin %70’i eğitim isimli değişkende %30’u ise test isimli değişkende olacaktır. Bu veri setlerini çok boyutlu diziler olarak işlem yapabilmek adına numpy türüne çeviriyoruz.

egtVeriSeti = egitim.to_numpy()
tstVeriSeti = test.to_numpy()

Veri setinde girdi ve çıktıları değişkenler ile temsil etmek için aşağıdaki gibi atama yapıyoruz.

inp = egtVeriSeti[:,0:7]
out = egtVeriSeti[:,7]

inptest = tstVeriSeti[:,0:7]
outtest = tstVeriSeti[:,7]

Modelimize 8 adet sütun bulunmaktaydı 7’si girdi ve bir adet çıktı olarak değişkenlere atamış olduk.

Yapay sinir ağı modelini oluşturmaya başlıyoruz.

model = Sequential()

Yapay sinir ağımıza 3 adet gizli katman eklemek istiyoruz. Derin öğrenme tensorflow çerçevesinde bunlar Dense olarak isimlendirilmekte.

model.add(Dense(15, input_dim=7, activation='relu'))
model.add(Dense(7, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

İlk gizli katmanda 15 adet nöron bulunuyor ve relu aktivasyon fonksiyonu kullanılıyor. İkinci gizli katmanda 7 adet nöron bulunuyor ve yine aynı aktivasyon fonksiyonu kullanılıyor. Üçüncü gizli katmanda 1 adet nöron bulunmakta ve sigmoid aktivasyon fonksiyonu kullanılıyor. Eğitim işlemine geçmeden modelimizi derlememiz gerekiyor.

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

Eğitimi başlatmak için fit fonksiyonunu çağırıyoruz. Burada 100 epoch çalışacağını belirtiyoruz. 1 epoch eğitim veri setinin tamamı okutulduğunda tamamlanır. Parametre olarak eğitim veri setinin girdi ve çıktıları veriyoruz.

model.fit(inp, out, epochs=100, batch_size=5)

Buradaki batch_size parametresine değinmek gerekirse bir epoch’ta kaç adet örneğin ağırlıklar güncellenmeden önce dikkate alınması gerektiğini belirtir.  Buradaki örnekte 5 satır veri olarak ayarlanmıştır. Eğitim aşağıdaki şekildeki gibi başlayıp epoch bazında bilgi verip sonlanacaktır. Her epoch’ta doğruluğun ve kaybın nasıl değiştiği takip edilebilir.

Eğitim tamamlandıktan sonra test verisi ile eğitilmiş ağı test etmemiz gerekir. Eğitim veri setinde elde ettiğimiz doğruluk 1 üzerinden 0,72 iken test için kontrol etmek adına aşağıdaki kodları çalıştırıyoruz.

_, dogruluk = model.evaluate(inptest, outtest)
print('Dogruluk: %.2f' % (dogruluk*100))

Dikkat edilirse evaluate fonksiyonuna test veri setindeki girdi ve çıktılar verilmiştir. Bu örnek için 0,67 gibi bir doğruluk elde edildiği görülebilir.

Bir cevap yazın

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