ํํฐ์ ์ปค๋
Convolution Neural Network ์์๋ Fully Connected Neural Network ์๋ ๋ค๋ฅด๊ฒ ๋ด๋ฐ์ Filter ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ด๋ฐ = ํํฐ = ์ปค๋ ๋ชจ๋ ๊ฐ์ ๋ง์ด๋ผ๊ณ ์๊ฐํด๋ ๋๋ค.
Keras ์์ Filter ๋ ๋ด๋ฐ ๊ฐ์๋ฅผ, Kernel ์ ์ ๋ ฅ์ ๊ณฑํด์ง๋ ๊ฐ์ค์น๋ฅผ ์๋ฏธํ๋ค.
ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์ ์ค์ ๊ณ์ฐ์ ๋ฐ์ง์ธต๊ณผ ๋์ผํ๊ฒ ๋จ์ํ ์ ๋ ฅ๊ณผ ๊ฐ์ค์น๋ฅผ ๊ณฑํ๋ ๊ฒ์ด์ง๋ง 2์ฐจ์ ํํ๋ฅผ ์ ์งํ๋ ์ ์ด ๋ค๋ฅด๋ค.
๋ ์ ๋ ฅ๋ณด๋ค ํจ์ฌ ์์ ํฌ๊ธฐ์ ์ปค๋์ ์ฌ์ฉํ๊ณ ์ ๋ ฅ ์๋ฅผ (์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก, ์์์ ์๋๋ก) ์ด๋ํ๋ฉด์ 2์ฐจ์ ํน์ฑ ๋งต์ ๋ง๋ ๋ค. ์ด๋ ๊ฒ 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์ด ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ถ์ผ์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํ๋ค.
์ผ๋ผ์ค๋ก ๊ตฌํํ ํฉ์ฑ๊ณฑ ์ธต
from tensorflow import keras
keras.layers.Conv2D(10, kernel_size=(3, 3), activation='relu')
์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ํํฐ ๊ฐ์, ๋๋ฒ์งธ๋ ์ปค๋์ ํฌ๊ธฐ. ์ด๋ ๋ฐ๋์ ์ฌ์ฉ์๊ฐ ์ง์ ํด์ผ๋๋ ๋งค๊ฐ๋ณ์์ด๋ค.
๋ณดํต ์ปค๋ ํฌ๊ธฐ๋ (3, 3)์ด๋ (5, 5)๊ฐ ๊ถ์ฅ๋๋ค.
ํจ๋ฉ(Padding)๊ณผ ์คํธ๋ผ์ด๋(Stride)
• Padding ์ด๋ (์ถ๋ ฅ์ ํฌ๊ธฐ๋ฅผ ์
๋ ฅ์ ํฌ๊ธฐ์ ๋์ผํ๊ฒ ๋ง๋ค๊ธฐ ์ํด์) ๋ง์น ๋ ํฐ ์
๋ ฅ์ ํฉ์ฑ๊ณฑ์ ํ๋ ์ฒ์ ํ์ฌ ์
๋ ฅ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ๊ฐ์์ ์์๋ก ์ฑ์ฐ๋ ๊ฒ์ด๋ค.
• ์ค์ ์
๋ ฅ๊ฐ์ด ์๋๊ธฐ ๋๋ฌธ์ ํจ๋ฉ์ 0์ผ๋ก ์ฑ์ด๋ค.
• ์ฆ (4, 4) ํฌ๊ธฐ์ ์
๋ ฅ์ 0์ 1๊ฐ ํจ๋ฉํ๋ฉด (6, 6) ํฌ๊ธฐ์ ์
๋ ฅ์ด ๋๋ค.
• ํจ๋ฉ์ ์ญํ ์ ์์ ํ ์ปค๋์ด ๋์ฅ(ํํฐ)๋ฅผ ์ฐ์ ํ์๋ฅผ ๋๋ ค์ฃผ๋ ๊ฒ ๋ฐ์๋ ์๋ค. ์ค์ ๊ฐ์ 0์ผ๋ก ์ฑ์์ ธ ์๊ธฐ ๋๋ฌธ์ ๊ณ์ฐ์ ์ํฅ์ ๋ฏธ์น์ง๋ ์๋๋ค.
• ์
๋ ฅ๊ณผ ํน์ฑ ๋งต์ ํฌ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค๊ธฐ ์ํด์ ์
๋ ฅ ์ฃผ์์ 0์ผ๋ก ํจ๋ฉ ํ๋ ๊ฒ์ Same Padding ์ด๋ผ๊ณ ํ๋ค. ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์๋ ์ธ์ ํจ๋ฉ์ด ๋ง์ด ์ฌ์ฉ๋๋ค. ์ฆ, ์
๋ ฅ๊ณผ ํน์ฑ ๋งต์ ํฌ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
• ํจ๋ฉ ์์ด ์์ํ ์
๋ ฅ ๋ฐฐ์ด์์๋ง ํฉ์ฑ๊ณฑ์ ํ์ฌ ํน์ฑ ๋งต์ ๋ง๋๋ ๊ฒฝ์ฐ๋ฅผ Valid Padding ์ด๋ผ๊ณ ํ๋ค. ๋ฐธ๋ฆฌ๋ ํจ๋ฉ์ ํน์ฑ ๋งต์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค ์ ๋ฐ์ ์๋ค.
ํฉ์ฑ๊ณฑ์์๋ ํจ๋ฉ์ ์ ์ฆ๊ฒจ ์ฌ์ฉํ ๊น?
๋ง์ฝ ํจ๋ฉ์ด ์๋ค๋ฉด ๋ชจ์๋ฆฌ์ ์๋ ์ค์ํ ์ ๋ณด๊ฐ ํน์ฑ ๋งต์ผ๋ก ์ ์ ๋ฌ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ ์ ํ ํจ๋ฉ์ ์ด์ฒ๋ผ ์ด๋ฏธ์ง ์ฃผ๋ณ์ ์๋ ์ ๋ณด๋ฅผ ์์ด๋ฒ๋ฆฌ์ง ์๋๋ก ๋์์ค๋ค.
• Stride ๋ ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ์ด๋ ํฌ๊ธฐ์ด๋ค.
• ํํ๋ก ์ด๋ ์นธ์๋ฅผ ์ง์ ํ ์ ์์ง๋ง, ๊ธฐ๋ณธ ๊ฐ์ธ 1 ์ด์ธ์๋ ์ ์ฌ์ฉํ์ง ์๋๋ค.
ํ๋ง(Pooling)
• ํ๋ง์ ํฉ์ฑ๊ณฑ ์ธต์์ ๋ง๋ ํน์ฑ ๋งต์ ๊ฐ๋ก์ธ๋ก ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ์ญํ ์ ์ํํ๋ค.
• ์๋ฅผ ๋ค์ด (2, 2, 3)ํฌ๊ธฐ์ ํน์ฑ ๋งต์ ํ๋ง์ ์ ์ฉํ๋ฉด ๋ง์ง๋ง ์ฐจ์์ธ ๊ฐ์๋ฅผ ๊ทธ๋๋ก ์ ์งํ๊ณ ๋๋น์ ๋์ด๋ง ์ค์ด๋ค์ด (1, 1, 3)์ด ๋๋ค.
์์ ๊ทธ๋ฆผ์์๋ (2, 2) ํฌ๊ธฐ๋ก ํ๋ง์ ํ๋ค. ํ์ง๋ง ํ๋ง์๋ ๊ฐ์ค์น๊ฐ ์๋ค. ๋์ฅ์ ์ฐ์ ์์ญ์์ ๊ฐ์ฅ ํฐ๊ฐ์ ๊ณ ๋ฅด๊ฑฐ๋(Max pooling), ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ค(Average pooling).
• ํ๋ง์์๋ ๊ฒน์น์ง ์๊ณ ์ด๋ํ๋ค. ํ๋ง์ ํฌ๊ธฐ๊ฐ (2, 2) ์ด๋ฉด ๊ฐ๋ก์ธ๋ก ๋ ์นธ์ฉ ์ด๋ํ๋ค(stride ๊ฐ 2). (3, 3) ํ๋ง์ด๋ฉด ๊ฐ๋ก์ธ๋ก ์ธ ์นธ์ฉ ์ด๋ํ๋ค.(stride ๊ฐ 3)
keras.layers.MaxPooling2D(2)
• MaxPooling2D์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ํ๋ง์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ค. ๋๋ถ๋ถ ํ๋ง์ ํฌ๊ธฐ๋ 2์ด๋ค. ์ฆ, ๊ฐ๋ก์ธ๋ก ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ธ๋ค.
• ๋ง์ ๊ฒฝ์ฐ ํ๊ท ํ๋ง๋ณด๋ค ์ต๋ ํ๋ง์ ๋ง์ด ์ฌ์ฉํ๋ค. ํ๊ท ํ๋ง์ ํน์ฑ ๋งต์ ์๋ ์ค์ํ ์ ๋ณด๋ฅผ (ํ๊ท ํ์ฌ) ํฌ์์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์ ์ ์ฒด ๊ตฌ์กฐ
• ํฉ์ฑ๊ณฑ ์ธต์ ํ์ฑํ ํจ์๋ก ๋ ๋ฃจ ํจ์๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
• ๋ฐ์ง์ธต์์ Flatten ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ 3์ฐจ์ ๋ฐฐ์ด์ 1์ฐจ์์ผ๋ก ํผ์น๋ค. ์ด ๋ฐฐ์ด์ 12๊ฐ์ ์์๋ฅผ ๊ฐ์ง 1์ฐจ์ ๋ฐฐ์ด์ด๊ณ ์ถ๋ ฅ์ธต์ ์
๋ ฅ์ด ๋๋ค.
• ์ถ๋ ฅ์ธต์๋ 3๊ฐ์ ๋ด๋ฐ์ ๋์๋ค. ์ฆ, 3๊ฐ์ ํด๋์ค๋ฅผ ๋ถ๋ฅํ๋ ๋ค์ค ๋ถ๋ฅ ๋ฌธ์ ์ด๋ค.
• ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ(๋๋น, ๋์ด, ๊น์ด)๋ก 3์ฐจ์์ ์ ๋ ฅ์ธต์ด๊ธฐ ๋๋ฌธ์ ํํฐ์ ์ปค๋ ํฌ๊ธฐ๋ 3์ฐจ์์ด ๋๋ค. => ์ปค๋ ๋ฐฐ์ด์ ๊น์ด๋ ํญ์ ์ ๋ ฅ์ ๊น์ด์ ๊ฐ์์ผํ๊ธฐ ๋๋ฌธ
• ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ์ ๋ ฅ์ด๋ ํํฐ์ ์ฐจ์์ด ๋ช ๊ฐ์ธ์ง ์๊ด์์ด ํญ์ ์ถ๋ ฅ์ ํ๋์ ๊ฐ์ด๋ค. ์ฆ, ํน์ฑ ๋งต์ ์๋ ํ ์์๊ฐ ์ฑ์์ง๋ค.
ํฉ์ฑ๊ณฑ ์ธต - ํ๋ง ์ธต ๋ค์์ ๋ค์ ํฉ์ฑ๊ณฑ ์ธต์ด ์ฌ๋๋ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด ์ฒซ ๋ฒ์งธ ํฉ์ฑ๊ณฑ ์ธต์ ํํฐ ๊ฐ์๊ฐ 5๊ฐ๋ผ๊ณ ๊ฐ์ ํ์ฌ ์ฒซ๋ฒ์งธ ํ๋ง ์ธต์ ํต๊ณผํ ํน์ฑ ๋งต์ ํฌ๊ธฐ๊ฐ (4, 4, 5)๋ผ๊ณ ํด๋ณด์.
๋๋ฒ์งธ ํฉ์ฑ๊ณฑ ์ธต์์ ํํฐ์ ๋๋น์ ๋์ด๊ฐ ๊ฐ๊ฐ 3์ด๋ผ๋ฉด ์ด ํํฐ์ ์ปค๋ ํฌ๊ธฐ๋ (3, 3, 5)๊ฐ ๋๋ค. ์๋ํ๋ฉด ์
๋ ฅ์ ๊น์ด์ ํํฐ์ ๊น์ด๋ ๊ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์์ ๊ทธ๋ฆผ์ฒ๋ผ (3 x 3 x 5 = 45 ๊ฐ์ ๊ฐ์ค์น๋ฅผ ๊ณฑํ๊ณ ์ ํธ์ ๋ํ) ์ด ํฉ์ฑ๊ณฑ์ ๊ฒฐ๊ณผ๋ 1๊ฐ์ ์ถ๋ ฅ์ ๋ง๋ ๋ค.
๋๋ฒ์งธ ํฉ์ฑ๊ณฑ ์ธต์ ํํฐ ๊ฐ์๊ฐ 10๊ฐ๋ผ๋ฉด ๋ง๋ค์ด์ง ํน์ฑ ๋งต์ ํฌ๊ธฐ๋ (2, 2, 10)์ด ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์ ๋๋น์ ๋์ด๋ ์ ์ ์ค์ด๋ค๊ณ ๊น์ด๋ ์ ์ ๊น์ด์ง๋ ๊ฒ์ด ํน์ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์ถ๋ ฅ์ธต ์ ์ ํน์ฑ๋งต์ ๋ชจ๋ ํผ์ณ์ ๋ฐ์ง์ธต์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ค.
๐ก ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์ ํํฐ๋ ์ด๋ฏธ์ง์ ์๋ ์ด๋ค ํน์ง์ ์ฐพ๋๋ค๊ณ ์๊ฐํ ์ ์๋ค. ์ฒ์์๋ ๊ฐ๋จํ ๊ธฐ๋ณธ์ ์ธ ํน์ง(์ง์ , ๊ณก์ ๋ฑ)์ ์ฐพ๊ณ ์ธต์ด ๊น์ด์ง์๋ก ๋ค์ํ๊ณ ๊ตฌ์ฒด์ ์ธ ํน์ง์ ๊ฐ์งํ ์ ์๋๋ก ํํฐ์ ๊ฐ์๋ฅผ ๋๋ฆฐ๋ค. ๋ ์ด๋ค ํน์ง์ด ์ด๋ฏธ์ง์ ์ด๋ ์์น์ ๋์ด๋๋ผ๋ ์ฝ๊ฒ ๊ฐ์งํ ์ ์๋๋ก ๋๋น์ ๋์ด ์ฐจ์์ ์ ์ ์ค์ฌ๊ฐ๋ค.
์ด๋ ๊ฒ ํฉ์ฑ๊ณฑ ์ธต๊ณผ ํ๋ง ์ธต์ ๊ฑฐ์ ํญ์ ํจ๊ป ์ฌ์ฉ๋๋ค. ํฉ์ฑ๊ณฑ ์ธต์์ ์ ๋ ฅ์ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ฉฐ ๊ฐ ํํฐ๊ฐ ์ถ์ถํ ํน์ฑ ๋งต์ ์ถ๋ ฅํ๋ฉด ํ๋ง ์ธต์์ ํน์ฑ ๋งต์ ๊ฐ๋ก์ธ๋ก๋ฅผ ์ค์ธ๋ค.
Keras ์ด์ฉํด์ ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง ๋ง๋ค๊ธฐ
model = keras.Sequential()
model.add(keras.layers.Conv2D(32, kernel_size=3, activation = 'relu', padding = 'same', input_shape=(28,28,1)))
๋ชจ๋ธ์ add() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ธต์ ํ๋์ฉ ์ถ๊ฐํ ์ ์๋ค.
์ด ํฉ์ฑ๊ณฑ ์ธต์ 32๊ฐ์ ํํฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ปค๋์ ํฌ๊ธฐ๋ (3,3)์ด๊ณ ๋ ๋ฃจ ํ์ฑํ ํจ์์ ์ธ์ ํจ๋ฉ์ ์ฌ์ฉํ๋ค.
์์ ์ฐ๊ฒฐ ์ ๊ฒฝ๋ง์์์ฒ๋ผ ์ผ๋ผ์ค ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ์ฒซ ๋ฒ์งธ ์ธต์์ ์
๋ ฅ์ ์ฐจ์์ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค.
๊ทธ ๋ค์ ํ๋ง ์ธต์ ์ถ๊ฐํ๋ค.
model.add(keras.layers.MaxPooling2D(2))
(2,2) ํ๋ง์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋น์ ๋์ด๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ๋ค. ํฉ์ฑ๊ณฑ ์ธต์์ 32๊ฐ์ ํํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด ํน์ฑ ๋งต์ ๊น์ด๋ 32๊ฐ ๋๋ค. ๋ฐ๋ผ์ Maxpooling ์ ํต๊ณผํ ํน์ฑ ๋งต์ ํฌ๊ธฐ๋ (14, 14, 32)๊ฐ ๋๋ค.
๋ ๋ฒ์งธ ํฉ์ฑ๊ณฑ-ํ๋ง ์ธต
model.add(keras.layers.Conv2D(64, kernel_size=3, activation='relu', padding='same'))
model.add(keras.layers.MaxPooling2D(2))
์ธ์ ํจ๋ฉ์ ์ด์ฉํ์ฌ ์ ๋ ฅ์ ๊ฐ๋ก ์ธ๋ก ํฌ๊ธฐ๋ ์ค์ด์ง ์์์ง๋ง ํ๋ง ์ธต์์ ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ธ๋ค. ์ฆ, ํน์ฑ ๋งต์ ํฌ๊ธฐ๋ (7, 7, 64)๊ฐ ๋๋ค.
์ด์ ์ด 3์ฐจ์ ํน์ฑ ๋งต์ ์ผ๋ ฌ๋ก ํผ์น ์ฐจ๋ก์ด๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ๋ง์ง๋ง์ 10๊ฐ์ ๋ด๋ฐ์ ๊ฐ์ง (๋ฐ์ง) ์ถ๋ ฅ์ธต์์ ํ๋ฅ ์ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๊ธฐ์์๋ ํน์ฑ ๋งต์ ์ผ๋ ฌ๋ก ํผ์ณ์ ๋ฐ๋ก ์ถ๋ ฅ์ธต์ ์ ๋ฌํ์ง ์๊ณ ์ค๊ฐ์ ํ๋์ ๋ฐ์ง ์๋์ธต์ ํ๋ ๋ ๋ ์ ์๋ค. ์ฆ, Flatten ํด๋์ค ๋ค์์ Dense ์๋์ธต, ๋ง์ง๋ง์ผ๋ก Dense ์ถ๋ ฅ์ธต์ ์์๋๋ก ๊ตฌ์ฑํ๋ค.
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(100, activation='relu')
model.add(keras.layers.Dropout(0.4))
model.add(keras.layers.Dense(10, activation='softmax'))
๋๋กญ์์ ์ธต์ด ์๋์ธต์ ๊ณผ๋์ ํฉ์ ๋ง์ ์ฑ๋ฅ์ ์กฐ๊ธ ๋ ๊ฐ์ ํด์ค ๊ฒ์ด๋ค. ์์ ์ฝ๋๋ ํด๋์ค 10๊ฐ๋ฅผ ๋ถ๋ฅํ๋ ๋ค์ค ๋ถ๋ฅ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์ธต์ ํ์ฑํ ํจ์๋ ์ํํธ๋งฅ์ค๋ฅผ ์ฌ์ฉํ๋ค.
์, ์ด์ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ์ ๊ฐ์๋ฅผ ๊ณ์ฐํด๋ณด์.
์ฒซ ๋ฒ์งธ ํฉ์ฑ๊ณฑ ์ธต์ 32๊ฐ์ ํํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ํฌ๊ธฐ๊ฐ (3, 3), ๊น์ด๊ฐ 1์ด๋ค. ๋ ํํฐ๋ง๋ค ํ๋์ ์ ํธ์ด ์๋ค.
๋ฐ๋ผ์ ์ด 3 x 3 x 1 x 32 + 32 = 320๊ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค.
๋ ๋ฒ์งธ ํฉ์ฑ๊ณฑ ์ธต์ 64๊ฐ์ ํํฐ๋ฅผ ์ฌ์ฉํ๊ณ ํฌ๊ธฐ๊ฐ (3, 3), ๊น์ด๊ฐ 32์ด๋ค. ๋ ํํฐ๋ง๋ค ํ๋์ ์ ํธ์ด ์๋ค.
๋ฐ๋ผ์ ์ด 3 x 3 x 32 x 64 + 64 = 18,496๊ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค.
Flatten ํด๋์ค์์ (7, 7 ,64) ํฌ๊ธฐ์ ํน์ฑ ๋งต์ 1์ฐจ์ ๋ฐฐ์ด๋ก ํผ์น๋ฉด (3136, ) ํฌ๊ธฐ์ ๋ฐฐ์ด์ด ๋๋ค. ์ด๋ฅผ 100๊ฐ์ ๋ด๋ฐ๊ณผ ์์ ํ ์ฐ๊ฒฐํด์ผ ํ๋ฏ๋ก ์๋์ธต์ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ ๊ฐ์๋ 3,136 x 100 + 100 = 313,700๊ฐ ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ๋ฉด ๋ง์ง๋ง ์ถ๋ ฅ์ธต์ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ ๊ฐ์๋ 1,010๊ฐ ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ ์ธต์ ๊ตฌ์ฑ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ ์ ์๋ค.
keras.utils.plot_model(model, show_shapes=True)
๋ชจ๋ธ ์ปดํ์ผ๊ณผ ํ๋ จ
model.compile(optimize='adam', loss='sparse_categorical_crossentropy', metrics='accuracy')
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-cnn-model.h5', save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=2, restore_best_weights=True)
history = model.fit(train_scaled, train_target, epochs=20, validation_data=(val_scaled, val_target), callbacks=[checkpoint_cb, early_stopping_cb])
• ModelCheckpoint๋ ํ์ต ์ค ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ๊ฐ์ค์น(weights) ๋๋ ์ ์ฒด ๋ชจ๋ธ์ ์ ์ฅํ๋ ์ญํ ์ ํ๋ค.
• EarlyStopping ์ ๋ชจ๋ธ์ด ๋ ์ด์ ๊ฐ์ ๋์ง ์๋๋ค๊ณ ํ๋จ๋๋ฉด, ํ์ต์ ์กฐ๊ธฐ ์ข
๋ฃํ๋ ์ญํ ์ ํ๋ค.
'๐AI > DeepLearning_WIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DL/WIL] 3 ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๊ณต ์ ๊ฒฝ๋ง (0) | 2024.11.23 |
---|