Derin Öğrenme (Deep Learning) - Keras Modeli Derleme İşlemleri
Compile Method (Derleme Yöntemi)
Compile Method (Derleme Yöntemi), Keras kullanılarak oluşturulan modelleri derlemek için kullanılan yöntemdir.
Söz dizimi: Model.compile(optimizer="rmsprop", loss=None, metrics=None, loss_weights=None, weighted_metrics=None, run_eagerly=None, steps_per_execution=None, jit_compile=None,**kwargs)
- optimizer, optimize edicileri temsil etmektedir. Keras kütüphanelerinden biri olan "optimizers" (from tensorflow.keras import optimizers) ile kullanılabilir optimize edicilere ulaşılabilir. Bunlar;
- Adadelta, Adadelta algoritmasını uygulayan optimize edicidir.
- Adagrad, Adagrad algoritmasını uygulayan optimize edicidir.
- Adam, Adam algoritmasını uygulayan optimize edicidir.
- Adamax, Adamax algoritmasını uygulayan optimize edicidir.
- Ftrl, Ftrl algoritmasını uygulayan optimize edicidir.
- Nadam, Nadam algoritmasını uygulayan optimize edicidir.
- Optimizer, Keras optimize ediciler için temel sınıf.
- RMSprop, RMSprop algoritmasını uygulayan optimize edicidir. (Varsayılan olarak seçilidir.)
- SGD, Gradyan iniş (momentumlu) iyileştirici.
- loss, kayıp fonksiyonu türünü temsil etmektedir. Keras kütüphanelerinden biri olan "losses" (from tensorflow.keras import losses) ile kullanılabilir kayıp fonksiyonlarına ulaşılabilir.
- Regression(Regresyon) ve Sınıflandırma(Classification) işlemlerine göre kayıp fonksiyonu seçilmelidir.
- Kayıp fonksiyonları detaylı anlatım listesi için tıklayınız.
- Kullanılabilir kayıp fonksiyonları; 'BinaryCrossentropy', 'BinaryFocalCrossentropy', 'CategoricalCrossentropy', 'CategoricalHinge', 'CosineSimilarity', 'Hinge', 'Huber', 'KLD', 'KLDivergence', 'LogCosh', 'Loss', 'MAE', 'MAPE', 'MSE', 'MSLE', 'MeanAbsoluteError', 'MeanAbsolutePercentageError', 'MeanSquaredError', 'MeanSquaredLogarithmicError', 'Poisson', 'Reduction', 'SparseCategoricalCrossentropy', 'SquaredHinge', 'binary_crossentropy', 'binary_focal_crossentropy', 'categorical_crossentropy', 'categorical_hinge', 'cosine_similarity', 'deserialize', 'get', 'hinge', 'huber', 'kl_divergence', 'kld', 'kullback_leibler_divergence', 'log_cosh', 'logcosh', 'mae', 'mape', 'mean_absolute_error', 'mean_absolute_percentage_error', 'mean_squared_error', 'mean_squared_logarithmic_error', 'mse', 'msle', 'poisson', 'serialize', 'sparse_categorical_crossentropy', 'squared_hinge'
- metrics, model performansını ölçmek ve değerlendirmek için kullanılan yapılardır. Keras kütüphanelerinden biri olan "metrics" (from tensorflow.keras import metrics) ile kullanılabilir metrik fonksiyonlarına ulaşılabilir.
- Bir metrics içersinde birden fazla ölçme yöntemi bir arada kullanılabilir. Örneğin metrics=[metrics.mean_absolute_error, metrics.mean_absolute_error]
- Bir fonksiyon yardımı ile kişisel değerlendirme yöntemleri oluşturulup tanımlanabilir.
def customMetrics(): #Gerekli işlemler yapılarak return ile döndürülür. testResult="" return testResult
model.compile(loss=losses.binary_crossentropy, metrics=[customMetrics])
- Kullanılabilir metrik yöntemleri; 'AUC', 'Accuracy', 'BinaryAccuracy', 'BinaryCrossentropy', 'BinaryIoU', 'CategoricalAccuracy', 'CategoricalCrossentropy', 'CategoricalHinge', 'CosineSimilarity', 'FalseNegatives', 'FalsePositives', 'Hinge', 'IoU', 'KLD', 'KLDivergence', 'LogCoshError', 'MAE', 'MAPE', 'MSE', 'MSLE', 'Mean', 'MeanAbsoluteError', 'MeanAbsolutePercentageError', 'MeanIoU', 'MeanMetricWrapper', 'MeanRelativeError', 'MeanSquaredError', 'MeanSquaredLogarithmicError', 'MeanTensor', 'Metric', 'OneHotIoU', 'OneHotMeanIoU', 'Poisson', 'Precision', 'PrecisionAtRecall', 'Recall', 'RecallAtPrecision', 'RootMeanSquaredError', 'SensitivityAtSpecificity', 'SparseCategoricalAccuracy', 'SparseCategoricalCrossentropy', 'SparseTopKCategoricalAccuracy', 'SpecificityAtSensitivity', 'SquaredHinge', 'Sum', 'TopKCategoricalAccuracy', 'TrueNegatives', 'TruePositives', 'binary_accuracy', 'binary_crossentropy', 'binary_focal_crossentropy', 'categorical_accuracy', 'categorical_crossentropy', 'deserialize', 'get', 'hinge', 'kl_divergence', 'kld', 'kullback_leibler_divergence', 'log_cosh', 'logcosh', 'mae', 'mape', 'mean_absolute_error', 'mean_absolute_percentage_error', 'mean_squared_error', 'mean_squared_logarithmic_error', 'mse', 'msle', 'poisson', 'serialize', 'sparse_categorical_accuracy', 'sparse_categorical_crossentropy', 'sparse_top_k_categorical_accuracy', 'squared_hinge', 'top_k_categorical_accuracy'
- loss_weights, farklı model çıktılarının kayıp katkılarını belirtmek için kullanılır.
- weighted_metrics, test veya train verilerinde ağırlandırma yapılacak metrikleri 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şturarak onu derleyelim.
#İ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
#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]
Veri seti değişken sayısı da göz önüne alınarak bir model oluşturuldu. Model bir giriş katmanı, 3 gizli katman ve 1 tane de çıkış katmanından oluşmaktadır. Gizli katman sayısı duruma göre artırılıp azaltılabilir.
#Model oluşturulur.
model=Sequential()
#Giriş Katmanı ve 1.Gizli Katman oluşturulur.
model.add(Dense(units=12,activation="relu",input_shape=(n_cols,)))
#2.Gizli Katman oluşturulur.
model.add(Dense(units=8,activation="relu"))
#3.Gizli Katman oluşturulur.
model.add(Dense(units=4,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 dense_1 (Dense) (None, 8) 104 dense_2 (Dense) (None, 4) 36 dense_3 (Dense) (None, 1) 5 ================================================================= Total params: 253 Trainable params: 253 Non-trainable params: 0
Diyabet hastalık durumunu tahmin etme işlemi yapılacağı için bu bir Sınıflandırma (Classification) işlemidir. Bu yüzden model derleme işlemi yapılırken bu durum göz önüne getirilerek işlem yapılmalıdır.
model.compile(loss='binary_crossentropy',optimizer="adam",metrics=["accuracy"])
Yukarıda bulunan model.compile işlemi özetle;
- "loss" sınıflandırma işleminde kullanılan "binary_crossentropy" seçildi.
- "optimizer" olarak "adam" seçidi.(Bu seçim sınıflandırma veya regresyon işleminden bağımsızdır.)
- "metrics" olarak sınıflandırma algoritmalarını ölçmek için kullanılan değerlendirme yöntemlerinden "accuracy" seçildi. Başka bir yöntem veya yöntemler de seçilebilirdi.
Şuana kadar veri seti özellikleri göz önünde bulunarak bir model oluşturuldu ve model derleme işlemi yapıldı. Bundan sonraki aşamada veri setindeki "x_train" ve "y_train" değerleri derleme işlemi yapılan modele verilerek derin öğrenme işleminde "Fit Method" (Öğrenme Yöntemi) adımına geçilecektir.