๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[CNN]_Convolution ๊ณผ์ ๋ณธ๋ฌธ
[CNN]_Convolution ๊ณผ์
์ง์ง์ํ์นด 2022. 1. 29. 17:40220129 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ ๊นํํ (TAEWAN.KIM) ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค>
CNN, Convolutional Neural Network ์์ฝ
Convolutional Neural Network, CNN์ ์ ๋ฆฌํฉ๋๋ค.
taewan.kim
1. CNN, Covolutional Neural Network
- ๊ธฐ์กด
: Fully Connected layer ์ ์ธ๊ณต์ ๊ฒฝ๋ง ์ ๋ ฅ ๋ฐ์ดํฐ๋ 1์ฐจ์
: ํ์ฅ์ ์ปฌ๋ฌ ์ฌ์ง์ 3์ฐจ์
: ๋ฐฐ์น ๋ชจ๋์ ์ฌ๋ฌ ์ฌ์ง์ 4์ฐจ์
=> 3์ฐจ์ ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์์ผ๋ก ํ๋ฉดํ
=> ๊ณต๊ฐ ์ ๋ณด ์์ค
=> ์ด๋ฏธ์ง ๊ณต๊ฐ ์ ๋ณด ์ ์ค๋ก ์ธํ ์ ๋ณด ๋ถ์กฑ์ผ๋ก ํน์ง ์ถ์ถ ํ์ต ๋นํจ์จ์ , ์ ํ๋ ํ๊ณ
- CNN
: ์ด๋ฏธ์ง์ ๊ณต๊ฐ ์ ๋ณด๋ฅผ ์ ์งํ ์ํ๋ก ํ์ต์ด ๊ฐ๋ฅ
: ๋ฅ๋ฌ๋ ๋ชจ๋ธ ์ค์ค๋ก ํํฐ ๊ฐ์ ํ์ตํ๊ฒ๋ ํจ
- ๊ฐ ๋ ์ด์ด์ ์ ์ถ๋ ฅ ๋ฐ์ดํฐ์ ํ์ ์ ์ง
- ์ด๋ฏธ์ง์ ๊ณต๊ฐ ์ ๋ณด ์ ์ง, ์ธ์ ์ด๋ฏธ์ง์ ํน์ง ํจ๊ณผ์ ์ผ๋ก ์ธ์
- ๋ค์์ ํํฐ๋ก ์ด๋ฏธ์ง ํน์ง ์ถ์ถ
- ์ถ์ถํ ์ด๋ฏธ์ง์ ํน์ง์ ๋ชจ์ ๊ฐํํ๋ Pooling ๋ ์ด์ด
- ํํฐ๋ฅผ ๊ณต์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ, ํ์ต ํ๋ผ๋ฏธํฐ๊ฐ ๋งค์ฐ ์ ์
1) ์ด๋ฏธ์ง ํน์ง ์ถ์ถ ( Feature Extration)
: Convolution Layer ์ Pooling Layer๋ฅผ ์ฌ๋ฌ๊ฒน ์๋๋ค
: ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ํํฐ๋ฅผ ์ํํ๋ฉฐ ํฉ์ฑ๊ณฑ ๊ณ์ฐ -> Feature map
: Convolution Layer ์ filter ํฌ๊ธฐ, stride, padding, max poolxing ์ ๋ฐ๋ผ ์ถ๋ ฅ ๋ฐ์ดํฐ shape ๋ณ๊ฒฝ
: Convolution Layer์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํํฐ๋ฅผ ์ ์ฉ ํ , ํ์ฑํ ํจ์ ๋ฐ์
: Pooling Layer ์ ์ ํ์ ๋ ์ด์ด
+ ์ด๋ฏธ์ง ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ง๋๋ flatten ๋ ์ด์ด
2) ํด๋์ค ๋ถ๋ฅ ( Classification )
: ์ด๋ฏธ์ง ๋ถ๋ฅ๋ฅผ ์ํ Fully Connceted ๋ ์ด์ด
2. CNN ์ฃผ์ ์ฉ์ด
- Convolution (ํฉ์ฑ๊ณฑ)
: ์๋ณธ ์ด๋ฏธ์ง์ ํน์ ํํฐ๋ฅผ ๊ณฑํ์ฌ ๋ํ๊ธฐ
: ๋ ๊ฐ์ ํจ์ f ์ g ๊ฐ ์์ ๋, ๋ ํจ์์ ํฉ์ฑ๊ณฑ์ ์ํ ๊ธฐํธ๋ก๋ f * g ์ ๊ฐ์ด ํ์
: ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ๋ ํจ์ f , g ๊ฐ์ด๋ฐ ํ๋์ ํจ์๋ฅผ ๋ฐ์ (reverse), ์ ์ด(shift)์ํจ ๋ค์, ๋ค๋ฅธ ํ๋์ ํจ์์ ๊ณฑํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ถ
: 2 ์ฐจ์ ์ ๋ ฅ ๋ฐ์ดํฐ (5 x 5)๋ฅผ 1๊ฐ์ ํํฐ (3 x 3)๋ก ํฉ์ฑ๊ณฑ ์ฐ์ฐ ์ํ => Feature map ๋ง๋ฆ
- ์ฑ๋ (Channel)
: ์ด๋ฏธ์ง ํฝ์
์ ํ๋ํ๋๊ฐ ์ค์
: ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ 3๊ฐ์ ์ฑ๋ (RGB)
: ํ๋ฐฑ ์ด๋ฏธ์ง๋ 2์ฐจ์ ๋ฐ์ดํฐ๋ก, 1๊ฐ ์ฑ๋ (ํ๋ฐฑ)
: n ๊ฐ์ ํํฐ๊ฐ ์ฌ์ฉ๋๋ค๋ฉด ์ถ๋ ฅ ๋ฐ์ดํฐ๋ n๊ฐ์ ์ฑ๋ ๊ฐ์ง
EX) ๋์ด 39 (ํฝ์
), ํญ 31 (์ปฌ๋ฌ), ์ปฌ๋ฌ => (39, 31, 3) shape
- ํํฐ (Filter) = ์ปค๋ (Kernel)
: ์ด๋ฏธ์ง์ ํน์ง์ ์ฐพ์๋ด๊ธฐ ์ํ ๊ณต์ฉ ํ๋ผ๋ฏธํฐ
: ๋ด๊ฐ ํ์ ํฝ์
์์ญ์ ์ฐพ๊ณ ์ ํ๋ ๋์์ด ์๋์ง ํ๋ณ
: filter = kernel
: CNN ์ ํ์ต ๋์
: filter ์ ๋ด๋ถ ๊ฐ (weight) ์ ์ฃผ๋ก ๋๋๊ฐ -> ํ์ต ์งํํ๋ฉฐ ๋ด๋ถ weight ๊ฐฑ์ !
: ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ๊ฐ๊ฒฉ์ผ๋ก ์ํํ๋ฉฐ ์ฑ๋๋ณ๋ก ํฉ์ฑ๊ณฑ ํ๊ณ , ๋ชจ๋ ์ฑ๋์ ํฉ์ฑ๊ณฑ์ ํฉ์ Feature map ์ผ๋ก ๋ง๋ฆ
- Stride
: ์ง์ ๋ ๊ฐ๊ฒฉ์ผ๋ก ํํฐ๋ฅผ ์ํ
: filter ๊ฐ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ฉฐ ์ฐ์ฐ ํ ๋, ํ๋ฒ์ ์ด๋ํ๋ pixel ๊ฐ์
ex) 2์นธ์ฉ ์ด๋ํ๋ฉด์ ํฉ์ฑ๊ณฑ ๊ณ์ฐ
: ์ฌ๋ฌ ์ฑ๋์ ๊ฐ์ง ๊ฒฝ์ฐ, ํํฐ๋ ๊ฐ์ฑ๋์ ์ํํ๋ฉฐ ์ฑ๋๋ณ feature map ๋ง๋ ๋ค
: ๊ฐ ์ฑ๋์ feature map์ ํฉ์ฐํ์ฌ ์ต์ข
feature map ์ผ๋ก ๋ฐํ
: ์
๋ ฅ ๋ฐ์ดํฐ๋ ์ฑ๋ ์์ ์๊ด์์ด ํํฐ ๋ณ๋ก 1๊ฐ์ feature map ๋ง๋ค์ด์ง
: ํ๋์ Convolution Layer ์ ํฌ๊ธฐ๊ฐ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ ํํฐ ์ ์ฉ ๊ฐ๋ฅ
: feature map ์ ํํฐ ๊ฐ์ ๋งํผ ์บ๋ ๋ง๋ค์ด์ง
: ์
๋ ฅ ๋ฐ์ดํฐ์ ์ ์ฉํ ํํฐ ๊ฐ์ => ์ถ๋ ฅ ๋ฐ์ดํฐ์ feature map ์ฑ๋
- Activation Map ( = Feature map : ํฉ์ฑ ๊ณฑ ๊ณ์ฐ์ผ๋ก ๋ง๋ค์ด์ง ํ๋ ฌ)
: Convolution Layer์ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํํฐ๊ฐ ์ํํ๋ฉฐ ํฉ์ฑ๊ณฑ์ ํตํด ๋ง๋ ์ถ๋ ฅ
: Feature map ํ๋ ฌ์ ํ์ฑ ํค์ ์ ์ฉํ ๊ฒฐ๊ณผ
=> Convolution ๋ ์ด์ด์ ์ต์ข
๊ฒฐ๊ณผ
- ์คํธ๋ผ์ด๋ (Strid)
: ์ง์ ๋ ๊ฐ๊ฒฉ์ผ๋ก ํํฐ๋ฅผ ์ํ
ex) 2์นธ์ฉ ์ด๋ํ๋ฉด์ ํฉ์ฑ๊ณฑ ๊ณ์ฐ
- ํจ๋ฉ (Padding)
: Convolution ๋ ์ด์ด์์ filter ์ stride ์์ฉ์ผ๋ก feature map ํฌ๊ธฐ๋ ์
๋ ฅ ๋ฐ์ดํฐ๋ณด๋ค ์๋ค
: Convolution ๋ ์ด์ด์ ์ถ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ค์ด๋๋ ๊ฒ์ ๋ฐฉ์ง ( ๊ฐ์ฅ์๋ฆฌ ํฝ์
์ ๋ณด ์ ์ค ๋ฐฉ์ง )
: ์
๋ ฅ ๋ฐ์ดํฐ์ ์ธ๊ฐ์ ์ง์ ๋ ํฝ์
๋งํผ ํน์ ๊ฐ์ผ๋ก ์ฑ์ ๋ฃ๊ธฐ ( ๋ณดํต 0 ์ผ๋ก ์ฑ์๋ฃ์ : zero-padding )
- ํ๋ง (Pooling) ๋ ์ด์ด
: Convolution Layer์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฐ์์ ์ถ๋ ฅ ๋ฐ์ดํฐ (Activation map) ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฑฐ๋ ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์กฐ
: ์์ค์ด ์๋ feature map ์์ ์ค์ pooling ์ ๊ฑฐ์น๋ฉฐ ์ค์ํ ์ ๋ณด๋ฅผ ์ถ์ถํด ํต์ฌ ์ ๋ณด๋ฅผ ๋งค ๋จ๊ณ๋ง๋ค ์์ฑ
: ํ์ต ๋์ ํ๋ผ๋ฏธํฐ๊ฐ ์์
: pooling layer ํต๊ณผํ๋ฉด ํ๋ ฌ ํฌ๊ธฐ ๊ฐ์
: pooling layer ํตํด์ ์ฑ๋ ์ ๋ณ๊ฒฝ ์์
1) Max Pooling
: ํน์ ์ฌ์ด์ฆ ์๋์ฐ ๋ด์ ๊ฐ ์ค Max( ์ต๋ ) ๊ฐ์ ๋ํ๋ก ๊ฐ๊ณ ์ค๊ธฐ
2) Average Pooling
: ํน์ ์ฌ์ด์ฆ ์๋์ฐ ๋ด์ ๊ฐ ์ค Average( ํ๊ท ) ๊ฐ์ ๋ํ๋ก ๊ฐ๊ณ ์ค๊ธฐ
3) Min Pooing
: ํน์ ์ฌ์ด์ฆ ์๋์ฐ ๋ด์ ๊ฐ ์ค Min( ์ต์ ) ๊ฐ์ ๋ํ๋ก ๊ฐ๊ณ ์ค๊ธฐ
3. ๋ ์ด์ด๋ณ ์ถ๋ ฅ ๋ฐ์ดํฐ ์ ์
1) Convolution Layer ์ถ๋ ฅ ๋ฐ์ดํฐ(Activation Map)์ Shape ๊ณ์ฐ ์
: ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ํ ํํฐ์ ํฌ๊ธฐ, stride ํฌ๊ธฐ์ ๋ฐ๋ผ feature map ๊ฒฐ์
- EX)
- ์ ๋ ฅ shape = (39 : H ๋์ด , 31 : W ํญ, 1 : ์ฑ๋)
- ์ ๋ ฅ ์ฑ๋ = 1
- ํํฐ F = (4, 4)
- ์ถ๋ ฅ ์ฑ๋ = 20
- stride = 1
- ํจ๋ฉ P = 2
RowSize = (H +2P - F) / Stride + 1
ColumnSize = (W +2P - F) / Stride + 1
=> Activation Map์ Shape๋ (36, 28, 20)
2) Pooling Layer ์ถ๋ ฅ ๋ฐ์ดํฐ ํฌ๊ธฐ ์ค์
: pooling ์ฌ์ด์ฆ๋ ์ ์ฌ๊ฐํ
: ์ ๋ ฅ ๋ฐ์ดํฐ์ ํ ํฌ๊ธฐ์ ์ด ํฌ๊ธฐ๋ pooling ์ฌ์ด์ฆ์ ๋ฐฐ์ (๋๋์ด ๋จ์ด์ง๋ ์)
: pooling layer์ ์ถ๋ ฅ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ ํ๊ณผ ์ด์ ํฌ๊ธฐ๋ฅผ Pooling ์ฌ์ด์ฆ๋ก ๋๋ ๋ชซ
OutputRowSize = InputRowSize / PoolingSize
OutputColumnSize = InputColumnSize / PoolingSize
=> ์ถ๋ ฅ ๋ฐ์ดํฐ์ Shape์ (18, 14, 20) if PoolingSize = (2, 2)
4. CNN ๊ตฌ์ฑ
: Convolution Layer ์ Max pooling Layer๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก stack ์ ์๋ ํน์ง ์ถ์ถ (Feature Extraction)
: Fully Connected Layer ๊ตฌ์ฑ
: ๋ง์ง๋ง ์ถ๋ ฅ์ธต์ Softmax ์ ์ฉํ์ฌ ๋ถ๋ฅ (Classifiation)
: Filter, Stride, Padding์ ์กฐ์
: ํน์ง ์ถ์ถ(Feature Extraction) ๋ถ๋ถ์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ํฌ๊ธฐ ๋ง์ถ๋ ์์ ์ด ์ค์
5. CNN ์ฝ๋
1) ํํฐ๋ก ํน์ง์ ๋ฝ์์ฃผ๋ ์ปจ๋ณผ๋ฃจ์ (Convolution) ๋ ์ด์ด
Conv2D(filters = 1, kernel_size = (2, 2), padding='valid', input_shape=(3, 3, 1), activation='relu')
- ์ฒซ๋ฒ์งธ : Convolution filter ์
- ๋๋ฒ์งธ : Convolution kernel (ํ, ์ด)
- padding : ๊ฒฝ๊ณ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ์
- valid : ์ ํจํ ์์ญ๋ง ์ถ๋ ฅ => ์ถ๋ ฅ ์ด๋ฏธ์ง ์ฌ์ด์ฆ๋ ์ ๋ ฅ ์ฌ์ด์ฆ๋ณด๋ค ์์ ( default = "valid" )
- same : ์ถ๋ ฅ ์ด๋ฏธ์ง ์ฌ์ด์ฆ๊ฐ ์ ๋ ฅ ์ด๋ฏธ์ง ์ฌ์ด์ฆ์ ๋์ผ
- input_shape : ์ํ ์๋ฅผ ์ ์ธํ ์
๋ ฅ ํํ๋ฅผ ์ ์ (๋ชจ๋ธ์์ ์ฒซ ๋ ์ด์ด์ผ ๋๋ง ์ ์)
- (ํ, ์ด, ์ฑ๋ ์)๋ก ์ ์
- ํ๋ฐฑ์์์ธ ๊ฒฝ์ฐ์๋ ์ฑ๋์ด 1
- ์ปฌ๋ฌ(RGB)์์์ธ ๊ฒฝ์ฐ์๋ ์ฑ๋์ 3
- strides : convolution์ stride๋ฅผ ์ง์ ( default = 1 )
- activation : ํ์ฑํ ํจ์ ์ค์
- linear : ๋ํดํธ ๊ฐ, ์ ๋ ฅ๋ด๋ฐ๊ณผ ๊ฐ์ค์น๋ก ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๊ทธ๋๋ก ์ถ๋ ฅ์ผ๋ก ๋์ด
- relu : rectifier ํจ์, ์์ต์ธต์ ์ฃผ๋ก ์ฐ์ ( default = "relu" )
- sigmoid : ์๊ทธ๋ชจ์ด๋ ํจ์, ์ด์ง ๋ถ๋ฅ ๋ฌธ์ ์์ ์ถ๋ ฅ์ธต์ ์ฃผ๋ก ์ฐ์
- softmax : ์ํํธ๋งฅ์ค ํจ์, ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์์ ์ถ๋ ฅ์ธต์ ์ฃผ๋ก ์ฐ์
2) ์ ์ถ๋ ฅ์ ๋ชจ๋ ์ฐ๊ฒฐํด์ฃผ๋ Dense ๋ ์ด์ด
Dense(8, input_dim = 4, init = 'uniform', activation = 'relu'))
: ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ชจ๋ ์ฐ๊ฒฐํด์ฃผ๋ฉฐ, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๊ฐ๊ฐ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฐ์ค์น๋ฅผ ํฌํจ
: ์ ๋ ฅ ๋ด๋ฐ์ด 4๊ฐ, ์ถ๋ ฅ ๋ด๋ฐ์ด 8๊ฐ์๋ค๋ฉด ์ด ์ฐ๊ฒฐ์ ์ 32๊ฐ (4 * 8 = 32)
: ๊ฐ ์ฐ๊ฒฐ์ ์๋ ๊ฐ์ค์น(weight)๋ฅผ ํฌํจํ๊ณ ์๋๋ฐ, ์ด ๊ฐ์ค์น๊ฐ ๋ํ๋ด๋ ์๋ฏธ๋ ์ฐ๊ฒฐ๊ฐ๋
- ์ฒซ๋ฒ์งธ : ์ถ๋ ฅ ๋ด๋ฐ์ ์๋ฅผ ์ค์
- input_dim : ์ ๋ ฅ ๋ด๋ฐ์ ์๋ฅผ ์ค์
- init : ๊ฐ์ค์น ์ด๊ธฐํ ๋ฐฉ๋ฒ ์ค์
- uniform : ๊ท ์ผ ๋ถํฌ
- normal : ๊ฐ์ฐ์์ ๋ถํฌ
- activation : ํ์ฑํ ํจ์ ์ค์
- linear : ๋ํดํธ ๊ฐ, ์ ๋ ฅ๋ด๋ฐ๊ณผ ๊ฐ์ค์น๋ก ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๊ทธ๋๋ก ์ถ๋ ฅ์ผ๋ก ๋์ด
- relu : rectifier ํจ์, ์์ต์ธต์ ์ฃผ๋ก ์ฐ์
- sigmoid : ์๊ทธ๋ชจ์ด๋ ํจ์, ์ด์ง ๋ถ๋ฅ ๋ฌธ์ ์์ ์ถ๋ ฅ์ธต์ ์ฃผ๋ก ์ฐ์
- softmax : ์ํํธ๋งฅ์ค ํจ์, ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์์ ์ถ๋ ฅ์ธต
# 4๊ฐ์ ์
๋ ฅ ๊ฐ์ ๋ฐ์ ์ด์ง๋ถ๋ฅ (sigmoid)
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(8, input_dim=4, init='uniform', activation='relu'))
model.add(Dense(6, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
6. CNN ์ค์ต ์ฝ๋
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers import Dense
from keras.layers import Flatten
model = Sequential()
model.add(Conv2D(12, kernel_size=(5, 5), activation='relu', input_shape=(56, 56, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(16, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(20, kernel_size=(4, 4), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation="relu")) # ์ถ๋ ฅ 128
model.add(Dense(4, activation="softmax")) # ์ถ๋ ฅ 4 ์
๋ ฅ 128
model.summary()
Model: "sequential_12"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_28 (Conv2D) (None, 52, 52, 12) 312
_________________________________________________________________
max_pooling2d_20 (MaxPooling (None, 26, 26, 12) 0
_________________________________________________________________
conv2d_29 (Conv2D) (None, 22, 22, 16) 4816
_________________________________________________________________
max_pooling2d_21 (MaxPooling (None, 11, 11, 16) 0
_________________________________________________________________
conv2d_30 (Conv2D) (None, 8, 8, 20) 5140
_________________________________________________________________
max_pooling2d_22 (MaxPooling (None, 4, 4, 20) 0
_________________________________________________________________
flatten_3 (Flatten) (None, 320) 0
_________________________________________________________________
dense_6 (Dense) (None, 128) 41088
_________________________________________________________________
dense_7 (Dense) (None, 4) 516
=================================================================
Total params: 51,872
Trainable params: 51,872
Non-trainable params: 0
_________________________________________________________________
- Layer (type)
: ๋ ์ด์ด์ ์ด๋ฆ๊ณผ ํ์
: ๋ฐ๋ก ์ง์ ํด์ฃผ๊ณ ์ถ์๋๋ Dense์ ํ๋ผ๋ฏธํฐ๋ก name= '์ง์ ํ๊ณ ์ถ์ ์ด๋ฆ'
- Output Shape
: (None, 4)์ด๋ผ๋ ๋ป์ None๊ฐ์ ํ๊ณผ 4๊ฐ์ ์์ํ ๊ฐ์ด ์ฃผ์ด์ก๋ค
: ํ์ด None์ผ๋ก ์ง์ ๋๋ ์ด์ ๋ ๋ฐ์ดํฐ์ ๊ฐฏ์๋ ๊ณ์ํด์ ์ถ๊ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์์๋ ์ฃผ๋ก ํ์ ๋ฌด์
: ์ด์ shape์ ๋ง์ถ์ด์ฃผ๋ ์์
- Param:
: ํ๋ผ๋ฏธํฐ์ ์, ์ฆ ๊ฐ ์ ๋ ฅ๋ ธ๋์ ์ถ๋ ฅ๋ ธ๋์ ๋ํด ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ์
: ์ธํ์ Bias(b) ๋ ธ๋๊ฐ ์ถ๊ฐ
7. CNN ์ ์ถ๋ ฅ, ํ๋ผ๋ฏธํฐ ๊ณ์ฐ
Model: "sequential_12"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_28 (Conv2D) (None, 52, 52, 12) 312
_________________________________________________________________
max_pooling2d_20 (MaxPooling (None, 26, 26, 12) 0
_________________________________________________________________
conv2d_29 (Conv2D) (None, 22, 22, 16) 4816
_________________________________________________________________
max_pooling2d_21 (MaxPooling (None, 11, 11, 16) 0
_________________________________________________________________
conv2d_30 (Conv2D) (None, 8, 8, 20) 5140
_________________________________________________________________
max_pooling2d_22 (MaxPooling (None, 4, 4, 20) 0
_________________________________________________________________
flatten_3 (Flatten) (None, 320) 0
_________________________________________________________________
dense_6 (Dense) (None, 128) 41088
_________________________________________________________________
dense_7 (Dense) (None, 4) 516
=================================================================
Total params: 51,872
Trainable params: 51,872
Non-trainable params: 0
_________________________________________________________________
โinput_shape = (56, 56, 1)
- conv2d_28 ( 52, 52, 12 )
1) ํ๋ผ๋ฏธํฐ
Convolution layer1์์ ํ์ต์ํฌ ๋์์ ์ ๋ ฅ์ฑ๋ 1, ์ปค๋ ์ฌ์ด์ฆ (5 , 5), ์ถ๋ ฅ์ฑ๋ 12 ๊ฐ
=> (56, 56, 1) ์ด๋ฏธ์ง์ ๋ํด 12 ์ฅ์ Conv Layer๋ฅผ ๋ง๋ ๋ค
=> (5 * 5) ์ปค๋ * 1 ์ฑ๋ * 12 ์ฅ ์์ฑ + 12 ๊ฐ bias ํญ์ด ์์ผ๋๊น 312 ๊ฐ์ ๋ชจ์ ์์ฑ
2) Convolution Layer ์ถ๋ ฅ ๋ฐ์ดํฐ
RowSize = (H + 2P - F) / Stride + 1
ColumnSize = (W + 2P - F) / Stride + 1
=> 56 - 5 / 1 + 1 = 52
- max_pooling2d_22 ( 26, 26, 12 )
1) ์ถ๋ ฅ ๋ฐ์ดํฐ
(52, 52) ์ด๋ฏธ์ง 12์ฅ์ด (2, 2) max pooling์ ํต๊ณผํ๋ฉด์ (26, 26) ์ด๋ฏธ์ง 12์ฅ์ผ๋ก ์ด๋ฏธ์ง ์ฐจ์์ด ์ถ์
OutputRowSize = InputRowSize / PoolingSize
OutputColumnSize = InputColumnSize / PoolingSize
=> 52 / 2 = 26
- conv2d_29 ( 22, 22, 16 )
1) ํ๋ผ๋ฏธํฐ
Convolution layer2 ์์ ํ์ต์ํฌ ๋์์ ์ ๋ ฅ์ฑ๋ 12, ์ปค๋ ์ฌ์ด์ฆ (5 , 5), ์ถ๋ ฅ์ฑ๋ 16 ๊ฐ
=> (22, 22, 16) ์ด๋ฏธ์ง์ ๋ํด 16 ์ฅ์ Conv Layer๋ฅผ ๋ง๋ ๋ค
=> (5 * 5) ์ปค๋ * 12 ์ฑ๋ * 16 ์ฅ ์์ฑ + 16 ๊ฐ bias ํญ์ด ์์ผ๋๊น 4816 ๊ฐ์ ๋ชจ์ ์์ฑ
2) Convolution Layer ์ถ๋ ฅ ๋ฐ์ดํฐ
RowSize = (H + 2P - F) / Stride + 1
ColumnSize = (W + 2P - F) / Stride + 1
=> 26 - 5 / 1 + 1 = 22
- max_pooling2d_21 ( 11, 11, 16 )
1) ์ถ๋ ฅ ๋ฐ์ดํฐ
(22, 22) ์ด๋ฏธ์ง 16์ฅ์ด (2,2) max pooling์ ํต๊ณผํ๋ฉด์ (11, 11) ์ด๋ฏธ์ง 16 ์ฅ์ผ๋ก ์ด๋ฏธ์ง ์ฐจ์์ด ์ถ์
OutputRowSize = InputRowSize / PoolingSize
OutputColumnSize = InputColumnSize / PoolingSize
=> 22 / 2 = 11
- conv2d_30 ( 8, 8, 20 )
1) ํ๋ผ๋ฏธํฐ
Convolution layer2 ์์ ํ์ต์ํฌ ๋์์ ์ ๋ ฅ์ฑ๋ 16, ์ปค๋ ์ฌ์ด์ฆ (4 , 4), ์ถ๋ ฅ์ฑ๋ 20 ๊ฐ
=> (11, 11, 16) ์ด๋ฏธ์ง์ ๋ํด 20 ์ฅ์ Conv Layer๋ฅผ ๋ง๋ ๋ค
=> (4 * 4) ์ปค๋ * 16 ์ฑ๋ * 20 ์ฅ ์์ฑ + 20 ๊ฐ bias ํญ์ด ์์ผ๋๊น 5140 ๊ฐ์ ๋ชจ์ ์์ฑ
2) Convolution Layer ์ถ๋ ฅ ๋ฐ์ดํฐ
RowSize = (H + 2P - F) / Stride + 1
ColumnSize = (W + 2P - F) / Stride + 1
=> 11 - 4 / 1 + 1 = 8
- max_pooling2d_21 ( 4, 4, 20 )
1) ์ถ๋ ฅ ๋ฐ์ดํฐ
(8, 8) ์ด๋ฏธ์ง 20์ฅ์ด (2,2) max pooling์ ํต๊ณผํ๋ฉด์ (4, 4) ์ด๋ฏธ์ง 20 ์ฅ์ผ๋ก ์ด๋ฏธ์ง ์ฐจ์์ด ์ถ์
OutputRowSize = InputRowSize / PoolingSize
OutputColumnSize = InputColumnSize / PoolingSize
=> 8 / 2 = 4
- flatten_3 ( 320 )
(4, 4) * 20 = 320 ๊ฐ์ ์ ๋ ฅ ํ ์๊ฐ ์์ฑ
- dense_6
320๊ฐ๋ฅผ ์ ๋ ฅ ๋ฐ์ 128๊ฐ๋ฅผ ์ถ๋ ฅํ๋ฏ๋ก bias๊ฐ 128 ๊ฐ์ด๋ฏ๋ก ๋ฏธ์ง์๋ 320 * 128 + 128 = 41088
- dense_7
128๊ฐ๋ฅผ ์ ๋ ฅ๋ฐ์ 4๊ฐ๋ฅผ ์ถ๋ ฅํ๊ณ bias๊ฐ 4 ๊ฐ์ด๋ฏ๋ก ๋ฏธ์ง์๋ 517
=> ์ด ๋ชจ๋ ๋ฏธ์ง์๋ฅผ ํฉํ๋ฉด 51,872
8. CNN ์์ฝ
: ์ด๋ฏธ์ง์ ๊ณต๊ฐ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉด์ ์ธ์ ์ด๋ฏธ์ง์์ ํน์ง์ ํจ๊ณผ์ ์ผ๋ก ์ธ์ํ๊ณ ๊ฐ์กฐํ๋ ๋ฐฉ์
: ์ด๋ฏธ์ง์ ํน์ง ์ถ์ถ + ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฅ
- ์ด๋ฏธ์ง ํน์ง ์ถ์ถ
=> filter ์ ์ฌ์ฉํ์ฌ ๊ณต์ ํ๋ผ๋ฏธํฐ ์๋ฅผ ์ต์ํ ํ๋ฉฐ ์ด๋ฏธ์ง ํน์ง์ ์ฐพ๋ convolution ๋ ์ด์ด์ ํน์ง์ ๊ฐํํ๊ณ ๋ชจ์ผ๋ pooling ๋ ์ด์ด๋ก ๊ตฌ์ฑ
: Filter์ ํฌ๊ธฐ, Stride, Padding๊ณผ Pooling ํฌ๊ธฐ๋ก ์ถ๋ ฅ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์กฐ์
: ํํฐ์ ๊ฐ์๋ก ์ถ๋ ฅ ๋ฐ์ดํฐ์ ์ฑ๋์ ๊ฒฐ์
: ์ด์ ๋ ์ด์ด์ ๋ชจ๋ ๋ ธ๋๊ฐ ๋ค์ ๋ ์ด์ด์ ๋ชจ๋ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ์ด์ด๋ฅผ Fully Connected Layer(FC Layer)
=> FC Layer๋ฅผ Dense Layer
'๐ฉโ๐ป ์ธ๊ณต์ง๋ฅ (ML & DL) > ML & DL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Deep Learning]_2_๋ฏธ๋ถ ๊ธฐ์ด (1) (0) | 2022.02.01 |
---|---|
[์์ฑ] ์์ฑ์ธ์ ์์ ๋ถ๋ฅ & ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.01.31 |
[DEEPNOID ์ํฌ์ธํธ๋ ์จ]_10_GAN (0) | 2022.01.28 |
[DEEPNOID ์ํฌ์ธํธ๋ ์จ]_9_AutoEncoder & GAN (0) | 2022.01.28 |
[Deep Learning]_1_๋จธ์ ๋ฌ๋ ์ํ (0) | 2022.01.28 |