KT AIVLE [5주차] - 딥러닝

김채원·2023년 2월 27일
0

KT_AIVLE

목록 보기
10/18

KT의 과정은...사실 어마어마한 기대는 안 되고...
모두 다 기본은 이미 안다는 가정하에 수업을 구성하는게 좋지 않을까 하는... 그런 기분이 든다... 그리고 실습보다는 강의에 초점을 맞추는게...미니프로젝트도 과하게 많음
한 4차까지만 하고 강의로 채우는게 알찰것 같은데 KT예산문제인가?
그래도 대기업인데.... 타 교육 프로그램에 비해 상당히 대충 만든듯한 구성...

keras의 Sequential API랑 Functional API 연습을 중점적으로 함


이론 📝

딥러닝: connection 📌

multi-input & Concatenate layer에선 Sequential API는 불가능하다.
ex) 1234 5678 > 1 2 3 4 5 6 7 8
connection layer output shape가 (None, 8)

il_l = Input( shape=(2,) )
hl_l = Dense(2, activation=relu)(il_l)

il_w = Input( shape=(2,) )
hl_w = Dense(2, activation=relu)(il_w)

cl = Concatenate()([hl_l, hl_w])
ol = Dense(3, activation=softmax)(cl)

# 모델 시작과 끝 지정
model = Model([il_l,il_w],ol)

multi-input & Add layer에선 Sequential API는 불가능하다.
ex) 1234 5678 > 1+5 2+6 3+7 4+8
add layer output shape가 (None, 4)

li_se = keras.layers.Input(shape=(2,))
li_pe = keras.layers.Input(shape=(2,))

hl_se = keras.layers.Dense(4,activation='relu',name='hl_se')(li_se)
hl_pe =keras.layers.Dense(4,activation='relu',name='hl_pe')(li_pe)

add_l = keras.layers.Add()([hl_se,hl_pe])
ol = keras.layers.Dense(3,activation='softmax')(add_l)

model = keras.models.Model([li_se,li_pe],ol)

model.compile(loss=categorical_crossentropy, metrics=['accuracy'],
              optimizer=Adam())

from tensorflow.keras.utils import plot_model
plot_model(model, show_shapes=True)는 모델링 시각화용 코드


엔드로피는 보조수단으로 metrics = 'accuracy' 추가


실습 💻

1. Sequential API 📌

모델 정의

단순히 모델 정의에서 두 가지 방식이 차이가 나는 것이므로
1번은 정의 코드만 첨부

# 세션 정리
keras.backend.clear_session()

# 모델 정의
model = keras.models.Sequential()

# 레이어 정의
model.add(keras.layers.Input(shape=(30,),))
model.add(keras.layers.Dense(1,activation='sigmoid'))

# 컴파일 설정
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

2. Functional API 📌

라이브러리 불러오기

import tensorflow as tf
from tensorflow import keras
from sklearn.model_selection import train_test_split
import numpy as np
from tensorflow.keras.callbacks import EarlyStopping

data split

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=2023)
x_train, x_val, y_train, y_val = train_test_split(x_train,y_train,test_size=0.2,random_state=2023)

모델 정의

# 1번 세션 클리어
keras.backend.clear_session()

# 2번 레이어 사슬처럼 엮기
# 동일 변수명 써도 되지만 구분 해야 될 때는 다른 변수명
il = keras.layers.Input(shape=(8,))
hl = keras.layers.Dense(128, activation='relu')(il)
hl = keras.layers.Dense(64, activation='relu')(hl)
hl = keras.layers.Dense(32, activation='relu')(hl)
ol = keras.layers.Dense(1)(hl)

# 3번 모델의 시작과 끝 지정
model = keras.models.Model(il, ol)

# 4번 컴파일
model.compile(loss='mse', optimizer='adam')

# 5번 요약
model.summary()

early stopping 정의

es = EarlyStopping(monitor='val_loss',         # 관측 대상
                   min_delta=0,                # 관측 대상 Threshold
                   patience=7,                 
                   verbose=1,
                   restore_best_weights=True)  # 최적 epoch 시점의 가중치 설정

모델 학습

model.fit(x_train, y_train, epochs=1000, verbose=1,
          validation_data=(x_val,y_val), callbacks=[es])
          
# 굳이 validation set 분리를 안 했다면
# model.fit(x_train, y_train, epochs=1000, verbose=1,
#          validation_split=0.2, callbacks=[es])

결과 예측 및 확인

y_pred = model.predict(x_test)

y_pred[:10].reshape(-1)
y_test[:10]
profile
잡다한 공부 기록용

0개의 댓글