Derin Öğrenme (Deep Learning) - Regresyon Örnekleri
GPU Çalışma Zamanı Analizi
Konu: Intel Core i5 (3.5GHz), 16GB RAM ve NVidia Geforce GTX 680 4GB GF580 GTX-1.5GB GPU ile Ubuntu 16.04 Linux bir bilgisayarın çalışma sürelerini Derin Öğrenme modeli ile tahmin etmek.
Veri seti:241600 x 18 (satır x sütun) elemanı bulunan "sgemm_product.csv" veri setidir.
Keşifsel Veri Analizi (EDA)
df=pd.read_csv("sgemm_product.csv")
df.head()
Çıktı:
df.tail()
Çıktı:
df.info()
Çıktı:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 241600 entries, 0 to 241599 Data columns (total 18 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 MWG 241600 non-null int64 1 NWG 241600 non-null int64 2 KWG 241600 non-null int64 3 MDIMC 241600 non-null int64 4 NDIMC 241600 non-null int64 5 MDIMA 241600 non-null int64 6 NDIMB 241600 non-null int64 7 KWI 241600 non-null int64 8 VWM 241600 non-null int64 9 VWN 241600 non-null int64 10 STRM 241600 non-null int64 11 STRN 241600 non-null int64 12 SA 241600 non-null int64 13 SB 241600 non-null int64 14 Run1 (ms) 241600 non-null float64 15 Run2 (ms) 241600 non-null float64 16 Run3 (ms) 241600 non-null float64 17 Run4 (ms) 241600 non-null float64 dtypes: float64(4), int64(14) memory usage: 33.2 MB
df.shape
Çıktı:
(241600, 18)
df.isnull().sum()
Çıktı:
MWG 0 NWG 0 KWG 0 MDIMC 0 NDIMC 0 MDIMA 0 NDIMB 0 KWI 0 VWM 0 VWN 0 STRM 0 STRN 0 SA 0 SB 0 Run1 (ms) 0 Run2 (ms) 0 Run3 (ms) 0 Run4 (ms) 0 dtype: int64
Hedef değişkeni olarak veri setinde bulunan "Run1 (ms)", "Run2 (ms)" ,"Run3 (ms)", "Run4 (ms)" değerlerinin ortalamasını alarak bu ortalama değerleri tahmin etmek isteyelim. Veri seti hakkında gerekli olan sütun düzenlemelerini yaparak veri setini temizleyelim.
#"Run1 (ms)", "Run2 (ms)" ,"Run3 (ms)", "Run4 (ms)" değerlerinin ortalamaları tek sütunda birleştirilir.
df["RunOrt (ms)"]=df[["Run1 (ms)","Run2 (ms)","Run3 (ms)","Run4 (ms)"]].mean(axis=1)
#Birleştirilen sütunlar kaldırılır.
df.drop(["Run1 (ms)","Run2 (ms)","Run3 (ms)","Run4 (ms)"],axis=1,inplace=True)
Veri setinin istatistik bilgilerini gözlemleyerek veri seti hakkında genel bir bilgi edinilir.
df.describe().T
Çıktı:
Veri setinde sütunların birbirleri ile olan korelasyonu incelendi.
plt.figure(figsize=(15,10))
sns.heatmap(df.corr(),annot=True,linewidths=2)
Çıktı:
Veri setindeki sayısal değişkenler basit bir şekilde görselleştirildi.
df.hist(figsize=(15,10));
Çıktı:
Derin Öğrenme model oluşturma aşamaları ve işlemleri
#x(bağımsız) y(hedef) değişkeni tanımlanır
x,y=df.drop("RunOrt (ms)",axis=1),df[["RunOrt (ms)"]]
#MinMaxScaler(x değerleri 0-1 aralığında) işlemi
X=MinMaxScaler().fit_transform(x)
#Son durumda X değerleri görünümü
pd.DataFrame(X,columns=x.columns).sample(5)
Çıktı:
#Model giriş katmanı değeri(veri seti değişken sayısı)
n_cols=X.shape[1]
#Model oluşturularak katmanlar eklenir
model=Sequential()
model.add(Dense(1024,activation='relu',input_shape=(n_cols,)))
model.add(Dense(512, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1,activation="linear"))
#Model derlenir
model.compile(optimizer="adam",loss="mse",metrics=["mse"])
#train ve test verileri tanımlanır
x_train,x_test,y_train,y_test=train_test_split(X,y,random_state=42,test_size=.2)
#Veri seti öğrenme işlemi yapılır
model.fit(x=x_train,y=y_train,batch_size=512,epochs=10,verbose=1,validation_data=(x_test,y_test))
Çıktı:
... Epoch 8/10 378/378 [==============================] - 9s 24ms/step - loss: 427.6411 - mse: 427.6411 - val_loss: 490.5280 - val_mse: 490.5280 Epoch 9/10 378/378 [==============================] - 9s 25ms/step - loss: 407.2430 - mse: 407.2430 - val_loss: 449.8278 - val_mse: 449.8278 Epoch 10/10 378/378 [==============================] - 9s 23ms/step - loss: 424.6778 - mse: 424.6778 - val_loss: 434.2553 - val_mse: 434.2553
model.summary()
Çıktı:
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 1024) 15360 dense_1 (Dense) (None, 512) 524800 dense_2 (Dense) (None, 256) 131328 dense_3 (Dense) (None, 128) 32896 dense_4 (Dense) (None, 64) 8256 dense_5 (Dense) (None, 32) 2080 dense_6 (Dense) (None, 16) 528 dense_7 (Dense) (None, 8) 136 dense_8 (Dense) (None, 1) 9 ================================================================= Total params: 715,393 Trainable params: 715,393 Non-trainable params: 0
Model başarı değerlendirmesi
Veri setinin model ile eğitilmesi sonucu oluşan "mse" değerlerinin train ve test verilerinde göstermiş olduğu değerlerin grafiklemesine bakalım.
fig=plt.figure(figsize=(10,6))
#mse Grafiklemesi
plt.plot(model.history.history['mse'])
plt.plot(model.history.history['val_mse'])
plt.title('Mean Squared Error')
plt.ylabel('mse')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()
Çıktı:
Yukarıdaki grafik gösteriyorki train ve test verileri yaklaşık olarak birbirlerine benzer sonuçlar oluşturmuştur.
Model başarı yüzdesini görebilmek için "r2_score" kullanılabilir.
#x_test verileri tahminleme işlemi
pred=model.predict(x_test)
#r2_score değerinin yüzdelik gösterimi
r2_score(y_test,pred)*100
Çıktı:
99.74025832115895
Sonuç olarak; Derin Öğrenme modeli ile veri setine tahmin etme işlemi uygulandı ve %99.74 oranında başarı elde edilmiş oldu. Başarı oranı daha da artırılmak istenebilir, bunun için birkaç adım denenebilir, bu adımlardan bazıları yüksek bilgisayar gücü gerektirebilecektir. Bunlar;
- Veri seti temizlemesi daha iyi yapılabilir.
- Model katmanlarına "Dropout" katmanları da eklenebilir.
- Model gizli katmanları artırılabilir.
- Gizli katmanlardaki nöron sayısı artırılabilir.
- Model fit işleminde epoch değeri artırılabilir.
Gibi yukarıda sayılan işlemler yapıldığında model başarısı artırılabilecektir.