본문 바로가기
Experience/- KT AIVLE School

KT AIVLE School 5주차 정리 - Keras (Sequential)

by Yoojacha 2023. 2. 28.

모듈 가져오기

import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow import keras

x, y 분리

target = '컬럼명'
x = data.drop(target, axis=1)
y = data.loc[:, target]

학습, 평가 데이터 분리

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
x_train.shape, x_test.shape, y_train.shape, y_test.shape

회귀 문제 - Linear Regression

keras.backend.clear_session() # 이전에 만든 모델 지우기

model = keras.models.Sequential() # 연결주의 방식 사용
model.add( keras.layers.Input(shape=(30,)) ) # x 30개
model.add( keras.layers.Dense(1, activation='linear') ) # y 1개, linear 는 default 값

# 단일 클래스 회귀 방식
model.compile(
                loss=keras.losses.mean_squared_error, 
                optimizer='adam'
             )
             
model.summary()

이진 분류 문제 - Logistic Regression (sigmoid 사용)

keras.backend.clear_session() # 이전에 만든 모델 지우기

model = keras.models.Sequential() # 연결주의 방식 사용

model.add( keras.layers.Input(shape=(30, )) ) # x 가 30개

# 시그모이드 함수를 활용하여 로지스틱 회귀 설정
model.add( keras.layers.Dense(1, activation='sigmoid') )

model.compile(
               loss=keras.losses.binary_crossentropy, 
               metrics=['accuracy'],  # metrics=keras.metrics.Accuracy
               optimizer='adam'
             )
                          
model.summary()

멀티클래스 분류 문제 - softmax

  • 원핫인코딩
import numpy as np
from tensorflow.keras.utils import to_categorical

class_len = len(np.unique(y_train))

y_train = to_categorical(y_train, class_len)
y_test = to_categorical(y_test, class_len)
  • categorical_crosentropy, softmax 사용
keras.backend.clear_session() # 이전에 만든 모델 지우기

model = keras.models.Sequential() # 연결주의 방식 사용

model.add( keras.layers.Input(shape=(4,)) ) # x 4 개

# softmax 활성함수를 통해 전체 범주형 데이터의 확률의 합을 1 로 치환
model.add( keras.layers.Dense(3, activation='softmax') ) 

# 3개 이상 분류 방식
model.compile(
                loss=keras.losses.categorical_crossentropy, 
                metrics=keras.metrics.CategoricalAccuracy(), 
                optimizer='adam'
             )
                          
model.summary()

모델 학습 및 예측

# 학습
"""
epochs : 학습용 데이터를 모델에 학습할 횟수 (학습 반복 주기)
verbose: 학습의 진행 상황을 볼지 말지 설정
"""
model.fit(x_train, y_train, epochs=5, verbose=1)

# 예측
y_pred = model.predict(x_test)

히든 레이어 추가하기

model.add( keras.layers.Dense(32, activation='relu') )
model.add( keras.layers.Dense(512, activation='swish') )

이미지 데이터 shape 평탄화

model.add( keras.layers.Flatten() )

EarlyStopping 기법 사용

from tensorflow.keras.callbacks import EarlyStopping


es = EarlyStopping(monitor='val_loss',         # 멈추기 위한 조건으로 관측 대상 설정
                   patience=3,                 # 관측 대상의 성능이 개선되지 않는 경우를 참는 횟수
                   min_delta=0,                # 개선된 것으로 간주하기 위한 최소 변화량 (0은 같아도 향상으로봄)
                   verbose=1,                  # 학습 과정 출력 설정
                   restore_best_weights=True)  # 최적 epoch의 가중치를 모델에 적용 여부 (기본값 false)
                   
                   
model.fit(x_train, y_train, epochs=100, verbose=1,
          validation_split=0.2, callbacks=[es])

 

댓글