Derin Öğrenme (Deep Learning) - Keras Modeli Derleme İşlemleri

Predict Method (Tahmin Yöntemi)

Yayın tarihi :21-Şub-22
Bölüm kodlarını ve/veya veri setlerini indir.

Predict Method (Tahmin Yöntemi), Keras kullanılarak oluşturulan modellerin veri setini öğrenme işleminden sonra girilecek olan değerleri tahmin etmek için kullanılan yöntemdir.

Söz dizimi: Model.predict(x, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)

  • x, veri seti üzerindeki x_test (bağımsız değişkenler) verilerini temsil eder.
  • batch_size, yapılacak işin boyutunu temsil eder. Pozitif tam sayı olarak atama yapılabilir. Varsayılan olarak 32 değerini alır.
  • verbose, model eğitimi sırasında ekranda görünecek olan ayrıntıları temsil eder. 0 veya 1 değelerini alabilir. Varsayılan olarak "0"dır. 
    • 0, ayrıntı görünmen işlem sonucunu listeler.
    • 1, ilerleme çubuğu ve işlem sonucunu listeler.
  • callbacks,  değerlendirme sırasında uygulanacak geri aramaların listesini temsil eder.

Örnek-1: Bazı kişilerin diyabet hastalığına yakalanıp yakalanmama bilgilerini içeren "pima-indians-diabetes.csv" veri seti ile kişinin diyabet hastası olup olamayacağını gösterecek olan bir model oluşturaralım, modeli derleyelim ve modele veri setini öğrenme yöntemini uygulayarak sonuçları değerlendirelim. Evaluate Method (Değerlendirme Yöntemleri) örneğinde verilen veri setinin devamını sağlayalım.)

#İlgili kütüphaneler yüklenir
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
from sklearn.model_selection import train_test_split

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout 
#Veri seti okundu
df=pd.read_csv("pima-indians-diabetes.csv",header=None)

#Veri setinde sütun isimleri belirli olmadığından dolayı sütun isimleri ataması yapılır.
df.columns=["preg","plass","press","skin","test","mass","pedi","age","class"]
#İlk 5 satır
df.head()

Çıktı:

#x ve y(hedef-tahmin) değerleri belirtilir.
x,y=df.drop("class",axis=1),df[["class"]]

#train ve test verileri ayrılır
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42,test_size=.2)

#Train veri setindeki değişken sayısı
n_cols=x.shape[1]
#Yeni Model oluşturulur.
model=Sequential()

#Giriş Katmanı ve 1.Gizli Katman oluşturulur.
model.add(Dense(units=12,activation="relu",input_shape=(n_cols,)))

#1.Gizli katmandan 2.Gizli katmana girerken verinin %20'si rasgele atıldı
model.add(Dropout(rate=.2))

#2.Gizli Katman oluşturulur.
model.add(Dense(units=64,activation="relu"))

#2.Gizli katmandan 3.Gizli katmana girerken verinin %20'si rasgele atıldı
model.add(Dropout(rate=.2))

#3.Gizli Katman oluşturulur.
model.add(Dense(units=32,activation="relu"))

#3.Gizli katmandan 4.Gizli katmana girerken verinin %20'si rasgele atıldı
model.add(Dropout(rate=.2))

#4.Gizli Katman oluşturulur.
model.add(Dense(units=16,activation="relu"))

#4.Gizli katmandan 5.Gizli katmana girerken verinin %20'si rasgele atıldı
model.add(Dropout(rate=.2))

#5.Gizli Katman oluşturulur.
model.add(Dense(units=8,activation="relu"))

#Çıkış Katmanı
model.add(Dense(units=1,activation="sigmoid"))
#Model özeti
model.summary()

