Derin Öğrenme (Deep Learning) - Keras Modeli Derleme İşlemleri
Model Kaydetme ve Kullanma
Keras tarafından oluşturulan model ve model içinde bulunan ağırlıkları kaydetmek için "model_from_json" kütüphanesi kullanılabilir. JSON, verileri hiyerarşik olarak tutmak için kullanılan bir dosya biçimidir.
Kullanımı için kütüphanenin içe aktarılması gerekmektedir.
from tensorflow.keras.models import model_from_json
Ö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 modeli kaydedilim.
#İ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.models import model_from_json
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"]
#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]
#Model oluşturulur ve katmanlar eklenir.
model=Sequential()
model.add(Dense(units=12,activation="relu",input_shape=(n_cols,)))
model.add(Dropout(rate=.2))
model.add(Dense(units=64,activation="relu"))
model.add(Dropout(rate=.2))
model.add(Dense(units=32,activation="relu"))
model.add(Dropout(rate=.2))
model.add(Dense(units=16,activation="relu"))
model.add(Dropout(rate=.2))
model.add(Dense(units=8,activation="relu"))
model.add(Dense(units=1,activation="sigmoid"))
#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=0,
validation_data=(x_test,y_test)
)
#Model başarı yüzdesi gözlemlenir.
scores=model.evaluate(x_test,y_test)
print("%s: %.2f%%" % (model.metrics_names[1],scores[1]*100))
Çıktı:
5/5 [==============================] - 0s 2ms/step - loss: 0.6312 - accuracy: 0.6623 accuracy: 66.23%
Model oluşturuldu ve eğitildi. Sonuç olarak %66.23 başarı oranına sahip bir model elde edildi.
Oluşturulan modeli ve modelin ağırlıklarını kaydedelim.
#Model kayıt işlemi
model_json=model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
#Model ağırlıkları kayıt işlemi
model.save_weights("model.h5")
print("Model ve ağırlıkları dosya konumuna kaydedildi.")
Çıktı:
Model ve ağırlıkları dosya konumuna kaydedildi.
Kaydedilmiş model dosya konumundan okunur.
#Modeli yükle
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# Model ağırlıklarını yükle
loaded_model.load_weights("model.h5")
print("Model ve ağırlıkları dosya konumundan okundu.")
Çıktı:
Model ve ağırlıkları dosya konumundan okundu.
Model "loaded_model" adı altında dosyadan okundu. Okunan modeli test etmek için modelin tahmin etmesi için değerler verelim.
#Tahmin edilmek istenilen değer
x_value=[[2.0, 12.0, 64.0, 0.0, 0.0, 23.3, 0.672, 12.0]]
#Tahmin işlemi
pred=loaded_model.predict(x_value,verbose=1)
pred
Çıktı:
1/1 [==============================] - 0s 77ms/step array([[0.01501521]], dtype=float32)
["Diayabet hastası" if pred>0.5 else "Diyabet hastası değil"]
Çıktı:
['Diyabet hastası değil']
Görüldüğü gibi model oluşturuldu, eğitildi, JSON olarak kaydedildi, dosya konumundan okuma işlemi yapıldı ve başarılı bir şekilde tahminleme işlemi yapılmış oldu.