9 Sun
Last updated
Was this helpful?
Last updated
Was this helpful?
Conv2D๋ฅผ ์ธ๋์๋ ๋ฌด์กฐ๊ฑด ์ ๋ ฅ์ 3์ฐจ์์ผ๋ก ํด์ค์ผ ํ๋ค.
(H, W, C)
์ค์ต ์ฝ๋์์๋ Fashion MNIST ๋ฐ์ดํฐ์ ์ ์ฐ๊ณ ์ด ๋ฐ์ดํฐ์ ์ด Gray Scale์ด๊ธฐ ๋๋ฌธ์ Channel = 1 ์ด์ง๋ง ์ค์ ๋ก๋ 3์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
2์ฐจ์์ผ๋ก ์ ๋ ฅํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค.
์ด ๋ ๋ฐํ๋๋ ๊ฒฐ๊ณผ๋ 4์ฐจ์์ Feature Map์ด ๋ฐํ๋๋๋ฐ ์ด๋ฅผ 4์ฐจ์์ด๋ผ๊ณ ํ์ง ์๊ณ ๋ฐฐ์น๋ฅผ ์ ์ธํ๊ณ 3์ฐจ์์ Feature Map ์ด๋ผ๊ณ ํ๋ค.
1๊ฐ์ ํํฐ๋ 3์ฐจ์์ด๋ค.
์ปค๋์ ์งํฉ์ ํํฐ๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์ ์ปค๋์ 2์ฐจ์
kernelSize * kernerSize * filters * channel ์ด ํ์ํ ํ๋ผ๋ฏธํฐ ๊ฐ์๊ฐ ๋๋ค.
์ฌ๊ธฐ์ ํ์ํ ํ๋ผ๋ฏธํฐ ๊ฐ์๋ 3 * 3 * 32 * 1 = 288 ์ด๋ค.
์ด ๋ bias 32๋ฅผ ๋ํด์ค์ผ๋ก์จ ์ด 320์ด ๋๋ค
Conv2d_3 ๋ ์ด์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
3 * 3 * 64 * 32 = 18,432
์ด์ ๋ ์ด์ด์์ ์ ํด์ค ์ฑ๋ ์๊ฐ 32๊ฐ์ด๊ธฐ ๋๋ฌธ์
bias 64๋ฅผ ๋ํด์ค์ผ๋ก์จ ์ด 18496์ด ๋๋ค.
์ด ํ flatten(1์ฐจ์์ผ๋ก ๋ณํ)์ ๊ฑฐ์น๋ฉด 13 * 13 * 64 = 10,816 ์ด ๋๋ค.
dense๋ Fully Connected Network ์ด๋ฏ๋ก Input์ด 10,816์ด๊ณ Output์ด 100์ด๋ฏ๋ก ์ด 1,081,600 + 100 = 1,081,700 ์ ์ธ์๊ฐ ํ์ํ๋ค.
Feature Extract ๊ณผ์ ์ ๊ฑฐ์น๋ค flatten์ ๊ฑฐ์ณ dense layer๋ฅผ ๊ฑฐ์น ๋ ์ค๋ฒํผํ ์ด ๋ฐ์ํ ํ๋ฅ ์ด ๋์ด๋๋ค. ๋ฐ๋ผ์ ์ด ๋ Dropout ๊ธฐ๋ฒ์ ์ ์ฉํ๋ค.
FC Layer๋ ๋๋ฌด ์ด์ดํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ด์, ๊ต์ฅํ ๊ณ ์ฐจ์์ ๋ฐฉ์ ์์ด ๋ฑ์ฅํ๊ฒ ๋๊ณ ๋ฐ๋ผ์ ์ด ๋๋ฌธ์ ์ค๋ฒํผํ ์ด ์๊ธด๋ค.
๋ณดํต Dense ํ ํ๋ค.
MaxPooling์ด๋ Flatten ํ์๋ ํ ์๋ ์๋ค. ์ ํ์ง๋ ์๋๋ค.
Conv2D()๋ ์ ๋ ฅ์ผ๋ก ๋ฐฐ์น๋ฅผ ์ ์ธํ 3์ฐจ์ ์ ๋ ฅ์ ํด์ผํ๋ค.
ํ์ง๋ง 2์ฐจ์์ผ๋ก ์ ๋ ฅํด๋ 3์ฐจ์์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค
(28, 28) => (28, 28, 1)
๋ช ํํ๊ฒ๋ 3์ฐจ์ ์ ๋ ฅ์ผ๋ก ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. (๋น๋ก Grayscale ์ด๋๋ผ๋)
๋ค์ ๊ฐ์กฐ! Conv ์ฐ์ฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ 3์ฐจ์ ์ถ๋ ฅ๋๋ ํผ์ฒ๋งต๋ 3์ฐจ์์ด๋ค.
๋จ์ผ ํํฐ๋ 3์ฐจ์
์ฌ๋ฌ ๊ฐ์ ์ปค๋์ ๊ฐ์ง๋ ๊ฒ์ ํํฐ๋ผ๊ณ ํ๋ค.
CNN์ ์ฌ๋ฌ ๊ฐ์ 3์ฐจ์ ํํฐ๋ฅผ ๊ฐ๋ณ feature map์ ์ ์ฉํ๋ ๋ฐฉ์์ด๋ค.
ํํฐ์ ์ฑ๋ ์๋ ํญ์ ์ ๋ ฅ ํ ์์ ์ฑ๋ ์์ ๋์ผํ๋ค.
๊ฐ์ง ์์ผ๋ฉด ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง์ง ์๋๋ค.
์๋ฅผ ๋ค์ด, ์ ๋ ฅ ์ด๋ฏธ์ง๊ฐ 3์ฐจ์ RGB ์ด๋ฏธ์ง๋ผ๋ฉด ์ฒซ๋ฒ์งธ Conv ์ฐ์ฐ์ด ๋ ๋์ ํํฐ์ ์ฑ๋๋ 3๊ฐ.
ํํฐ ํ๋ ๋น ํผ์ฒ๋งต์ด ํ๋ ์๊ธด๋ค.
RGB ์ด๋ฏธ์ง๋ผ์ ์ฑ๋์ด 3๊ฐ๋๊น ํผ์ฒ๋งต์ด 3๊ฐ ์๊ธด๋ค๊ณ ์๊ฐํ๋ฉด ์๋๋ค. ๊ฐ ํํฐ๋ฅผ ๊ฑฐ์น ๊ฒฐ๊ณผ๋ฌผ์ด 3๊ฐ๊ฐ ์๊ธฐ๋ ๊ฒ์ ๋ง๋ค. ์ด ๋ ์ด ๊ฒฐ๊ณผ๋ฌผ์ ๋ชจ๋ element wise ํ๊ฒ ๋ํ๋ ๊ณผ์ ์ ๊ฑฐ์น ๊ฒฐ๊ณผ๋ฌผ์ด ํผ์ฒ๋งต์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ถ๋ ฅ ํผ์ฒ๋งต์ ์ฑ๋ ์๋ Conv๋ฅผ ์ ์ฉํ ํํฐ์ ๊ฐ์๋ก ๊ฒฐ์ ๋๋ค. (๋จ์ผ ํํฐ์ ์ฑ๋ ์๊ฐ ์๋๋ค)
์ถ๋ ฅ ํฌ๊ธฐ = (์ ๋ ฅ ํฌ๊ธฐ - ์ปค๋ ์ฌ์ด์ฆ ) / ์คํธ๋ผ์ด๋ + 1
์ฌ๊ธฐ์ ํจ๋ฉ์ ์๋ค๊ณ ๊ฐ์
ํจ๋ฉ๊น์ง ๊ณ ๋ คํ ์์ ๋ค์ ๊ฐ์
์ถ๋ ฅ ํฌ๊ธฐ = (์ ๋ ฅ ํฌ๊ธฐ - ์ปค๋ ์ฌ์ด์ฆ + 2 * ํจ๋ฉ) ์คํธ๋ผ์ด๋ + 1
์ผ๋ฐ์ ์ผ๋ก ํจ๋ฉ = 0, ์คํธ๋ผ์ด๋ = 1์ผ ๊ฒฝ์ฐ I - F + 1์ด O ํฌ๊ธฐ
์ค์ ๋ก ์ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ๋ง์ถฐ์ค ๋๋ ์ด๋ฅผ ๊ณ์ฐํ ํ์๊ฐ ์๋ค.
x = Conv2D(filters=1, kernel_size=3, strides=1, padding='same')(input_tensor)
๋ค์๊ณผ ๊ฐ์ด padding = 'same'
์ผ๋ก ์ค์ ํ๋ฉด ์
์ถ๋ ฅ ํฌ๊ธฐ๊ฐ ๋์ผํ๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์๋ stride๊ฐ ํญ์ 1์ด์ด์ผ ๋๋ค๋ ๊ฐ์ ์ด ์๋ค. ์ค์ ๋ก stride๊ฐ 2์ผ๋์๋ ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
์ ๋ ฅ ํฌ๊ธฐ๊ฐ 6 x 6 ์ธ๋ฐ๋ ๋ถ๊ณผํ๊ณ ์ถ๋ ฅ ํฌ๊ธฐ๋ 3 x 3 ์ด ๋๋ค.
๋ง์ฝ 6x6 ์ ๋ ฅ์ Stride 2, Padding 0์ ์ ์ฉ์์ 2.5๊ฐ ๋๋ค.
์ด ๊ฐ์ 2๋ก ๊ฐ์ฃผ๋๋ค.
2๊ฐ ๋๋ค๋ ๋ป์, 0.5 ๋งํผ์ ์ ๋ณด๋ ๋ฒ๋ ค์ก๋ค๋ ๋ป์ด๋ฉฐ ์ด๋ ๊ณง, ์ปจ๋ณผ๋ฃจ์ ์ด ์ ๋ ฅ์ ์๋์ชฝ์ ์ด๋ฃจ์ด์ง์ง ์์๋ค๋ ์ด์ผ๊ธฐ๋ค.
๋ํ ํจ๋ฉ์ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ค.
์ด ๋ ํํํํ๋ก ์ ๋ ฅํ๊ฒ ๋๋ค.
๋จผ์ ์ค๋ ํํ์ UpDown, ๋๋ฒ์งธ ํํ์ LeftRight
padding=((1, 0), (0, 1))
(1, 0) => ์์ชฝ๋ง ํจ๋ฉ
(0, 1) => ์ค๋ฅธ์ชฝ๋ง ํจ๋ฉ
๋์นญ์ฑ์ ์ํด์ ๋ณดํต ์ปค๋์ ํฌ๊ธฐ๋ ํ์์ด๋ค
3x3, 5x5, 7x7
์ต๊ทผ์ CNN์ ๋๋ถ๋ถ 3x3 ์ปค๋์ ์ฌ์ฉํ๋ค.