Çıktı:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (None, 12)                108       
                                                                 
 dropout (Dropout)           (None, 12)                0         
                                                                 
 dense_1 (Dense)             (None, 64)                832       
                                                                 
 dropout_1 (Dropout)         (None, 64)                0         
                                                                 
 dense_2 (Dense)             (None, 32)                2080      
                                                                 
 dropout_2 (Dropout)         (None, 32)                0         
                                                                 
 dense_3 (Dense)             (None, 16)                528       
                                                                 
 dropout_3 (Dropout)         (None, 16)                0         
                                                                 
 dense_4 (Dense)             (None, 8)                 136       
                                                                 
 dense_5 (Dense)             (None, 1)                 9         
                                                                 
=================================================================
Total params: 3,693
Trainable params: 3,693
Non-trainable params: 0
#Model derleme işlemi yapılır
model.compile(loss='binary_crossentropy',optimizer="adam",metrics=["accuracy"])
#Model Öğrenme işlemi yapılır.
model.fit(
    x=x_train,
    y=y_train,
    epochs=500,
    batch_size=10,
    verbose=2,
    validation_data=(x_test,y_test)
)

Sonuçları grafiksel olarak görüntüleyelim.

fig=plt.figure(figsize=(20,6))

#Accuracy Grafiklemesi
x1=fig.add_subplot(121)
x1.plot(model.history.history['accuracy'])
x1.plot(model.history.history['val_accuracy'])
x1.set_title('Model accuracy')
x1.set_ylabel('Accuracy')
x1.set_xlabel('Epoch')
x1.legend(['Train', 'Test'], loc='upper left')

#Loss Grafiklemesi
x2=fig.add_subplot(122)
x2.plot(model.history.history['loss'])
x2.plot(model.history.history['val_loss'])
x2.set_title('Model loss')
x2.set_ylabel('Loss')
x2.set_xlabel('Epoch')
x2.legend(['Train', 'Test'], loc='upper left')

plt.show()

Çıktı:


#Modelin başarı oranını gözlemleyelim
scores=model.evaluate(x_test,y_test)

Çıktı:

5/5 [==============================] - 0s 2ms/step - loss: 0.6288 - accuracy: 0.6818
print("%s: %.2f%%" % (model.metrics_names[1],scores[1]*100))

Çıktı:

accuracy: 68.18%

Veri setimize derin öğrenme işlemi uyguladıktan sonra başarı yüzdesi %68,18 olarak çıkmış oldu. Şimdi de %68.18'lik başarı oranı ile yeni bir girdinin diyabet hastası olup olmadığını kontrol edelim.

#Tahmin edilmek istenilen 1. değer
x_value=[[2.0, 12.0, 64.0, 0.0, 0.0, 23.3, 0.672, 12.0]]

#Tahmin işlemi
pred=model.predict(x_value,verbose=1)
pred

Çıktı:

1/1 [==============================] - 0s 144ms/step
array([[0.02807304]], dtype=float32)

Çıktı sonucunda beklenilen değer 0 (diyabet hastası değil) veya 1 (diyabet hastası) olması gerekmte ama bakıldığında "0.02807304" değerli bir sonuç elde edildi. Sınıflandırma problemlerinde yapıması gereken diğer bir husus çıktı değerinin alması gereken değerlere göre sayısal değerleri çevirmek olacaktır. Yani çıkan sonuç 0.5 değerinden küçükse hasta değil ama 0.5 değerinden büyükse hastadır demek gerekecektir.

["Diayabet hastası" if pred>0.5 else "Diyabet hastası değil"]

Çıktı:

['Diyabet hastası değil']
#Tahmin edilmek istenilen 2. değer
x_value=[[10.0, 168.0, 74.0, 0.0, 0.0, 38.0, 0.537, 34.0]]

#Tahmin işlemi
pred=model.predict(x_value,verbose=1)
pred

Çıktı:

1/1 [==============================] - 0s 51ms/step
array([[0.50193685]], dtype=float32)
["Diayabet hastası" if pred>0.5 else "Diyabet hastası değil"]

Çıktı:

['Diayabet hastası']
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.