๋ฐ์ดํฐ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
์ฌ๋ฌ๋ถ, ๋ฅ๋ฌ๋ ๊ณต๋ถํ๋ค ๋ณด๋ฉด '๋ฐ์ดํฐ์
'์ด๋ผ๋ ๋ง์ ์ ๋ง ์์ฃผ ๋ฃ๊ฒ ๋ฉ๋๋ค. ๋ฐ์ดํฐ์
(Dataset)์ด๋ ๋ง ๊ทธ๋๋ก '๋ฐ์ดํฐ๋ค์ ์งํฉ'์ด์์. ๋ง์ด ์ด๋ ต์ง, ๊ทธ๋ฅ ๋จธ์ ๋ฌ๋์ด๋ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ด ํ์ตํ๊ฑฐ๋ ํ๊ฐํ ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๋ชจ์์ด๋ผ๊ณ ๋ณด๋ฉด ๋ผ์.
์ฝ๊ฒ ์๋ฅผ ๋ค์ด๋ณผ๊น์? ํ์์ด ์ํ๊ณต๋ถ๋ฅผ ํ ๋ ๋ฌธ์ ์ง์ ํ์์์. ์ฌ๊ธฐ์ ๋ฌธ์ ์ง์ด ๋ฐ๋ก ๋ฐ์ดํฐ์
์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ ๋์ค ๊ฑฐ์์. ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๊ณต๋ถ(ํ์ต)๋ฅผ ํ๊ณ , ๋ชจ์๊ณ ์ฌ(๊ฒ์ฆ)๋ฅผ ๋ณด๋ฉด์ ์ค๋ ฅ์ ์ฒดํฌํ๊ณ , ๋ง์ง๋ง์ผ๋ก ์ํ(ํ
์คํธ)์ ์น๋ ๊ฑฐ์ฃ !
๋ฐ์ดํฐ์ ์ ์ข ๋ฅ: ํ์ต, ๊ฒ์ฆ, ํ ์คํธ
๋จธ์ ๋ฌ๋๊ณผ ๋ฅ๋ฌ๋์์๋ ๋ฐ์ดํฐ๋ฅผ ํ ๊ฐ์ง๋ก๋ง ์ฌ์ฉํ์ง ์์์. **์ด ์ธ ๊ฐ์ง ๋ฐ์ดํฐ์ **์ผ๋ก ๋๋ ์ ์ฌ์ฉํด์.
๋ฐ์ดํฐ์ ์ข ๋ฅ | ์ค๋ช | ์์ |
---|---|---|
ํธ๋ ์ด๋ ๋ฐ์ดํฐ์ | ๋ชจ๋ธ์ด ์ค์ ๋ก ํ์ตํ ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ | train_images, train_labels |
๊ฒ์ฆ ๋ฐ์ดํฐ์ | ํ์ต ์ค ๋ชจ๋ธ์ด ์ ๋ฐฐ์ฐ๊ณ ์๋์ง ํ์ธ | val_images, val_labels |
ํ ์คํธ ๋ฐ์ดํฐ์ | ๋ชจ๋ธ ํ์ต ์๋ฃ ํ ์ต์ข ์ฑ๋ฅ ํ๊ฐ | test_images, test_labels |
Validation ๋ฐ์ดํฐ์ ์ค์์ฑ
๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ ํนํ ๋ฅ๋ฌ๋์์ ์ค์ํ ์ญํ ์ ํด์. ๋จ์ํ ๋ชจ๋ธ์ ํ์ต์ํค๋ ๊ฒ์์ ๊ทธ์น์ง ์๊ณ , ๋ชจ๋ธ์ด ์ ๋ฐฐ์ฐ๊ณ ์๋์ง ์ค๊ฐ์ ๊ณ์ ์ฒดํฌํ๋ ๊ฑฐ์ฃ . ์ ์ค์ํ ๊น์? ๋ฐ๋ก ๊ณผ์ ํฉ(overfitting)์ ๋ฐฉ์งํ๊ธฐ ์ํด์์์.
- ๊ณผ์ ํฉ ๋ฐ์ ์ฌ๋ถ๋ฅผ ์กฐ๊ธฐ์ ํ์ธ
- ํ์ต์ด ์ ๋๊ณ ์๋์ง ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
- ํ์ดํผํ๋ผ๋ฏธํฐ(ํ์ต๋ฅ , ๋ฐฐ์น์ฌ์ด์ฆ ๋ฑ) ํ๋์ ํ์ฉ
- ์ฑ๋ฅ์ด ๋จ์ด์ง๊ธฐ ์์ํ๋ฉด ์กฐ๊ธฐ ์ข ๋ฃ(Early Stopping) ๊ฐ๋ฅ
๋ฅ๋ฌ๋ ๋ชจ๋ธ ์ฝ๋ ๋ถ์
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฅ๋ฌ๋ ๋ชจ๋ธ ์ฝ๋๋ฅผ ๋ถ์ํด๋ณผ๊น์? ์ฌ๋ฌ๋ถ์ด ์์ฑํ ์ฝ๋๋ Keras์ Sequential API๋ฅผ ์ฌ์ฉํ ๊ฐ๋จํ ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ด์์. ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณผ๊ฒ์!
์ฝ๋ ๋ผ์ธ๋ณ ์์ธ ์ค๋ช
์ฝ๋ | ์ค๋ช |
---|---|
from tensorflow import keras from tensorflow.keras import layers |
TensorFlow์ Keras API์ ๋ ์ด์ด ๊ด๋ จ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ |
network = models.Sequential() | Sequential ๋ชจ๋ธ ์์ฑ (์ธต์ ์์ฐจ์ ์ผ๋ก ์๋ ๊ตฌ์กฐ) |
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) | ์ ๋ ฅ์ธต + ์ฒซ ๋ฒ์งธ ์๋์ธต, ๋ ธ๋ 512๊ฐ, ํ์ฑํ ํจ์ ReLU |
network.add(layers.Dense(256, activation='relu')) | ๋ ๋ฒ์งธ ์๋์ธต, ๋ ธ๋ 256๊ฐ, ReLU ์ฌ์ฉ |
network.add(layers.Dense(128, activation='relu')) | ์ธ ๋ฒ์งธ ์๋์ธต, ๋ ธ๋ 128๊ฐ, ReLU ์ฌ์ฉ |
network.add(layers.Dense(10, activation='softmax')) | ์ถ๋ ฅ์ธต, ๋ ธ๋ 10๊ฐ, ๋ค์ค ๋ถ๋ฅ๋ฅผ ์ํ Softmax ์ฌ์ฉ |
๋ง๋ฌด๋ฆฌ ๋ฐ ํต์ฌ ์์ฝ
์ฌ๊ธฐ๊น์ง ์ ๋ฐ๋ผ์ค์ จ๋์? ๐ ์ค๋ ๋ฐฐ์ด ๋ด์ฉ์ ํ๋์ ์ ๋ฆฌํด๋ณผ๊ฒ์!
- ๋ฐ์ดํฐ์ ์ ํ์ต, ๊ฒ์ฆ, ํ ์คํธ ๋ฐ์ดํฐ์ ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- ๊ฒ์ฆ ๋ฐ์ดํฐ๋ ๊ณผ์ ํฉ ๋ฐฉ์ง์ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์ ์ค์ํ๋ค.
- Sequential ๋ชจ๋ธ์ ์์ฐจ์ ์ผ๋ก ์ธต์ ์๋ ๋ฐฉ์์ด๋ค.
- ReLU์ Softmax๋ ๊ฐ๊ฐ ์๋์ธต๊ณผ ์ถ๋ ฅ์ธต์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
๊ฐ ๋ฐ์ดํฐ์ ์ ๋ชจ๋ธ ํ์ต, ๊ฒ์ฆ, ์ต์ข ํ๊ฐ๋ผ๋ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ด์. ํ๋๋ก๋ง ์ฌ์ฉํ๋ฉด ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ ํํ ํ๊ฐํ ์ ์์ด์.
๋ค, ๊ฒ์ฆ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ณผ์ ํฉ ์ฌ๋ถ๋ฅผ ์๊ธฐ ์ด๋ ค์์. ๋ชจ๋ธ์ด ํ์ต ๋ฐ์ดํฐ๋ง ์ ์ธ์ฐ๊ณ ์๋์ง ์๋์ง ํ๋จํ๋ ค๋ฉด ๊ผญ ํ์ํฉ๋๋ค.
๋ค, Keras์๋ Functional API๋ Subclassing API ๊ฐ์ ๋ค์ํ ๋ชจ๋ธ ์์ฑ ๋ฐฉ์์ด ์์ด์. ๋ ๋ณต์กํ ๋คํธ์ํฌ ๊ตฌ์กฐ๊ฐ ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
Softmax๋ ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์์ ๊ฐ ํด๋์ค์ ๋ํ ํ๋ฅ ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด์์. ํ๋ฅ ํฉ์ด 1์ด ๋๋๋ก ๋ง๋ค์ด์ค๋๋ค.
ReLU๋ ๊ณ์ฐ์ด ๋น ๋ฅด๊ณ , ๋ฅ๋ฌ๋์์ ๋ฐ์ํ๋ ๊ธฐ์ธ๊ธฐ ์์ค ๋ฌธ์ ๋ฅผ ์ํํ๋ ๋ฐ ํจ๊ณผ์ ์ด์ด์ ๋๋ฆฌ ์ฐ์ฌ์.
๋ชจ๋ธ์ ์ฒซ ๋ฒ์งธ ์ธต์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํํ๋ฅผ ์์์ผ ํ๋๊น์! ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ช ์ฐจ์์ธ์ง ์๋ ค์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์ค๋ ์ด๋ ๊ฒ ๋ฐ์ดํฐ์ ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๋ฅ๋ฌ๋ ์ฝ๋๊น์ง ํจ๊ป ์์๋ดค์ด์! ์ฒ์์ ์กฐ๊ธ ์ด๋ ค์ธ ์ ์์ง๋ง, ์์ฃผ ์ ํ๋ค ๋ณด๋ฉด ๋ถ๋ช ์ต์ํด์ง ๊ฑฐ์์. ์์ผ๋ก๋ ํจ๊ป ๋ฅ๋ฌ๋ ์ฌ์ ์ ์ด์ด๊ฐ๋ฉฐ ๋ ๊น์ด ์๋ ๋ด์ฉ๋ ๋ค๋ค๋ณผ๊ฒ์. ํน์ ๊ถ๊ธํ ์ ์ด๋ ๋ ์๊ณ ์ถ์ ์ฃผ์ ๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์. ๐ ์ฌ๋ฌ๋ถ์ ์ฑ์ฅ์ด ์ ์ ๊ธฐ์จ์ ๋๋ค!