Depth, Stride, Padding

Kategori: Deep Learning , 02 Nisan 2020 , JanFranco


Convolution işleminde fark ettiğimiz üzere, input resmimiz ile output resmimizin boyutları bir değildir. Bu yazımda boyutlar hakkında konuşacağız ve depth, stride, padding kavramlarından bahsedeceğiz.

Depth kavramı, kullandığımız filtre sayısıdır. Örneğin input resim üzerinde 12 filtre kullanarak bir convolution işlemi yaptık. Oluşan feature mapler, 3 boyutlu bir matrisin içinde saklanıyor gibi düşünelim. Bu 3 boyutlu matrisin derinliği 12'dir.

Stride kavramı, bir önceki yazımda bahsettiğim kaydırma işleminin değeridir. Bir önceki yazımda convolution işleminde, kerneli, input resim üzerinde birer birim kaydırmıştık. Yani stride değeri 1 idi. Ancak her zaman bir birim kaydırmak zorunda olmadığımızı söylemiştik. Filtreyi sol üst köşeden başlatıp, ikişer birim kaydırırsak stride değeri 2 olur. Stride değeri büyüdükçe, Feature Map yani Output resmimizin boyutu küçülür.

Eğer feature map yani output resmimizin boyutunu büyütmek istersek, Padding işlemi yapabiliriz. Padding işlemi, input resmin etrafına değerler ekler. Örnek görelim:


1   0   1   0   1

1   1   0   1   1

0   0   1   1   1

1   1   1   0   1

0   1   1   1   0
Bu resme Zero-Padding işlemi uygularsak:


0   0   0   0   0   0   0

0   1   0   1   0   1   0

0   1   1   0   1   1   0

0   0   0   1   1   1   0

0   1   1   1   0   1   0

0   0   1   1   1   0   0

0   0   0   0   0   0   0
Görüldüğü gibi resmi 0 lardan oluşan bir çerçeve ile kapladık. 5 x 5 boyutlu input resmimiz 7 x 7 boyutlu bir resme dönüştü. Böylelikle kernel, üstünde gezindiğinde boyutta bir azalma olmayacaktır. Output yani Feature Map boyutunu hesaplamak için bir formül kullanabiliriz:

Size = ((Input Size - Filter Size + (2*Padding Size)) / Stride Value) + 1

Örnek yapalım, input size 5x5 olsun. Filtre boyutumuz 3x3 olsun. Eğer Stride değerini değiştirmezsek, padding eklemezsek:

Size = ((5 - 3 + 0) / 1) + 1 = 3

Yani 3x3 boyutlu bir output elde ederiz. Yukarıdaki gibi 1 boyutlu padding ekleyelim:

Size = ((5 - 3 + 2) / 1) + 1 = 5

Yani 5x5 boyutlu bir output elde ederiz. Padding eklemeden, 2 birimlik kaydırma yapalım yani stride değeri 3 olsun:

Size = ((5 - 3 + 0) / 2) + 1 = 2

Yani 2x2 boyutlu bir output elde ederiz. Buradaki hesaplamlar, boyut işlemleri önemlidir. Eğer output boyutu integer bir değer çıkmazsa veya eksili bir değer çıkarsa ve eğer modelimizde bu işlem yapılırsa, training işlemi sona erer ve ekranda hata mesajı gösterilir. Bu nedenle boyutlara dikkat etmemiz gerekir. Örneğin 64x64 boyutlu bir input resmimiz mevcut olsun. Eğer filtre boyutu her katmanda 5x5 ise ve 20 katman varsa, 16. katmandan sonra output image'ın boyutu eksili bir değere düşecektir ve training işlemi duracaktır.


Sonraki Yazı: Activation Layer, Pooling Layer
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın