โ
ํ์ต์ ์ค์
ํจ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด W์ B๋ ๋๋คํ๊ฒ ์ฐพ์์ง ๋ชจ๋ธ
๋
๋ฆฝ๋ณ์์ ๊ฐ์ W๋ฅผ ๊ณฑํ๊ณ B๋ฅผ ๋ํด์ ๋์จ ๊ฒฐ๊ณผ๊ฐ H์ด
์ค์ ํ๋งค๋๊ณผ ๋น๊ตํ ๊ฒ์ด I์ด
W์ loss ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฐพ๋๋ค(์ฆ-์ฆ, ๊ฐ-๊ฐ ๋ฑ)
์ฆ-์ฆ์ ๊ด๊ณ๋ผ๋ฉด, ๊ทธ ๊ด๊ณ ์์์๋ ๋ก์ค์ ๋ฏธ๋ถ๊ฐ์ ์ํด ๋ค์ W ๊ฐ์ด ๊ฒฐ์ ๋จ
history์ ๊ธฐ๋กํ๋ฉฐ loss๊ฐ์ ์ค์ด๋ W, B ์ฐพ๊ธฐ
โ
์ํซ์ธ์ฝ๋ฉ
๋ฒ์ฃผํ ๋ฐ์ดํฐ๋ฅผ 0๊ณผ 1๋ก ๋ฐ๊ฟ์ฃผ๋ ์์
โ์ฐธ๊ณ
์ข
์๋ณ์ ์ข
๋ฅ์ ๋ฐ๋ฅธ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
์์ -> ํ๊ท ์๊ณ ๋ฆฌ์ฆ
๋ฒ์ฃผํ -> ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ
# ํ์ต ๋ฐ์ดํฐ ์ค๋น
์์ด๋ฆฌ์ค = pd.read_csv('iris.csv')
# ์ํซ์ธ์ฝ๋ฉ
์์ด๋ฆฌ์ค = pd.get_dummies(์์ด๋ฆฌ์ค)
์ข
์๋ณ์๊ฐ ๋๋๋ฉฐ, ์ธ ์ถ๋ ฅ์ธต์ด ํ์ํด์ก๋ค
y์ ์ต์๊ฐ์ 0, ์ต๋๊ฐ์ 1
โ ํ์ฑํ ํจ์(Activation) - Softmax
ํ๊ท๋ชจ๋ธ: Identity (y=x)
์
๋ ฅ์ ๊ทธ๋๋ก ์ถ๋ ฅ์ผ๋ก ๋ง๋๋ Identity ํจ์๊ฐ ์์๋ค
๋ถ๋ฅ๋ชจ๋ธ: Softmax
โ๋ถ๋ฅ ์์ธก์ ๋น์จ์ ์์ธกํด์ผ ํ๋ค (0~100%)
โ
์ค์ต3 - ์ข
์๋ณ์๊ฐ ๋ฒ์ฃผํ
1. ํ์ต ๋ฐ์ดํฐ ์ค๋น
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
import tensorflow as tf
import pandas as pd
# ๋ฐ์ดํฐ ์ค๋น
ํ์ผ๊ฒฝ๋ก = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
์์ด๋ฆฌ์ค = pd.read_csv(ํ์ผ๊ฒฝ๋ก)
์์ด๋ฆฌ์ค.head()
# ์ํซ์ธ์ฝ๋ฉ
์ธ์ฝ๋ฉ = pd.get_dummies(์์ด๋ฆฌ์ค)
์ธ์ฝ๋ฉ.head()
print(์ธ์ฝ๋ฉ.columns)
# ์ข
์๋ณ์์ ๋
๋ฆฝ๋ณ์์ ๋ถ๋ฆฌ
๋
๋ฆฝ = ์์ด๋ฆฌ์ค[['๊ฝ์๊ธธ์ด', '๊ฝ์ํญ', '๊ฝ๋ฐ์นจ๊ธธ์ด', '๊ฝ๋ฐ์นจํญ']]
์ข
์ = ์์ด๋ฆฌ์ค[['ํ์ข
_setosa', 'ํ์ข
_versicolor', 'ํ์ข
_virginica']]
print(๋
๋ฆฝ.shape, ์ข
์.shape)
๋ฒ์ฃผํ์ ์นผ๋ผ๊ณผ ์์นํ์ ์นผ๋ผ ๋ชจ๋ ์์์ผ๋ฏ๋ก ์ํซ์ธ์ฝ๋ฉ
2. ๋ชจ๋ธ์ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ
X = tf.keras.layers.Input(shape=[4])
Y = tf.keras.layers.Dense(3, activation='softmax')(X)
model = tf.keras.models.Model(X,Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')
๋ถ๋ฅ์ด๋ฏ๋ก ํ์ฑํํจ์๋ Softmax
์ ํ๋ ์งํ ์ถ๊ฐ
3. ๋ชจ๋ธ ํ์ตํ๊ธฐ
model.fit(๋
๋ฆฝ, ์ข
์, epochs=1000, verbose=0)
model.fit(๋
๋ฆฝ, ์ข
์, epochs=10)
4. ๋ชจ๋ธ ์ด์ฉํ๊ธฐ
๋ชจ๋ ๋ฐ์ดํฐ ๋์ ์ฒ์์ 5๊ฐ ๋ฐ์ดํฐ๋ก ์์ธก
6. ๊ฐ์ค์น
# ํ์ตํ ๊ฐ์ค์น (weights & bias)
print(model.get_weights())
์ฒซ ์นผ๋ผ๋ถํฐ ๊ฐ๊ฐ ๊ฝ์๊ธธ์ด, ๊ฝ์ํญ, ๊ฝ๋ฐ์นจ๊ธธ์ด, ๊ฝ๋ฐ์นจํญ๊ณผ ๊ณฑํด์ฃผ๋ ๊ฐ์ค์น์ด๋ฉฐ, bias์ธ 1.9503545๋ฅผ ๋ํด softmax ํจ์๋ฅผ ๊ฑฐ์น๋ฉด ํ๋ฅ ์ด ๋์จ๋ค.
โ
ํ๋ ๋ ์ด์ด
์
๋ ฅ๊ณผ ๊ฒฐ๊ณผ ์ฌ์ด์ ํผ์
ํธ๋ก ์ ์ถ๊ฐํ๋ ํ๋ ๋ ์ด์ด
ํ
์ํ๋ก์ฐ๋ ํ๋ ๋ ์ด์ด์ ํธ๋ฆฌํ ์ถ๊ฐ๋ฅผ ๋๋๋ค
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(10, activation='swish')(X) # ํ๋ ๋ ์ด์ด
Y = tf.keras.layers.Dense(1)(H) # X ๋์ ํ๋ ๋ ์ด์ด H
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(5, activation='swish')(X) # 5๊ฐ ๋
ธ๋
H = tf.keras.layers.Dense(3, activation='swish')(H) # 3๊ฐ ๋
ธ๋
H = tf.keras.layers.Dense(3, activation='swish')(H)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
โ
ํ๋ ๋ ์ด์ด ์ค์ต1
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
import tensorflow as tf
import pandas as pd
# ๋ฐ์ดํฐ ์ค๋น
ํ์ผ๊ฒฝ๋ก = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
๋ณด์คํด = pd.read_csv(ํ์ผ๊ฒฝ๋ก)
# ์ข
์๋ณ์์ ๋
๋ฆฝ๋ณ์์ ๋ถ๋ฆฌ
๋
๋ฆฝ = ๋ณด์คํด[['crim', 'zn', 'indus', 'chas', 'nox',
'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat']]
์ข
์ = ๋ณด์คํด[['medv']]
print(๋
๋ฆฝ.shape, ์ข
์.shape)
# ๋ชจ๋ธ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(10, activation='swish')(X)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
# ๋ชจ๋ธ ํ์ตํ๊ธฐ
model.fit(๋
๋ฆฝ, ์ข
์, epochs=100)
# ๋ชจ๋ธ ์ด์ฉํ๊ธฐ
print(model.predict(๋
๋ฆฝ[:5]))
print(์ข
์[:5])
# ๋ชจ๋ธ์ ์์ ํ์ธ
print(model.get_weights())
# ๋ชจ๋ธ ๊ตฌ์กฐ ํ์ธ
model.summary()
13๊ฐ์ ์
๋ ฅ์ ๋ฐ์ 10๊ฐ๋ก ์ถ๋ ฅ
param์ ๊ฐ์ค์น์ ๊ฐ์
10๊ฐ์ ์
๋ ฅ์ด๋ฏ๋ก ํญ์ด 10๊ฐ๊ณ bias ํญ์ด 1๊ฐ๋ก ์ด 11๊ฐ ํญ
13๊ฐ์ ์
๋ ฅ์ด๋ฏ๋ก ํญ์ด 13๊ฐ๊ณ bias ํญ์ด 1๊ฐ๋ก ์ด 14๊ฐ ํญ
โ
ํ๋ ๋ ์ด์ด ์ค์ต2
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
import tensorflow as tf
import pandas as pd
######################
# ๋ฐ์ดํฐ ์ค๋น
ํ์ผ๊ฒฝ๋ก = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
์์ด๋ฆฌ์ค = pd.read_csv(ํ์ผ๊ฒฝ๋ก)
# ์ํซ์ธ์ฝ๋ฉ
์์ด๋ฆฌ์ค = pd.get_dummies(์์ด๋ฆฌ์ค)
# ์ข
์๋ณ์์ ๋
๋ฆฝ๋ณ์์ ๋ถ๋ฆฌ
๋
๋ฆฝ = ์์ด๋ฆฌ์ค[['๊ฝ์๊ธธ์ด', '๊ฝ์ํญ', '๊ฝ๋ฐ์นจ๊ธธ์ด', '๊ฝ๋ฐ์นจํญ']]
์ข
์ = ์์ด๋ฆฌ์ค[['ํ์ข
_setosa', 'ํ์ข
_versicolor', 'ํ์ข
_virginica']]
print(๋
๋ฆฝ.shape, ์ข
์.shape)
######################
# ๋ชจ๋ธ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ
X = tf.keras.layers.Input(shape=[4])
H = tf.keras.layers.Dense(8, activation="swish")(X)
H = tf.keras.layers.Dense(8, activation="swish")(H)
H = tf.keras.layers.Dense(8, activation="swish")(H)
Y = tf.keras.layers.Dense(3, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy',
metrics='accuracy')
# ๋ชจ๋ธ ๊ตฌ์กฐ ํ์ธ
model.summary()
######################
# ๋ชจ๋ธ ํ์ต(FIT)
model.fit(๋
๋ฆฝ, ์ข
์, epochs=100)
######################
# ๋ชจ๋ธ ์ด์ฉ
print(model.predict(๋
๋ฆฝ[:5]))
print(์ข
์[:5])