KT의 과정은...사실 어마어마한 기대는 안 되고...
모두 다 기본은 이미 안다는 가정하에 수업을 구성하는게 좋지 않을까 하는... 그런 기분이 든다... 그리고 실습보다는 강의에 초점을 맞추는게...미니프로젝트도 과하게 많음
한 4차까지만 하고 강의로 채우는게 알찰것 같은데 KT예산문제인가?
그래도 대기업인데.... 타 교육 프로그램에 비해 상당히 대충 만든듯한 구성...
keras의 Sequential API랑 Functional API 연습을 중점적으로 함
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번은 정의 코드만 첨부
# 세션 정리
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'])
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
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()
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]