์ธ๊ฐ์ ์ง๋ฅ
์ธ๊ณต์ง๋ฅ์ ๋ง ๊ทธ๋๋ก, ์ฌ๋์ด ๋ง๋ '์ง๋ฅ(Intelligence)'์ด๋ค. ์ธ๊ฐ์ ์ ์ฅ์์ ์ง๋ฅ์ ๊ฐ๋ฐํ๊ธฐ ์ํด์ ์ธ๊ฐ์ '๋'์ ๋งค์ปค๋์ฆ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒ์ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ํ ์ ์๋ค. ๋๋ ์ฌ๋ฌ ๋ด๋ฐ๋ค์ด ์๋ก์๋ก ๊ทธ๋ฌผ์ฒ๋ผ ์ฐ๊ฒฐ๋์ด ์๋ ์ ๊ฒฝ๋ง(Neural Network)์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ก ๋ด๋ฐ์ ์๋์๋ฆฌ๋ฅผ ์์๋ณด์.
๋จผ์ , ๋๋ฌด์ ๊ฐ์ง์ฒ๋ผ ๋์ด ์๋ ์์๋๊ธฐ(dendrite)๋ฅผ ํตํด ์๊ทน์ ๋ฐ์๋ค์ธ๋ค. ํ์ง๋ง ์ด ์๊ทน์ด ๋๋ฌด ์๋ค๋ฉด, ๋ด๋ฐ์๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ด๋ฐ์์ ์ ํธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํ ์ต์ํ์ ์๊ทน, ์ฆ '์ญ์น'์ด์์ ์๊ทน์ด ๊ฐํด์ ธ์ผ ํ๋ค. ๋ง์ฝ ์ถฉ๋ถํ ์๊ทน์ผ๋ก ์ ๊ธฐ์ ํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด, ์ด๋ ๊ณ์ํด์ ์ ๋ฌ๋์ด(axon) ๋๊ฐ๋ค. ์ด ์ ๊ธฐ์ ํธ๊ฐ ๋ง๋จ๋ถ(axon terminal)์ ๋๋ฌํ๋ฉด, ๋ง๋จ๋ถ์์ ์ ๋ฌ๋ฌผ์ง์ ๋ด๋ณด๋ด, ๋ค์ ๋ด๋ฐ์ ์์๋๊ธฐ(dendrite)์ ์ ํธ๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ์ฝ 1000์ต๊ฐ ๊ฐ๋์ ๋ด๋ฐ์ด ๊ทธ๋ฌผ๋ง์ฒ๋ผ ์ธ๊ฐ์ ๋์ ์ฝํ์๋ ๊ฒ์ด๋ค.
์ธ๊ณต์ ๊ฒฝ๋ง
์ ์๊ฐํด๋ณด๋ฉด, ๋ด๋ฐ์ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ๊ฒ๋ค๊ณผ ๋ง์ด ๋ฎ์์๋ค. ์๋ฅผ ๋ค์ด ๋ก์ง์คํฑ ํ๊ท(Logistic Regression)๋ฅผ ์๊ฐํด๋ณด์. ๋ฐ์ดํฐ x1, x2, x3(์๊ทน)๋ฅผ ๋ฐ๋๋ค. x1, x2, x3์ ํ์ตํ ๊ฐ์ค์น w1, w2, w3๋ฅผ ๊ณฑํ๊ณ ํธํฅ b๋ฅผ ๋ํด ๊ฐ์ ์ ๋ง๋ค๊ณ , ์ด๊ฒ์ sigmoid์ ๋ฃ์ด 0~1 ๋ฒ์๋ก ๋ง๋ ๋ค. ์ด ๋ ๊ฐ์ ์ด 0.5(์ญ์น)๋ณด๋ค ์๋ค๋ฉด '0'์ผ๋ก, ํฌ๋ค๋ฉด '1'๋ก ๊ฒฐ์ ํ๋ค.
๋ญ๊ฐ ์ต์ํ ๋ด๋ฐ์ ๊ตฌ์กฐ๋ ๊ทธ๋ ๋ค ์ณ๋, ์ด๊ฒ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐํด์ ๋ฌด์์ ํ ์ ์์๊น? ์ผ๋จ ์ ์ฌ์ง์ ๋ณด์. ํ๋์ ๋ ธ๋๊ฐ ํ๋์ ๋ด๋ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ์ด๋ค. ์์ ์ฌ์ง์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ธ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ํ๋์ ์ถ๋ ฅ์ ๊ฐ๋๋ค. ๊ทธ ์ฌ์ด์๋ ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ฐํ๋ ๋ ธ๋๋ค์ด ์๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ์ธ๊ณต์ง๋ฅ์ด '์ฌ๊ณ '๋ฅผ ํ๋ ๊ฒ ์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํด ๋ธ๋ค. ์ด '์ฌ๊ณ '์ ๊ฐ์ฅ ๊ฐ๋จํ ์๋ก๋ XOR๋ฌธ์ ๊ฐ ์๋ค.
XOR ๋ฌธ์
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด 0, 1๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ, Wx+b์ ๊ฐ์ ์ง์ ์์ W, b๋ฅผ ํ์ต์์ผ ์ ์ฌ์ง๊ณผ ๊ฐ์ ์ง์ ์ผ๋ก ์ฐพ์๊ฐ๋ ๊ณผ์ ์ ์๊ณ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ ํ(Wx+b)์ธ ๊ฐ์ ์ ํ๋ค๋ ๊ฒ์ ์์ ๊ฐ์ด ํ๋์ ์ง์ ์ ๊ธ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ด๋ฐ, ์ฆ ๋ ธ๋ ์ญ์ ๊ฐ๊ฐ์ด ํ๋์ ์ง์ ์ ๊ธ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค.
XOR์ ๋๊ฐ์ ๊ฐ์ด ๋ค๋ฅผ ๋๋ง, True(=1)์ ๋ฐํํ๋ ๋ ผ๋ฆฌํจ์์ด๋ค. ์์ ๊ทธ๋ฆผ์ ํ๋์ ์ง์ ์ ๊ทธ์ด ๋นจ๊ฐ์ (False)๊ณผ ํ๋์ (True)์ด ๊ฐ๊ฐ ๋ค๋ฅธ ์์ญ์ ์ํ๋๋ก ํ ์ ์์๊น? ๋ถ๊ฐ๋ฅํ๋ค. ์กฐ๊ธ๋ง ํด๋ด๋ ์ ์ ์๊ณ , ์ํ์ ์ผ๋ก๋ ์ฆ๋ช ๋ ์ฌ์ค์ด๋ค. ํ์ง๋ง ํ๋์ ์ง์ ์ด ์๋ ์ฌ๋ฌ๊ฐ์ ์ง์ ์ด ์กด์ฌํ๋ค๋ฉด ๋นจ๊ฐ์ ๊ณผ ํ๋์ ์ ๊ตฌ๋ถ์ ์ผ๋ง๋ ์ง ๊ฐ๋ฅํ๋ค. ์ด๊ฒ์ ๊ฐ๋จํ ์ ๊ฒฝ๋ง์ ํตํด ๊ตฌํํด๋ณด์.
์ค์ ๋ก (0, 0), (0, 1), (1, 0), (1, 1)์ ๋ฃ์์ ๋, ๊ฐ๊ฐ์ด XOR์ ๊ฒฐ๊ณผ๊ฐ(0, 1, 1, 0) ์ด ๋์ค๋ฉด ๋๋ค. '-8→0' ์ ๋์จ ๊ฒฐ๊ณผ๋ฅผ ์์๋ 0์ผ๋ก, ์์๋ 1๋ก sigmoidํจ์์ฒ๋ผ ๊ทผ์ฌ์ํจ ๊ฒ์ด๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก XOR์ ์ ๊ตฌํํ์์ ํ์ธํ ์ ์๋ค. ์ผ์ชฝ ๊ทธ๋ฆผ์ ์ด์ง ๋ฐ๊ฟ์ฃผ๋ฉด ์ค๋ฅธ์ชฝ์ ๋ชจ์์ด ๋๊ณ , ์ด๊ฒ์ ์ฌ๋ฌ๊ฒ ์ด์ด๋ถ์ฌ ๊ทธ๋ฌผ๊ณผ ๊ฐ์ ๋ชจ์์ ์ ๊ฒฝ๋ง์ด ์์ฑ๋๋ ๊ฒ์ด๋ค.
์์์์๋ ์ด๋ฏธ ์ ๋ต์ W์ b๋ฅผ ๊ฐ์ง๊ณ ์์๊ธฐ ๋๋ฌธ์, ๋ง๋์ง ํ๋ฆฌ๋์ง ๊ฐ์ ๋ฃ์ด๋ณด๊ธฐ๋ง ํ๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ ๋ต W์ b๋ฅผ ๋จธ์ ๋ฌ๋์ผ๋ก, ์ฆ ํ์ต์ ํตํด์ ์์๋ด๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ํ์ตํ ๋ฐ์ดํฐ (x1, x2, Y)๊ฐ ์๋ค๊ณ ํ์. x1, x2๋ฅผ ์ ๋ ฅํ๊ณ ๋ ธ๋(๋ด๋ฐ)๋ฅผ ๊ฑฐ์ณ ๋์จ Y'์ ์ค์ Y๋ฅผ ๋น๊ตํด ์ด ์ค์ฐจ๊ฐ ์ค์ด๋ค๋๋ก ๊ฐ ๋ ธ๋์ W, b๋ฅผ ํ์ต์์ผ์ผ ํ ๊ฒ์ด๋ค. ์ฌ์ค ์ ๊ฒฝ๋ง์์ ๊ฐ ๋ ธ๋์ ๊ฐ์ค์น์ ํธํฅ์ ํ์ต์ํค๋ ๋ฐฉ๋ฒ์ ์ธ๊ฐ์ด ๋ช ๋ ๋์์ด๋ ํค๋งธ๋ ๋ฌธ์ ์ด๋ค. ๋ช ๋ฒ์ ์ํ์ฐฉ์ค๋ ์์์ง๋ง ๊ฒฐ๊ตญ ์ค์ฐจ์ญ์ ๋ฒ์ด๋ผ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ธ๋ค.
์ค์ฐจ์ญ์ ํ
ํ์ต์ ๋ชฉ์ ์ ๊ฒฐ๊ตญ ๋น์ฉ์ ์ค์ด๋ ๊ฒ์ด๋ค. ๋น์ฉ์ ๊ฒฐ๊ตญ OUTPUT์ผ๋ก ๋์จ ๋ง์ง๋ง ๊ฒฐ๊ณผ์ ์ค์ Y์ ์ฐจ์ด๊ฐ ๋๊ณ , ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ํตํด์ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํ์๋ค. ๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด ์ ์ ์ ์ํ๋ ๋น์ฉํจ์ cost(W)์ฒ๋ผ ๊ฐ๋จํ๊ฒ W ํ๋๋ก OUTPUT์ด ๊ฒฐ์ ๋ ๊ฒ ์๋๋ผ๋ ๊ฒ์ด๋ค. ๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ง ๊ฐ๊ฐ์ W, b๊ฐ ๋ชจ๋ OUTPUT์ด ๋์ค๋๋ฐ ๊ด์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ๋จํ๊ฒ cost(W)ํจ์๋ฅผ ๊ทธ๋ฆฌ๊ณ ๊ฒฝ์ฌ๋ฅผ ๋ฐ๋ผ ํ๊ฐํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ ธ๋ ๊ฐ๊ฐ์ ๊ฒฝ์ฌํ๊ฐ์์ผ์ค ๊ฒ์ด๋ค. ์ด๋ค ๋ ธ๋๊ฐ OUTPUT์ ๋ด๋๋ฐ์ ์ผ๋ง๋ ๊ด์ฌ๋ฅผ ํ๋์ง๋ฅผ ํธ๋ฏธ๋ถ์ผ๋ก ๊ณ์ฐํ๊ณ , ์ด ๊ธฐ์ธ๊ธฐ๋ฅผ ๋ฐ๋ผ ๊ฐ๊ฐ์ W, b๋ฅผ ํ์ต์์ผ์ค ๊ฒ์ด๋ค. ํธ๋ฏธ๋ถ์ ๊ณ ๋ฑํ๊ต ๋ ๋ฐฐ์ด ํฉ์ฑํจ์์ ๋ฏธ๋ถ์ ์๊ฐํ๋ฉด ์ฝ๋ค.
$$f(g(x))'=f'(g(x))\times g'\left(x\right)$$
์ฐ๋ฆฌ๊ฐ f(g(x))๋ฅผ x์ ๋ํด ๋ฏธ๋ถํ ๊ฒ์ ๋ณด๋ ํ์๋ x๊ฐ ์ผ๋ง๋ f(g(x))์ ๊ด์ฌํ๊ณ ์๋๊ฐ(๊ธฐ์ธ๊ธฐ)๋ฅผ ๋ณด๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ๋ณด๋ฉด ๋จผ์ f๋ฅผ g์ ๋ํด ๋ฏธ๋ถํ์ฌ f์ ๋ํ g๊ฐ ์ผ๋ง๋ ๊ด์ฌํ๊ณ ์๋๊ฐ ๋ณด๊ณ , ๊ฑฐ๊ธฐ์ g๋ฅผ x๋ก ๋ฏธ๋ถํ ๊ฒ์ ๊ณฑํด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ f(g(x))์ ๋ํ x์ ๋ฏธ๋ถ๊ฐ์ ์ป๊ฒ๋๋ค.
์ ๊ฒฝ๋ง๋ ์ด์ ๋น์ทํ๋ค. OUTPUT๋ ธ๋์ ์ด๋ค INPUT๋ ธ๋๊ฐ ์ผ๋ง๋ ๊ด์ฌํ๋ ํ์ธํ๊ธฐ ์ํด์๋ ์์ ์ ์ ๋ ธ๋์ ๋ํ ์์ ์ ๋ฏธ๋ถ๊ฐ์ ๊ณ์ํด์ ์ฌ๊ท์ ์ผ๋ก ๊ณฑํด๋๊ฐ๋ค ๋ณด๋ฉด ์ ์ ์๋ค. ํฉ์ฑํจ์์์ x๋ ์์ ์ ์์ ์๋ g๋ฅผ , g๋ ์์ ์ ์์ ์๋ f๋ฅผ ๋ฏธ๋ถํด์ ๊ณฑํ ๊ฒ์ฒ๋ผ. ์ ๊ณผ์ ์ด ์ดํด๊ฐ ๋์ง ์์๋ค๋ฉด ๊ผญ ๋งจ ์๋ ๋งํฌ์์ ๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋ ์์ฆ1 9-2๋ฅผ ๋ค์ด๋ณด๋ฉด ์ฝ๊ฒ ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ๊ฐ ๋น์ฉ์ ๋ํ ์์ ์ ๊ธฐ์ฌ๋๋ฅผ ๊ณ์ฐํ์ฌ ๊ฒฝ์ฌ๋ฅผ ํ๊ฐํ ์ ์๊ฒ ๋๊ณ ์ด๋ ๊ฒ ๊ฒฝ์ฌ๋ฅผ ํ๊ฐํ๋ฉฐ ํ์ต์ ์งํํ ์ ์๊ฒ ๋๋ค. ์ด ๋ชจ์์ด ๋ง์น ์ค์ฐจ๊ฐ ๊ฑฐ๊พธ๋ก ์ ํ๋๋ ๊ฒ ๊ฐ๋ค๊ณ ํด์ ์ค์ฐจ์ญ์ ํ(Back-Propagation)๋ผ๊ณ ํ๋ค. ํ ์ํ๋ก์ฐ ์ญ์ ๋ชจ๋ ๊ฒ์ด ํ ์๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ(๋ ธ๋, ์ฃ์ง)๋ก ๋์ด์๊ธฐ ๋๋ฌธ์, ์ค์ฐจ๊ฐ ๊ทธ๋ํ๋ฅผ ํ๊ณ ๋ด๋ ค์ค๋ฉด์ ๋ณ์๋ฅผ ํ์ต์ํจ๋ค๊ณ ์๊ฐํ ์ ์๋ค.
XOR ๊ตฌํ
import tensorflow as tf
import numpy as np
tf.set_random_seed(777) # for reproducibility
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32)
y_data = np.array([[0], [1], [1], [0]], dtype=np.float32)
X = tf.placeholder(tf.float32, [None, 2])
Y = tf.placeholder(tf.float32, [None, 1])
๋จผ์ ํ์ตํ ์ ๋ต ๋ฐ์ดํฐ x_data, y_data ์์ด ์ฃผ์ด์ง๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ ์ด ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ ๊ฒฝ๋ง์ ํ์ต์์ผ, ์๋ก์ด ์์์ x๋ฅผ ์ ๋ ฅํ์ ๋ ๊ทธ ๊ฒฐ๊ณผ y๊ฐ '0'์ธ์ง '1'์ธ์ง ๊ตฌ๋ณํ ์ ์๋๋ก ์ธ๊ณต์ง๋ฅ์ ๋ง๋๋ ๊ฒ์ด๋ค. ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก์ง์คํฑ ํ๊ท์์ ์ผ๋ ์ฝ๋์ ๊ทธ๋๋ก ๋ฃ์ด๋ณด์. ์์์ ๋ณด์๋ฏ์ด ํ๋์ ์ง์ ์ผ๋ก๋ XOR์ ๊ตฌ๋ถํ ์ ์์์ ์ ์ ์๋ค. ์ ํ๋๊ฐ 0.5, ์ฆ ์ ๋๋ก ํ์ต์ด ๋์ง ์์ ์ฑ 0๊ณผ 1์ ์ ๋ฐ์ ํ๋ฅ ๋ก ์ฐ๋๊ฒ๊ณผ ๋ค๋ฆ์ด ์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ด์ ์ ์ ์๋ค.
W1 = tf.Variable(tf.random_normal([2, 10]), name='weight1')
b1 = tf.Variable(tf.random_normal([10]), name='bias1')
layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)
W2 = tf.Variable(tf.random_normal([10]), name='bias2')
layer2 = tf.sigmoid(tf.matmul(layer1, W2) + b2)
W3 = tf.Variable(tf.random_normal([10, 10]), name='weight3')
b3 = tf.Variable(tf.random_normal([10]), name='bias3')
layer3 = tf.sigmoid(tf.matmul(layer2, W3) + b3)
W4 = tf.Variable(tf.random_normal([10, 1]), name='weight4')
b4 = tf.Variable(tf.random_normal([1]), name='bias4')
hypothesis = tf.sigmoid(tf.matmul(layer3, W4) + b4)
๊ทธ๋์ ์ ๊ฒฝ๋ง์ ์ถ๊ฐํ๋ค. ์ฌ์ค 2๊ฐ์ ๋ ์ด์ด๋ฉด ์ถฉ๋ถํ์ง๋ง, ๋๊ฒ ์ ๊ฒฝ๋ง์ ํผ์ณ๋ ์ ํ ์๊ด์๋ค. ๊ฐ๊ฐ์ ๋ ธ๋๋ค์ด ๊ทธ ์ํฉ์ ๋ง๊ฒ ์ค์ฐจ๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ๊ฒฝ์ฌ๋ฅผ ํ๊ณ ํ๊ฐํ ๊ฒ์ด๊ณ , ๊ฐ์ ์ต์ ์ ๊ฐ์ค์น์ ํธํฅ์ ์ฐพ์ ๊ฒ์ด๋ค.
์์ ์ฝ๋๋ ๋ ธ๋๊ฐ 4๊ฐ ์๋ ๊ฒ์ด ์๋๋ค. ๊ฐ ๋ ธ๋๋ค์ ๋ ์ด์ด๋ณ๋ก ํ๋์ ํ๋ ฌ๋ก ํฉ์ณ๋์ ๊ฒ์ด๊ณ , 4๊ฐ์ ๋ ์ด์ด๊ฐ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ W1, W2, ... ์ ํ๋ ฌ์ [์ ๋ ฅ, ์ถ๋ ฅ] ์ shape์ ๊ฐ์ง๊ฒ ๋๋ค. ํ๋ ฌ ๊ณฑ์ (n × 'm') ('m' × k)์ ๊ผด๋ก ์ ํ๋ ฌ์ ์ด ํฌ๊ธฐ์, ๋ท ํ๋ ฌ์ ํ ํฌ๊ธฐ๊ฐ ๊ฐ์์ผ ์ฐ์ฐํ ์ ์๋ค. ๋ฐ๋ผ์ ์ ๊ฒฝ๋ง์ ๊ฐ ๋ ์ด์ด๋ ์ ๋ ์ด์ด์ ์ถ๋ ฅ ๊ฐฏ์์ ๋ท ๋ ์ด์ด์ ์ ๋ ฅ ๊ฐฏ์๊ฐ ๊ฐ๋๋ก ์ค์ ํด์ผ ํ๋ค. ๋จ, ์ฐ๋ฆฌ๋ 2๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด 1๊ฐ์ ๊ฒฐ๊ณผ(0 ๋๋ 1)๋ฅผ ์ป์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ฅ ์ฒซ ๋ ์ด์ด๋ [2, ?]์ ๊ผด, ๊ฐ์ฅ ๋ท ๋ ์ด์ด๋ [?, 1]์ ๊ผด์ ๊ฐ์ ธ์ผ๋ง ํ๋ค.
# cost/loss function
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
# Accuracy computation
# True if hypothesis>0.5 else False
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
# Launch graph
with tf.Session() as sess:
# Initialize TensorFlow variables
sess.run(tf.global_variables_initializer())
for step in range(10001):
_, cost_val = sess.run([train, cost], feed_dict={X: x_data, Y: y_data})
if step % 100 == 0:
print(step, cost_val)
# Accuracy report
h, c, a = sess.run(
[hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data}
)
print("\nHypothesis: ", h, "\nCorrect: ", c, "\nAccuracy: ", a)
์์ ๋งํ๋ ์ค์ฐจ์ญ์ ๋ฒ ์ญ์, ๋๋ํ ํ ์ํ๋ก์ฐ์ ํจ์๋ค์ ๋ค ๋ด์ฅ๋์ด ์๋ค. ์ฐ๋ฆฌ๋ ๊ทธ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์์ ๊ฒ์๋ฌผ์ ๋งํฌํ๋ '๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋' ๊ฐ์๋ฅผ ๋ฃ๊ณ ํ๊ธฐํ ๋
ธํธ์
์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถํ ๊ฒ์ ๋ํด ์์ฑํ ๊ฒ์๊ธ์
๋๋ค.
'๐ป > ML' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋] ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง(CNN) (0) | 2020.08.23 |
---|---|
[๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋] ํ์ฑํจ์, ์ด๊ธฐํ, ์ ๊ทํ (0) | 2020.08.17 |
[๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋] ํ์ต๊ณ์, ๋ฐ์ดํฐ ํ์คํ, ๊ณผ์ ํฉ (0) | 2020.08.04 |
[๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋] ๋ค์ค ๋ถ๋ฅ, ์ํํธ๋งฅ์ค ํ๊ท (0) | 2020.08.03 |
[๋ชจ๋๋ฅผ ์ํ ๋ฅ๋ฌ๋] ๋ก์ง์คํฑ ํ๊ท (0) | 2020.07.27 |