Derin Öğrenme (Deep Learning) - Keras Çekierdek Katmanı (Core Layer)

Dropout

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

Dropout Layer (Bırakma Katmanı), katmanlarda bulunan düğümlerin(nöron) rasgele olarak bırakma veya yok sayma işleminin gerçekleştiği katmandır. Dropout işlemi sonrasında azaltılmış bir ağ yapısı meydana gelir.

Neden Dropout işlemi yapılır?

Bir model eğitilirken(train verileri) veri içersinde bulunan gürültüleri de öğrenecek ve eğitilmiş modelde test verileri test edildiğinde başarı yüzdesi düşük çıkabilecektir. Dropout işleminde rasgele çıkartılan düğümler ile bu durum ortadan kaldırılmak amaçlanmaktadır.

Makine öğrenmesi konularında aşırı uydurmaları kaldırmak için kullanılan L1 ve L2 düzenlileştirme yapılarının temel amacıyla, derin öğrenme konularında da aşırı uydurmaları kaldırmak için kullanılan Dropout işlemi aynı görevi üslenmektedir. 

Kullanılabilmesi için "Dropout" kütüphanesinin içe aktarılması gerekmektedir.

from tensorflow.keras.layers import Dropout

Söz dizimi: Dropout(rate, noise_shape=None, seed=None, **kwargs)

  • rate, bırakılacak düğüm oranını temsil eder. 0-1 aralığında değer alabilir. Kaldırılmayan girişler verilen oran kadar büyür.

Yukarıdaki parametre haricinde eğer modelde ilk katman olarak kullanılıyorsa input_shape adlı bir argümanı da kullanır. input_shape argümanı giriş katmanının boyutunu belirtmek için kullanılan, sayısal değer alan bir yapıdır.

Örnek-1: Rasgele verilerden oluşan bir liste oluşturalım ve o listeye Dropout işlemi uygulayalım.

#Gerekli kütüphaneler içe aktarılır.
import numpy as np
from tensorflow.keras.layers import Dropout
#0-100 arasında sayılardan oluşan 6x2 matris
my_list=np.random.randint(0,100,(6,2)).astype(float)
my_list

Çıktı:

array([[38., 29.],
       [86., 35.],
       [60., 38.],
       [74., 75.],
       [84., 73.],
       [62., 49.]])
#Dropout tanımlaması yapılır.
layer_=Dropout(rate=.2,input_shape=(2,))

#Oluşturulan listeye Dropout uygulanır.
layer_(my_list,training=True)

Çıktı:

<tf.Tensor: shape=(6, 2), dtype=float32, numpy=
array([[ 47.5 ,   0.  ],
       [107.5 ,   0.  ],
       [ 75.  ,  47.5 ],
       [ 92.5 ,  93.75],
       [105.  ,  91.25],
       [ 77.5 ,  61.25]], dtype=float32)>

Yukarıdaki çıktıda kırmızı olarak işaretlenen alanlar rasgele bir biçimde değerleri 0'a eşitlenerek değerleri kaldırılmış oldu.

Örnek-2: Giriş katmanı, 3 tane gizli katman ve çıkış katmanı olan bir model oluşturarak gizli katman girişlerine Dropout işlemi uygulayalım.

#Gerekli kütüphaneler içe aktarılır.
from tensorflow.keras.layers import Dropout,Dense
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import plot_model
#Model tanımlanır.
model=Sequential()

#Giriş katmanı("input_shape" ile) ve giriş katmanı sonrasında Dropout katmanı modele eklenir.
model.add(Dropout(rate=.2,input_shape=(6,)))
              
#1.Gizli katman oluşturuldu
model.add(Dense(units=20,activation="relu"))
    
#1.Gizli katmandan 2.Gizli katmana girerken verinin %20'si rasgele atıldı
model.add(Dropout(rate=.2))

#2.Gizli katman modele eklenir.
model.add(Dense(units=12,activation="relu"))

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

#3.Gizli katman modele eklenir.
model.add(Dense(units=6,activation="relu"))

#Çıkış katmanı eklendi
model.add(Dense(units=1,activation="sigmoid"))

Model oluşturuldu. Şimdi modelin görselini inceleyelim;

plot_model(model,show_shapes=True)

Çıktı:

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.