๐ฉ ๋ฅ๋ฌ๋๊ณผ ์ธ๊ณต ์ ๊ฒฝ๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ณ ํ ์ํ๋ก๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ ์ธ๊ณต ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ง๋ค์ด ๋ด ์๋ค.
[์ธ๊ณต์ง๋ฅ/ํผ๊ณต๋จธ์ ] 07-1. ์ธ๊ณต ์ ๊ฒฝ๋ง (1)
๐ฉ ๋ฅ๋ฌ๋๊ณผ ์ธ๊ณต ์ ๊ฒฝ๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ณ ํ ์ํ๋ก๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ ์ธ๊ณต ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ง๋ค์ด ๋ด ์๋ค. ํจ์ MNIST ๋ฐ์ดํฐ์ ๐ ๋ฅ๋ฌ๋์์๋ MNIST ๋ฐ์ดํฐ์ ์ด ์ ๋ช ํฉ๋๋ค. ๐ MNIST : ์์ผ
avoc-o-d.tistory.com
์ธ๊ณต ์ ๊ฒฝ๋ง (= ๋ฅ๋ฌ๋)
ํจ์ ์์ดํ ๋ถ๋ฅ ๋ฌธ์ ๋ฅผ ์ธ๊ณต ์ ๊ฒฝ๋ง์ผ๋ก ํํํด๋ณด์๋ฉด, ๋ก์ง์คํฑ ํ๊ท๋ฅผ ํํํ ๊ทธ๋ฆผ๊ณผ ๋งค์ฐ ๋น์ทํฉ๋๋ค.
โจ๊ฐ์ฅ ๊ฐ๋จํ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ์๋์ ๊ฐ์ด ์ถ๋ ฅ์ธต 1๊ฐ๊ฐ ์๋ ์ ๊ฒฝ๋ง์ ๋๋ค.
- 10๊ฐ์ ํจ์ ์์ดํ ํด๋์ค : 10๊ฐ์ ๋ด๋ฐ
- z_ํฐ์ ์ธ , z_๋ฐ์ง, ... : z1, z2, ...
- ํฝ์ 1, ํฝ์ 2, ... : x1, x2, ...
- z1์ ๋ง๋ค๊ธฐ ์ํด x1์ ๊ณฑํด์ง๋ ๊ฐ์ค์น w1,1, z2๋ฅผ ๋ง๋ค๊ธฐ ์ํด x1์ ๊ณฑํด์ง๋ ๊ฐ์ค์น w1,2, ...
- ๊ฐ ์ ๋์ ๋ง๋ค๊ธฐ ์ํด, ๊ฐ ๋ค๋ฅธ ๊ฐ์ค์น๊ฐ ๊ณฑํด์ง.
- b1, b2, ... ์ ํธ์ ๊ผญ ๋ํด์ง๊ธด ํ์ง๋ง, ๋งค๋ฒ ํ๊ธฐํ๊ธฐ ๊ท์ฐฎ์ผ๋ ์๋ตํ๊ธฐ๋ ํจ
๐ ์ถ๋ ฅ์ธต : z1~z10 ์ ๊ณ์ฐํ๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ํด๋์ค๋ฅผ ์์ธก
๐ ์ ๋ ฅ์ธต : ์ ๋ ฅ ๋ฐ์ดํฐ ๊ทธ ์์ฒด, ๊ณ์ฐ ์ํ ์ ํจ
๐ ๋ด๋ฐ : z ๊ฐ์ ๊ณ์ฐํ๋ ๋จ์
โถ๏ธ ์ ๋(unit)์ด๋ผ๊ณ ๋ ๋ง์ด ๋ถ๋ฆผ (๋ด๋ฐ์์ ์ผ์ด๋๋ ์ผ์ ์ ํ ๊ณ์ฐ๋ฐ์ ์์ด์)
๋งค์ปฌ๋ฌ-ํผ์ธ ๋ด๋ฐ
์ธ๊ณต ์ ๊ฒฝ๋ง์ 1943๋ ์๋ฐ ๋งค์ปฌ๋ฌ์ ์ํฐ ํผ์ธ ๊ฐ ์ ์ํ ๋ด๋ฐ ๋ชจ๋ธ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋๋ค.
์ด๋ฌํ ์ธ๊ณต ๋ด๋ฐ์ ์๋ฌผํ์ ๋ด๋ฐ์ผ๋ก๋ถํฐ ์๊ฐ์ ์ป์์ต๋๋ค. ๋ฌผ๋ก , ๋ชจ์๋ง ๋ณธ๋ฌ ์ํ ๋ชจ๋ธ์ ๋ถ๊ณผํ ๋ฟ!! ์๋ก ํ๋ ์ผ์ ๋ค๋ฅด๋ค๋ ๊ฒ!!!
๐ ๋ฅ๋ฌ๋ = ์ธ๊ณต์ ๊ฒฝ๋ง
์ฌ์ธต ์ ๊ฒฝ๋ง(deep neural network, DNN)์ ๋ฅ๋ฌ๋์ด๋ผ๊ณ ๋ถ๋ฆ
์ฌ์ธต ์ ๊ฒฝ๋ง์ ์ฌ๋ฌ ๊ฐ์ ์ธต์ ๊ฐ์ง ์ธ๊ณต ์ ๊ฒฝ๋ง
ํ ์ํ๋ก์ ์ผ๋ผ์ค
ํ ์ํ๋ก๋ ๊ตฌ๊ธ์ด 2015๋ 11์ ์คํ์์ค๋ก ๊ณต๊ฐํ ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
๐ค ์ ์ฐ์ง?
๐ก ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ ๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ์ด ๊ฐ์ฅ ๊ฐ๋จํ ์ธ๊ณต ์ ๊ฒฝ๋ง์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ , ์ฑ๋ฅ์ด ์ข์ง ์์์ฃ ! ๊ทธ๋ผ ์ด๋๋ก ์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ง๋ค์ด๋ ์ฑ๋ฅ์ด ์ข์์ง์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๐ค ๊ทธ๋ผ ์ด์ฉ์ง?
๐ก ์ธ๊ณต ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ง๋๋ ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ SGDClassifier ์ ์๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ์ค ์ธ๊ธฐ๊ฐ ๋์ ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ํ ์ํ๋ก๋ฅผ ์ฌ์ฉํ๋ ค ํฉ๋๋ค.
๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ์ ์ค ํ๋๋ ๊ทธ๋ํฝ ์ฒ๋ฆฌ ์ฅ์น์ธ GPU๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ํ๋ จํ๋ค๋ ๊ฒ์ ๋๋ค.
GPU๋ ๋ฒกํฐ์ ํ๋ ฌ ์ฐ์ฐ์ ๋งค์ฐ ์ต์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์, ๊ณฑ์ ๊ณผ ๋ง์ ์ด ๋ง์ด ์ํ๋๋ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ํฐ ๋์์ด ๋ฉ๋๋ค.
ํํธ, ํ ์ํ๋ก๊ฐ ๊ณต๊ฐ๋๊ธฐ ์ ์ ์จ์๋ ธ๋ผ๋ ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์์ต๋๋ค. ๋ฌผ๋ก GPU ์ฐ์ฐ์ด ๊ฐ๋ฅํ์ง๋ง ๋ชจ๋ธ ๊ตฌํ์ด ๊น๋ค๋ก์ ๋ ํ์, ํ๋์์ ์๋ ๊ฐ ๋ํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Wrapper library)๋ก ์ผ๋ผ์ค๋ผ๋ ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ฆ, ์ผ๋ผ์ค๋ ์ง์ GPU ์ฐ์ฐ์ ์ํํ์ง ์์ต๋๋ค. ๋์ GPU ์ฐ์ฐ์ ์ํํ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์จ์๋ ธ)๋ฅผ ๋ฐฑ์๋๋ก ์ฌ์ฉํฉ๋๋ค.
๋ ๋์๊ฐ ์จ์๋ ธ ๋ง๊ณ ๋, ์ฌ๋ฌ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๊ฐ ํ ์ํ๋ก๋ผ๋ ๊ฒ์ด์ฃ !!! ์ด๋ฌํ ์ผ๋ผ์ค๋ฅผ ๋ฉํฐ-๋ฐฑ์๋ ์ผ๋ผ์ค๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
โถ๏ธ ์ผ๋ผ์ค API๋ง ์ตํ๋ฉด ๋ค์ํ ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์๋๋ก ๊ณจ๋ผ์ ์ธ ์ ์๋ค๋ ๋ง์! ๊ทธ๋์, ์ด๋ฅผ ์ํด ์ผ๋ผ์ค๋ ์ง๊ด์ ์ด๊ณ ์ฌ์ฉํ๊ธฐ ํธํ ๊ณ ์์ค API๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ค ๊ทธ๋ผ ์ ํ ์ํ๋ก์ ์ผ๋ผ์ค๊ฐ ๊ฑฐ์ ๋์์ด๊ฐ ๋์์๊น?
๐ก ํ๋์์๊ฐ ๊ตฌ๊ธ์ ํฉ๋ฅํ ๋ค ํ ์ํ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ผ์ค API๊ฐ ๋ด์ฅ๋์์ต๋๋ค. ํ ์ํ๋ก 2.0๋ถํฐ๋ ์ผ๋ผ์ค API๋ฅผ ๋จ๊ธฐ๊ณ ๋๋จธ์ง ๊ณ ์์ค API๋ฅผ ์ ๋ฆฌํ๊ณ , ๊ฒฐ๊ตญ ์ผ๋ผ์ค๋ ํ ์ํ๋ก์ ํต์ฌ API๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋ค์ํ ๋ฐฑ์๋๋ฅผ ์ง์ํ๋ ๋ฉํฐ-๋ฐฑ์๋ ์ผ๋ผ์ค๋ 2.3.1 ๋ฒ์ ์ดํ๋ก ๊ฐ๋ฐ์ ์ค์งํ์ต๋๋ค.
โถ๏ธ ํ ์ํ๋ก ์ด๋ค -> ์ผ๋ผ์ค API ์ด๋ค
import tensorflow as tf
from tensorflow import keras
๐ ์ธ๊ณต ์ ๊ฒฝ๋ง์ผ๋ก ๋ชจ๋ธ ๋ง๋ค๊ธฐ
์ผ๋ผ์ค API ๋ฅผ ์ฌ์ฉํด์ ํจ์ ์์ดํ ์ ๋ถ๋ฅํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ง๋ค์ด๋ด ์๋ค!
๋ก์ง์คํฑ ํ๊ท์์๋ ๊ต์ฐจ ๊ฒ์ฆ์ ์ฌ์ฉํด ๋ชจ๋ธ์ ํ๊ฐํ์ง๋ง, ์ธ๊ณต ์ ๊ฒฝ๋ง์์๋ ๊ต์ฐจ ๊ฒ์ฆ์ ์ ์ฌ์ฉํ์ง ์๊ณ ๊ฒ์ฆ ์ธํธ๋ฅผ ๋ณ๋๋ก ๋์ด๋ด์ด ์ฌ์ฉํฉ๋๋ค.
๐ค ์?
๐ก 1. ๋ฅ๋ฌ๋ ๋ถ์ผ์ ๋ฐ์ดํฐ์
์ ์ถฉ๋ถํ ํฌ๊ธฐ ๋๋ฌธ์ ๊ฒ์ฆ ์ ์๊ฐ ์์ ์ ์ด์ด์ผ ํจ.
2. ๊ต์ฐจ ๊ฒ์ฆ์ ์ํํ๊ธฐ์๋ ํ๋ จ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆผ.
from sklearn.model_selection import train_test_split
train_scaled, val_scaled, train_target, val_target = train_test_split(
train_scaled, train_target, test_size=0.2, random_state=42)
ํ๋ จ ์ธํธ์์ 20%๋ฅผ ๊ฒ์ฆ ์ธํธ๋ก ๋์ด ๋์ต๋๋ค! ํฌ๊ธฐ๋ฅผ ๋ณผ๊น์?
60,000๊ฐ ์ค์ 12,000๊ฐ๊ฐ ๊ฒ์ฆ ์ธํธ๋ก ๋ถ๋ฆฌ๋์์ต๋๋ค.
๊ทธ๋ผ ์ด์ , ํ๋ จ ์ธํธ๋ก ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฒ์ฆ ์ธํธ๋ก ํ๋ จํ ๋ชจ๋ธ์ ํ๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ , ์ธ๊ณต ์ ๊ฒฝ๋ง ๊ทธ๋ฆผ์ ์ค๋ฅธ์ชฝ์ ๋์ธ ์ธต์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค!
์ด ์ธต์ ์๋์ฒ๋ผ 10๊ฐ์ ํจ์ ์์ดํ ์ ๋ถ๋ฅํ๊ธฐ ์ํด 10๊ฐ์ ๋ด๋ฐ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๐๋ฐ์ง์ธต(deep layer)
์ผ๋ผ์ค์ ๋ ์ด์ด ํจํค์ง ์์๋ ๋ค์ํ ์ธต์ด ์์ต๋๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์ธต์ ๋ฐ์ง์ธต์ ๋๋ค.
์๋์ ๊ฐ์ด ์ผ์ชฝ์ ์๋ ๊ฐ ํฝ์ ๊ณผ ์ค๋ฅธ์ชฝ์ ์๋ ๋ด๋ฐ์ด ๋ชจ๋ ์ฐ๊ฒฐ๋ ์ ์ด ์๋ค๊ณ ํ์ ๋,,, ๋งค์ฐ ๋นฝ๋บตํ์ฃ !
ํฝ์ ๊ฐ์ x ๋ด๋ฐ ๊ฐ์ = ์ฐ๊ฒฐ๋ ์ ๊ฐ์
โถ๏ธ ์ฐ๋ฆฌ ์์ ๋ก๋, 784 x 10 = 7,840
๐์์ ์ฐ๊ฒฐ์ธต (fully connected layer)
์ด๋ฐ ์ธต์ ์์ชฝ์ ๋ด๋ฐ์ด ๋ชจ๋ ์ฐ๊ฒฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ ์ฐ๊ฒฐ์ธต์ด๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
๐ ์ผ๋ผ์ค์ ํด๋์ค Dense : ๋ฐ์ง์ธต ๋ง๋ฆ
- ๋งค๊ฐ๋ณ์
01. ๋ด๋ฐ ๊ฐ์
02. activation : ๋ด๋ฐ์ ์ถ๋ ฅ์ ์ ์ฉํ ํจ์,
03. input_shape : ์ ๋ ฅ์ ํฌ๊ธฐ
dense = keras.layers.Dense(10, activation="softmax", input_shape=(784,))
- 10๊ฐ์ ํจ์ ์์ดํ ์ ๋ถ๋ฅํ๊ธฐ ์ํด ๋ด๋ฐ ๊ฐ์๋ฅผ 10๊ฐ๋ก ์ง์ ํฉ๋๋ค.
- 10๊ฐ์ ๋ด๋ฐ์์ ์ถ๋ ฅ๋๋ ๊ฐ์ ํ๋ฅ ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ์ํํธ๋งฅ์ค ํจ์(๋ค์ค ๋ถ๋ฅ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ ) ๋ง์ฝ 2๊ฐ์ ํด๋์ค๋ฅผ ๋ถ๋ฅํ๋ ์ด์ง ๋ถ๋ฅ๋ผ๋ฉด ์๊ทธ๋ชจ์ด๋ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. activation="sigmoid" - 10๊ฐ์ ๋ด๋ฐ์ด ๊ฐ๊ฐ ๋ช ๊ฐ์ ์ ๋ ฅ์ ๋ฐ๋์ง ํํ๋ก ์ง์ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ ๊ฒฝ๋ง ์ธต์ ๋ง๋ค์๋ค์!! ์ด์ ์ด ๋ฐ์ง์ธต์ ๊ฐ์ง ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ง๋ค์ด์ค๋๋ค.
๐ ์ผ๋ผ์ค์ ํด๋์ค Sequential : ์ ๊ฒฝ๋ง ๋ชจ๋ธ ๋ง๋ฆ
model = keras.Sequential(dense)
๐ํ์ฑํ ํจ์
- ์ํํธ๋งฅ์ค์ ๊ฐ์ด ๋ด๋ฐ์ ์ ํ ๋ฐฉ์ ์ ๊ณ์ฐ ๊ฒฐ๊ณผ์ ์ ์ฉ๋๋ ํจ์
- a๋ก ํ๊ธฐ
์ด๋ ๊ฒ ์ ๊ฒฝ๋ง ๋ชจ๋ธ๊น์ง ๋ง๋ค์์ต๋๋ค! ์ด์ ํ๋ จ์ ํด์ผ๊ฒ ์ฃ ๐
๊ทธ๋ผ ๋ค์ ๊ธ์์ ์ผ๋ผ์ค ๋ชจ๋ธ์ ํ๋ จ์ํจ ํ, ํจ์ ์์ดํ ์ ๋ถ๋ฅํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!!! ๐ฆ๐ฆ๐ฆ
๊ฐ์ฌํฉ๋๋ค.
'๐ป My Work > ๐ง AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MiniHack] ํ๊ฒฝ ์ธํ (0) | 2023.01.04 |
---|---|
[์ธ๊ณต์ง๋ฅ/ํผ๊ณต๋จธ์ ] 07-1. ์ธ๊ณต ์ ๊ฒฝ๋ง (3) (0) | 2023.01.02 |
[์ธ๊ณต์ง๋ฅ/ํผ๊ณต๋จธ์ ] 07-1. ์ธ๊ณต ์ ๊ฒฝ๋ง (1) (0) | 2022.12.17 |
[์ธ๊ณต์ง๋ฅ/ํผ๊ณต๋จธ์ ] 04-2. ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ (2) (0) | 2022.12.09 |
[์ธ๊ณต์ง๋ฅ/ํผ๊ณต๋จธ์ ] 04-2. ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ (1) (0) | 2022.12.09 |