๐Ÿšฉ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ์ดˆ - part15. Tensorflow ๋ชจ๋ธ ์„ค๊ณ„ํ•˜๊ธฐ

vincaยท2022๋…„ 12์›” 14์ผ
0

๐ŸŒ“ AI/DL - theory

๋ชฉ๋ก ๋ณด๊ธฐ
16/24

Introduction

tensorflow๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•˜๊ณ  ์ˆ˜ํ–‰์‹œ์ผœ ๋ณธ๋‹ค.

์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ

# ํ์•” ์ˆ˜์ˆ  ํ™˜์ž์˜ ๋ฐ์ดํ„ฐ ์…‹(csv)๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
from google.colab import files
uploaded = files.upload()
my_data = 'ThoraricSurgery.csv'
# ๋”ฅ๋Ÿฌ๋‹์„ ๊ตฌ๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ€๋ผ์Šค ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import pandas as pd
# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
import numpy as np
import tensorflow as tf
# ์‹œ๋“œ๋ฅผ ๊ณ ์ •์‹œํ‚จ๋‹ค. (๊ฒฐ๊ณผ๋™์ผ)
np.random.seed(3)
tf.random.set_seed(3)
# .ํ™˜์ž์˜ ๊ธฐ๋ก์„ pandas๋ฅผ ํ†ตํ•ด date frameํ˜•์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
df = pd.read_csv(my_data, header=None)
Data_set = df.to_numpy()
# ํ™˜์ž์˜ ๊ธฐ๋ก๊ณผ ์ˆ˜์ˆ ์˜ ๊ฒฐ๊ณผ(y)๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ ค ์ €์žฅํ•œ๋‹ค.
X = Data_set[:,0:17]
Y = Data_set[:,17]
# ๋”ฅ๋Ÿฌ๋‹ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•œ๋‹ค.
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# ํ•™์Šต๋ฐฉ๋ฒ•, ์†์‹คํ•จ์ˆ˜(๋น„์šฉํ•จ์ˆ˜)๋ฅผ ์ •์˜ํ•˜๊ณ  ๋”ฅ๋Ÿฌ๋‹์„ ์‹คํ–‰ํ•œ๋‹ค.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', tf.ke
ras.metrics.Recall()])
model.fit(X, Y, epochs=100, batch_size=10)

์ฝ”๋“œ๋ฅผ ๋œฏ์–ด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋„๋ก ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ


ํ™˜์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
ํŒŒ์ด์ฌ์˜ ์ธ๋ฑ์‹ฑ ๋ฌธ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ์ธ๋ฑ์‹ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋ชฉํ•˜์ž.

  • ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ฏ€๋กœ [:, 0:17]์€ 0~16๊นŒ์ง€ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์†์„ฑ 1~17๋ฅผ X๋กœ ์ €์žฅํ•œ๋‹ค.
  • ๋ถ„๋ฅ˜๋˜๋Š” ์ •๋‹ต(ํด๋ž˜์ŠคY)๋Š” ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์ธ 17 ์ฆ‰, 18๋ฒˆ ์ค„์ด๋œ๋‹ค.

์†์„ฑ : ์ข…์–‘์˜ ์œ ํ˜•, ํํ™œ๋Ÿ‰, ํ˜ธํก ๊ณค๋ž€ ์—ฌ๋ถ€, ๊ณ ํ†ต ์ •๋ณด, ๊ธฐ์นจ, ํก์—ฐ, ์ฒœ์‹ ์—ฌ๋ถ€ ๋“ฑ
ํด๋ž˜์Šค : ์ƒ์กด ์—ฌ๋ถ€ (1 : ์ƒ์กด 0 : ์‚ฌ๋ง)


๋ชจ๋ธ ์ •์˜ํ•˜๊ธฐ

์ž…๋ ฅ 17๊ฐœ(์†์„ฑ)์ด ๋“ค์–ด์˜ค๊ฒŒ ๋˜๊ณ , ์€๋‹‰์ธต์€ 1๊ฐœ๋กœ ์ด 30๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ input_dim์˜ ๊ฐ’์ด 17์ธ ์ด์œ ๋Š”, ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์†์„ฑ์˜ ๊ฐœ์ˆ˜๊ฐ€ 17๊ฐœ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์‚ฌ๋ง๊ณผ ์ƒ์กด ์ฆ‰, 1๊ณผ 0์˜ 2์ง„๋ถ„๋ฅ˜์˜ ๋ฌธ์ œ์ด๋ฏ€๋กœ ํ™œ์„ฑํ•จ์ˆ˜๋กœ sigmoid๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
Dense Layer๋ฅผ ํ†ตํ•ด์„œ Fullyconnectedํ•œ ํ•™์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.


๋ชจ๋ธ ํ™˜๊ฒฝ ์„ค์ •


