์บ๊ธ(Kaggle)์์ ๋ฐ์ดํฐ์ ์ ์ ๋ถ ๋ค์ด๋ฐ๊ณ , smallํด๋๋ฅผ ๋ง๋ค์ด์ train data, validation data, test data๋ฅผ ๊ฐ์์ง์ ๊ณ ์์ด ๊ฐ๊ฐ 1000์ฅ, 500์ฅ, 500์ฅ์ ๋ถ๋ฆฌํด ์ด 4์ฒ์ฅ์ ์ฌ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค์ต์ ํ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ธ์จ ์ฌ์ง ๋ฐ์ดํฐ๋ค์ ๋คํธ์ํฌ์ ๋ฃ๊ธฐ ์ํด ๋ถ๋ ์์ ํ์ ์ ํ ์๋ก ์ ์ฒ๋ฆฌ ํ๋ค.
์ผ๋ผ์ค์์ ์ ๊ณต๋๋ ImageDataGenerator์ ์ด๋ฏธ์ง ํ์ผ์ ์ ์ฒ๋ฆฌ๋ ๋ฐฐ์น ํ ์๋ก ๋ฐ๊พธ์ด์ฃผ๋ ์ ๋๋ ์ดํฐ๋ฅผ ๋ง๋๋ ํด๋์ค์ด๋ค. ์ฆ, ์ฌ์ง ํ์ผ์ ์ฝ๊ณ , ํ์ ์ RGB ํฝ์ ๊ฐ์ผ๋ก ๋์ฝ๋ฉํ๊ณ , ๋ถ๋ ์์ํ์ ์ ํ ์๋ก ๋ณํํ์ฌ ํฝ์ ๊ฐ์ ์ค์ผ์ผ์ 0~255์์ 0~1๋ก ์กฐ์ ํ๋ ๊ณผ์ ์ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ช ๋ น์ด์ด๋ค.
๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ floatํ์ผ๋ก 255๋ก ๋๋์ด ์ค์ผ์ผ์ 0~1๋ก ์กฐ์ ํ ๊ฐ์ด datagen ๋ณ์์ด๋ค.
Train_dir์ ํ๊น ๋๋ ํ ๋ฆฌ๋ก ์ค์ ํ๊ณ , ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ 150 * 150 ํฌ๊ธฐ๋ก ๋ณ๊ฒฝํ๊ณ , batch_size๋ 20์ผ๋ก, loss๋ binary_crossentropy๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ด์ง๋ ์ด๋ธ์ด ํ์ํด์ binary๋ก ์ค์ ํ๋ค.
๋ฐฐ์น ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ 4์ฐจ์ ํ ์๊ฐ์ด๊ณ , ๋ฐฐ์น ๋ ์ด๋ธ ํฌ๊ธฐ๋ 1์ฐจ์ ํ ์๊ฐ์ด๋ค. ์ ๋๋ ์ดํฐ๋ ๋ฌธํ ๋ฃจํ์ด๊ธฐ์ break์ ์ค์ ํ์ฌ ์ข ๋ฃ์์ผ์ฃผ์ด์ผ ํ๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ์ฒ๋ฆฌ ํ์์ผ๋ ๋จผ์ , ๊ต์ฌ์์ ๋์จ ๋ชจ๋ธ๊ณผ ๋์ผํ ๋ชจ๋ธ์ ์ ์ํ์๋ค.
Conv2D์ MaxPooling2D์ธต์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ๋ ์ด์ด๋ฅผ ๊ตฌ์ฑํ์ฌ Convnet์ ์ ์ํ๋ค.
์ด์ ๊น์ง ๋ชจ๋ธ์์๋ 3์ฐจ์ ํ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ์ ๋ฃ๊ธฐ์ํด์๋ 1์ฐจ์ ๋ฐ์ดํฐ๋ก ๋ฐ๊พธ์ด ๋ฃ์ด์ฃผ์๋๋ฐ, ์ด๋ ๊ฒํ๋ฉด ๋ฐ์ดํฐ์ ํ์์ด ๋ฌด์๋๋ค. ์ฆ, ๊ฐ๊น์ด ํฝ์ ์ ๊ฐ์ ๋น์ทํ๊ฑฐ๋, RGB ๊ฐ ์ฑ๋์ ๋ฐ์ ํ ๊ด๋ จ์ฑ ๋ฑ ์ด๋ฏธ์ง๋ 3์ฐจ์ ๊ณต๊ฐ์์ ์ฌ๋ฌ ์ ๋ณด๋ค์ด ๋ดํฌ๋์ด์๋๋ฐ ์ด๋ฌํ ๊ณต๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ฌด๋์ง๊ฒ ๋๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ 3์ฐจ์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ์ ๋ ฅ์ธต์ ๋ฐ์ผ๋ฉฐ ์ถ๋ ฅ๋ 3์ฐจ์ ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ถ๋ ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด ํฉ์ฑ๊ณฑ์ธต์ด๋ค.
ํฉ์ฑ๊ณฑ์ธต์ ๋ด๋ฐ์ ์ ๋ ฅ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ์ ์ฐ๊ฒฐ๋์ง ์๊ณ , ํํฐ์์ ์๋ ํฝ์ ์๋ง ์ฐ๊ฒฐ์ด ๋์ด ์ ์์ค ํน์ฑ์์ ๊ณ ์์ค ํน์ฑ์ผ๋ก ์กฐํฉํ๋ฉฐ ๋๊ฐ๊ฒ ๋๋ค. ์ด ํํฐ๋ ํฉ์ฑ๊ณฑ์ธต์ ๊ฐ์ค์น๊ฐ ๋์ด ํน์ฑ๋งต์ ์ถ๋ ฅํ๋ฉด์ ๋ค์ ๋ ์ด์ด๋ก ์ ๋ฌ๋๋ค.
ํฉ์ฑ๊ณฑ์ธต์ ๊ฑฐ์น๋ฉด ํ๋ง์ธต์ผ๋ก ๊ฐ๊ฒ ๋๋๋ฐ, ๋ชจ๋ธ์ ์ ์ฒด ๋งค๊ฐ๋ณ์์ ์๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ ์ด์ด์ด๋ค. ์ฌ๊ธฐ์๋ ํด๋น์์ญ์์ ์ต๋๊ฐ์ ์ฐพ๋ MaxPooling์ ์ฌ์ฉํ์๋ค. ํ๋ง์ ๊ณ์ฐ๋ ํน์ง์ด ์ด๋ฏธ์ง ๋ด์ ์์น์ ๋ํ ๋ณํ์ ๋ํด ์ํฅ์ ๋ ๋ฐ๋๋ค. ์ฆ, ํ๋ง์ ์ฌ์ฉํ์ฌ ๋ถ๋ณ์ฑ์ ์ฐพ์๋ด๊ณ ์ด๋ฏธ์ง์ ๊ณต๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์งํค๋ ๊ฒ์ด๋ค.
input_shape๋ฅผ (150, 150, 3)์ผ๋ก ์ค์ ํ์๋ค. ์ด๋ ํ์ฌ ์ ๋ ฅ๋ฐ๋ ์ด๋ฏธ์ง์ ๊ธธ์ด์ ๋์ด๊ฐ ๊ฐ 150์ด๋ฉฐ, RGB์ด๊ธฐ์ 3์ฑ๋์ ๊ฐ์ง๊ธฐ์ ๊ทธ๋ ๋ค. ์ด๋ฌํ ์ ๋ ฅ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ํฉ์ฑ๊ณฑ์ธต์ผ๋ก ๊ฐ๋ค. ํฉ์ฑ๊ณฑ์ธต์์ filter์ 3*3, stride๋ฅผ 1๋ก ์ค์ ํ์ฌ ๋๋ฆฌ๋ฉด ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ 148*148๋ก ์ค์ด๋ค๊ณ ์ธต์ 32๊ฐ๋ก ๊น์ด์ง๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ MaxPooling์ ์ฌ์ฉํ๋ ํ๋ง์ธต์ผ๋ก ์ ๋ฌํ์ฌ 2*2 ํฌ๊ธฐ์ ์๋์ฐ๋ก ์ค์ ํ์ฌ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ธ๋ค. ํ๋ง ์๋์ฐ ํฌ๊ธฐ๋ง ์ ์ํ๊ธฐ์ strides๋ ๋ํดํธ ๊ฐ์ธ ํ๋ง ์๋์ฐ ์ฌ์ด์ฆ๋งํผ ์ด๋ํ์ฌ ๋ฐ์ผ๋ก ์ค์ด๋๋ ๊ฒ์ด๋ค. ์ด๋ฐ์์ผ๋ก ์ด 4๋ฒ์ Convnet์ ๊ตฌ์ฑํ์ฌ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ 7*7๋ก, ๊น์ด(์ธต)๋ 128๋ก ์ฆ๊ฐํ์๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ ๋ ฅ ๋ฐ์ดํฐ๋ Flatten() ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์๋ ๊ณ์ฐ์ํจ๋ค. ํ์ฌ ์ ๋ ฅ ๋ฐ์ดํฐ๋ 7*7 ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ง๊ณ 128์ ๊น์ด๋ฅผ ๊ฐ์ก์ผ๋ ์ ๋ ฅ ๋ฐ์ดํฐ ๊ฐ์๋ 6272์ด ๋๋ค. ์ด๋ฅผ ์ด์ง ๋ถ๋ฅ๋ฅผ ํ๊ธฐ ์ํด Reluํจ์๋ฅผ ์ฌ์ฉํ๋ ํ๋์ ๋ ์ด์ด๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ 512๊ฐ๋ก ์ค์ธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์์ง or ๊ณ ์์ด ์ด๊ธฐ์ ๋ง์ง๋ง ์ถ๋ ฅ ์์ํ์ 1๋ก ์ค์ ํ๊ณ sigmoidํจ์๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆผ์์ ๋ณด์ด๋ค ์ถ์ด Flatten์ธต ์ดํ Fully Connected layer๋ก ๊ตฌ์ฑ๋๋ค.
์ด์ ๋ชจ๋ธ์ ์ ์ํ์์ผ๋ ๋ชจ๋ธ์ ํ์ต์์ผ๋ณธ๋ค.
์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด fit ๋ฉ์๋์ ๋์ผํ fit_generator์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๋ จ์์ผฐ๋ค.
Step_per_epoch๋งํผ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์คํํ๊ณ ๋ค์ ์ํฌํฌ๋ก ๋์ด๊ฐ๋ค. 20๊ฐ์ ์ํ์ ํ๋์ ๋ฐฐ์น ์ฌ์ด์ฆ๋ก ์ค์ ํ์์ผ๋ 2000๊ฐ์ ํ๋ จ์ฉ ๋ฐ์ดํฐ ์ํ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด steps_per_epoch๋ 100์ผ๋ก, 100๊ฐ์ ๋ฐฐ์น๋ก ์ค์ ํ๋ค.
Validation_data ๋ํ ์ ๋๋ ์ดํฐ๋ก ์ ๋ฌํ๊ธฐ์ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ๋ฐฐ์น๊ฐ ๋ฌดํ๋ฒ ๋ฐํ๋๋ค. ๋ฐ๋ผ์ validation_steps๋ฅผ ์ง์ ํ์ฌ 50๋ฒ๋ง ๋ฐํ๋๊ฒ ์ค์ ํ๋ค.
Epochs๊ฐ 5 ์ดํ๋ก overfitting์ด ๋์๊ณ , ๊ฒ์ฆ ์ ํ๋๋ ์ฝ 71%๊ฐ ๋์๋ค. loss๋ํ epoch๊ฐ ๋์๋ก ์ ์ ํฌ๊ฒ ์ฆ๊ฐ๋์๋ค. ์ ํํ ์ธก์ ์ ํด๋ณด๊ธฐ์ํด ๊ฒฐ๊ณผ์ฐฝ์ ํ์ธํด๋ณด์๋ค.
๊ทธ ํ, ์ ํ๋๋ฅผ ์ฌ๋ฆฌ๊ธฐ์ํด ๋ชจ๋ธ์ ์์ ํด๋ณด์๋ค. ์ ๊ฒฐํฉ์ธต์ ๋ ์ด์ด๋ฅผ ํ๋ ๋ ์ถ๊ฐํ์๊ณ , ๊ฐ ํฉ์ฑ๊ณฑ๋ ์ด์ด์ ๊น์ด๋ฅผ 32, 32, 64, 256์ผ๋ก ๋ฐ๊พธ์๋ค.
์ด๋ ๊ฒ ๋ชจ๋ธ์ ๋ง๋ค๊ณ , ํ์ต์ ์ํด compile ๋ฐฉ์์์ ์ตํฐ๋ง์ด์ ๋ฅผ RMSprop์์ Adam์ผ๋ก ์ค์ ํ์ฌ ํ์ต์ ์งํํ์๋ค.
์ ํ๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊พธ์คํ 70% ~ 75%์ฌ์ด๋ก ๋ง์์ง๋ง, ๊ฒ์ฆ ์์ค๊ฐ์ด ํฐ ๊ฒ์ผ๋ก ๋ณด์, ์ ์ฒด ๋ฐ์ดํฐ์ ๋ํด ์์ธก์ ์ด์ ๋ณด๋ค ์กฐ๊ธ์ด๋๋ง ์์นํ์ง๋ง, ์ค์ฐจ์ ๋ฒ์๊ฐ ๊ธ๊ฒฉํ๊ฒ ์ฆ๊ฐํ์ฌ ์์ค์ด ํฌ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
์ด์ ๋ชจ๋ธ๊ณผ ๋น๊ตํด์ ๋ ์ด์ด์ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ๋ ์ด์ด์์ ๋งค๊ฐ๋ณ์๋ค๋ฅผ ์กฐ์ ํ๊ณ , ์ตํฐ๋ง์ด์ ๋ฅผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ด๋ ์ ํ๋๊ฐ 72% ๋๋ ๊ฒ์ผ๋ก ๋ณด์, ํฐ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ ์์๋ค. ๋ฐ๋ผ์ ๊ณผ๋์ ํฉ์ ๊ฐ์์ํค๊ณ ์ ํ๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ ์ฆ์์ ์ฌ์ฉํ๊ฑฐ๋ ๋๋กญ์์ ๋ฑ์ ์จ์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ํ์ตํด์ผ ์ ํ๋๊ฐ ๋์ฑ ํฅ์๋ ๊ฒ์ด๋ผ ํ๋จ์ ํ์๊ณ , ๋ ํ์คํ๊ณ ์ฝ๊ฒ ์ ํ๋๋ฅผ ์ฌ๋ฆฌ๊ธฐ ์ํด์๋ ์ฌ์ ํ๋ จ๋ ๋คํธ์ํฌ๋ฅผ ํ๋ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ง๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์๋ค.
๋ค์ ๊ฒ์๊ธ์ ๋ฐ์ดํฐ ์ฆ์๊ณผ VGG16์ ์ฌ์ฉํ ๋ฏธ์ธ์กฐ์ , ํ์ต๋๊ฒฐ์ ๋ํด ์ ์ด๋ณผ๋ คํ๋ค.