์ธ๊ณต ์ ๊ฒฝ๋ง(Artificial Neural Networks ; ANN ; ๋ด๋ด๋ท)
- ์ค์ ์ธ๊ฐ์ ์ ๊ฒฝ๊ณ๋ฅผ ๋ชจ์ฌํ์ฌ ๋ง๋ค์ด์ง ๊ณ์ฐ ๋ชจ๋ธ
- ์ ๊ฒฝ๋ง์ ํผ์ ํธ๋ก ์ ์ฌ๋ฌ ์ธต์ผ๋ก ์์์ ๋ง๋ฆ
- XOR GATE๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํผ์ ํธ๋ก ์ ์ฌ๋ฌ ์ธต ์๋ ๋ฐฉ๋ฒ ์ ์
- ์๋์ ๊ฐ์ด, AND, NAND, OR ์ ์กฐํฉ์ผ๋ก XOR์ ๊ตฌํ ๊ฐ๋ฅ
- ์ด์ฒ๋ผ, ์ฌ๋ฌ ๊ฐ์ ์ธต์ผ๋ก ๊ตฌ์ถํ ์ ๊ฒฝ๋ง์ ๋ค์ธต ํผ์ ํธ๋ก ์ ๊ฒฝ๋ง(Multi-Layer Perceptron ; MLP)๋ผ๊ณ ํจ
์ ๋ ฅ์ธต, ์๋์ธต, ์ถ๋ ฅ์ธต
์ ๋ ฅ์ธต(Input Layer)
- ๋ฐ์ดํฐ์ ์ด ์ ๋ ฅ๋๋ ์ธต
- ๋ฐ์ดํฐ์ ์ ํน์ฑ ๊ฐ์์ ๋ฐ๋ผ ์ ๋ ฅ์ธต ๋ ธ๋ ์๊ฐ ๊ฒฐ์
- ์ด๋ ํ ๊ณ์ฐ๋ ์ํํ์ง ์๊ณ ๊ทธ๋ฅ ์ ๋ ฅ๊ฐ๋ค์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ ์ญํ
- ์ ๊ฒฝ๋ง์ ์ธต์(๊น์ด)๋ฅผ ์ ๋ ์ ๋ ฅ์ธต์ ์ธ์ง ์์
์๋์ธต(Hidden Layers)
- ์ ๋ ฅ์ธต์ผ๋ก๋ถํฐ ์ ๋ ฅ๋ ์ ํธ๊ฐ ๊ฐ์ค์น, ํธํฅ์ ํตํด ์ฐ์ฐ๋๋ ์ธต
- ์ ๋ ฅ์ธต๊ณผ ์ถ๋ ฅ์ธต ์ฌ์ด์ ์๋ ๋ชจ๋ ์ธต์ ์๋์ธต์ด๋ผ๊ณ ๋ถ๋ฆ
- ๊ณ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ๋ ๋์ผ๋ก ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ '์๋' ์ด๋ผ๋ ์ด๋ฆ์ด ๋ถ์
- ๋ ธ๋ ์๋ฅผ ์์ ๋กญ๊ฒ ๊ตฌ์ฑํ ์ ์์
- ์ผ๋ฐ์ ์ผ๋ก ์๋์ธต์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ(๋ค์ค ํผ์ ํธ๋ก ์ ๊ฒฝ๋ง), ๋ฅ๋ฌ๋ ์ด๋ผ๊ณ ํํ
์ถ๋ ฅ์ธต(Output Layer)
- ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ ์ธต์ผ๋ก ์๋์ธต์์์ ์ฐ์ฐ์ ๋ง์น ๊ฐ์ด ์ถ๋ ฅ๋๋ ์ธต
- ์ฐ๋ฆฌ๊ฐ ์ํ๊ณ ์ ํ๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ ์ธต์ธ ๋งํผ, ์ฐ๋ฆฌ๊ฐ ํ์ด์ผํ ๋ฌธ์ ์ ์ข
๋ฅ์ ๋ฐ๋ผ ์ถ๋ ฅ์ธต์ ์ ์ค๊ณํ ํ์๊ฐ ์์
- ์ด์ง ๋ถ๋ฅ(Binary Classification) : ์ฃผ๋ก ํ์ฑํ ํจ์๋ก ์๊ทธ๋ชจ์ด๋ ํจ์ ์ฌ์ฉ, ์ถ๋ ฅ์ธต ๋ ธ๋ ์ = 1, ์ถ๋ ฅ๋๋ ๊ฐ์ด 0๊ณผ 1 ์ฌ์ด์ ํ๋ฅ ๊ฐ
- ๋ค์ค ๋ถ๋ฅ(Multi-class Classification) : ์ฃผ๋ก ํ์ฑํ ํจ์๋ก ์ํํธ๋งฅ์ค ํจ์ ์ฌ์ฉ, ์ถ๋ ฅ์ธต ๋ ธ๋ ์ = ํ๊ฒ์ ํด๋์ค ์
- ํ๊ท(Regression) : ์ผ๋ฐ์ ์ผ๋ก ํ์ฑํ ํจ์๋ฅผ ์ง์ ํ์ง ์์(์ด๋ค ๋ณํ ์์ด ์ถ๋ ฅ๊ฐ ๊ทธ๋๋ก ๋์์ผํ๋), ์ถ๋ ฅ์ธต ๋ ธ๋ ์ = ์ถ๋ ฅ๊ฐ์ ํน์ฑ ์
Tensorflow์ keras ์ฌ์ฉ ๊ฐ๋จํ ์์
- ์๊ธ์จ MNIST ์์(tf.keras์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ )
import pandas as pd
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() # ๋ฐ์ดํฐ์
split ํ๋ ๊ณผ์ ๊ณผ ๋์ผ
x_train, x_test = x_train / 255, x_test / 255 # ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ์ง๋ ํฝ์
์ต๊ณ ๊ฐ 255๋ก ๋๋ ์ฃผ์ด normalization
# 1๋ฒ
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(100, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# 2๋ฒ
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
model.add(tf.keras.layers.Dense(100, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
# ๊ฐ์ธ์ ์ผ๋ก 2๋ฒ์ด ์ข ๋ ๋ชจ๋ธ๋งํ ๋ ์ง๊ด์ ์ผ๋ก ๋ค๊ฐ์ค๋ ๋๋
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']) # ์์ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก model compile
model.fit(x_train, y_train, epochs=10) # epoch๋ ํ์ต ํ์
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]73. ๋ ๋์ ์ ๊ฒฝ๋ง ํ์ต์ ์ํ ๋ฐฉ๋ฒ (0) | 2022.02.24 |
---|---|
[TIL]72. ์ ๊ฒฝ๋ง ํ์ต (0) | 2022.02.23 |
[TIL]70.ํผ์ ํธ๋ก (0) | 2022.02.22 |
[TIL]69. Section3_Chall (0) | 2022.02.21 |
[TIL]61. Section3_Sprint3_Chall (0) | 2022.02.10 |