Derin Öğrenme (Deep Learning) - Regresyon Örnekleri

GPU Çalışma Zamanı Analizi

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

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.

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.