๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ ํ”„๋กœ๊ทธ๋ž˜๋ฐ·๊ฐœ๋ฐœ/๐Ÿ”ธ๋จธ์‹ ๋Ÿฌ๋‹

[Tensorflow] Tensorflow 101(13-19)

by Jenny:! 2024. 5. 16.

โœ… ํ•™์Šต์˜ ์‹ค์ œ

  • ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด  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%)

  • sigmoid()
  • softmax()

 

โœ…์‹ค์Šต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๊ฐœ ํ•ญ
      • 11*1
    • 13๊ฐœ์˜ ์ž…๋ ฅ์ด๋ฏ€๋กœ ํ•ญ์ด 13๊ฐœ๊ณ  bias ํ•ญ์ด 1๊ฐœ๋กœ ์ด 14๊ฐœ ํ•ญ
      • 14*10

 

โœ…ํžˆ๋“ ๋ ˆ์ด์–ด ์‹ค์Šต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])