๋น„์šฉํ•จ์ˆ˜๋กœ๋Š” binary_crossentropy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ํ•™์Šต์€ Gradinet Descent ์ฆ‰, ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ ์—ฌ๊ธฐ์„œ adam๋˜ํ•œ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์˜ ์ผ์ข…์ด๋‹ค. (Adam์€ ํŠœ๋‹๋ชจ๋ธ์— ํŠœ๋‹ ๋ชจ๋ธ์„ ํ•ฉ์ณ ๋งŒ๋“  ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.)

  • Adam์ด๋ž€
    ๋ชจ๋ฉ˜ํ…€์€ ๊ธฐ๋ณธ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ๋ชจ๋ธ์˜ ์ •ํ™•๋„๋ฅผ ๊ฐœ์„ ์‹œํ‚จ ๋ฐฉ๋ฒ•์ด๊ณ , ์•Œ์—  ์—์Šคํ”„๋กญ์€ ๋ณดํญ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐœ์„ ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
    Adam์€ ์ด๋Ÿฌํ•œ ์•Œ์— ์—์Šคํ”„๋กญ๊ณผ ๋ชจ๋ฉ˜ํ…€ ๋ฐฉ์‹์ด ํ•ฉ์ณ์ง„ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์ด๋‹ค.
    ๊ฐ€์žฅ ๋งŽ์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํšจ๊ณผ๊ฐ€ ์ข‹์€ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. (๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉ)

๋น„์šฉํ•จ์ˆ˜ ์˜ˆ์‹œ

์ตœ์ ํ™” ๋ฐฉ๋ฒ•(๊ฒฝ์‚ฌํ•˜๊ฐ• ๋ฐฉ๋ฒ•) ์˜ˆ์‹œ



์ถœ์ฒ˜ : https://www.tensorflow.org/api_docs/python/tf/keras


๋ชจ๋ธ ์„ฑ๋Šฅ ํ‰๊ฐ€ ๊ธฐ์ค€ ์„ค์ •

๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ํ•™์Šต์„ํ•  ๋•Œ, ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์ด ์ž˜ ํ•™์Šต๋˜๊ณ  ์žˆ๋Š”์ง€ ํ‰๊ฐ€ํ•˜๋Š” ์ง€ํ‘œ๊ฐ€ ์žˆ์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์•ผ ์ œ๋Œ€๋กœ ๋œ ํ•™์Šต์ด ๋˜๋Š”์ง€ ์•Œ ๊ฒƒ์ด๋‹ˆ..


์—ฌ๊ธฐ์„œ๋Š” ์ •ํ™•๋„์™€ AUC, Recall์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
Accuracy : ๋ถ„๋ฅ˜์˜ ์ •ํ™•๋„
AUC : AUC๊ฐ€ ๋†’์„์ˆ˜๋ก ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•จ.
Recall : ์žฌํ˜„์œจ ์‹ค์ œ True๋“ค ์ค‘์— ๋ชจ๋ธ์ด True๋ผ๊ณ  ์ฐพ์€ ๋น„์œจ์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”๊ฐ€?
(์‹ค์ œ ์ƒ์กดํ•œ ์‚ฌ๋žŒ๋“ค ์ค‘ ๋ชจ๋ธ์ด ์ƒ์กดํ•œ ์‚ฌ๋žŒ์ด๋ผ๊ณ  ์ฐพ์€ ๋น„์œจ์ด ์–ผ๋งˆ๊ฐ€ ๋˜๋Š”๊ฐ€?)


ํ•™์Šต ์‹คํ–‰ํ•˜๊ธฐ

epochs๋Š” ๋ฐ˜๋ณตํšŸ์ˆ˜๋ฅผ ๋œปํ•˜๊ณ , batch_size๋Š” Batch๋ฐฉ๋ฒ•๊ณผ SGD ๋ฐฉ๋ฒ•์„ ๋‘˜๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
ํ•œ ์„ธ๋Œ€๋ฅผ ํ•™์Šต์‹œํ‚ฌ๋•Œ ์ „์ฒด๋ฅผ ๋‹ค ๋ณด๊ณ  1๋ฒˆ์˜ update๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด Batch, ๊ฐ ์ƒ˜ํ”Œ๋งˆ๋‹ค update๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š”๊ฒŒ SGD์ด๋‹ค.

mini batch / batch_size ์ง€์ •ํ•˜๊ธฐ

์ด๋•Œ, ๊ฐ ์ƒ˜ํ”Œ๋งˆ๋‹ค๊ฐ€ ์•„๋‹Œ ๋ช‡๊ฐœ(์—ฌ๊ธฐ์„œ๋Š” 10)๋ฅผ ์ž„์˜๋กœ ์ง€์ •ํ•˜์—ฌ ํ•ด๋‹น ์ƒ˜ํ”Œ๋“ค์„ ํ•œ ๋ฌถ์Œ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ update๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฒƒ์ด ๋ฐ”๋กœ mini Batch๋ฐฉ๋ฒ•์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, 170๊ฐœ์˜ ์ƒ˜ํ”Œ์„ 10 batch size๋กœ ๋ฌถ๊ฒŒ๋˜๋ฉด 17๋ฒˆ์˜ ํ•™์Šต์ด 1epoch(1์„ธ๋Œ€)๋‹น ์ด๋ฃจ์–ด ์ง€๊ฒŒ ๋œ๋‹ค.

profile
๋ถ‰์€ ๋ฐฐ ์˜ค์ƒ‰ ๋”ฑ๋‹ค๊ตฌ๋ฆฌ ๊ฐœ๋ฐœ์ž ๐ŸฆƒCloud & DevOps

0๊ฐœ์˜ ๋Œ“๊ธ€