본문 바로가기
Programming/MachineLearning

딥러닝 최적의 모델결과 뽑아내기 (feat 와인 데이터)

by 하하호호 2021. 12. 16.
반응형

 

딥러닝 모델 자동 성능개선

 

모델을 설계하고, 출력값을 확인해보면,

출력할 때마다 결과값이 달라지는 것을

확인할 수 있다.

 

사람이 컴퓨터 옆에 앉아서 일일이 결과값을

비교해보고 가장 높은 결과값이 나오는 것을

확인하기에는 시간이 많이 소요된다.

 

많은 결과값 중에 향상된 결과값을 보여주는

모델만 정리해서 저장하는 기능이 있으면

결과값 관리가 더 편리해지겠다.

 

keras에는 ModelCheckpoint 함수를

제공한다. 테스트오차, 학습 정확도, 

테스트셋 정확도, 학습셋 오차등을 기준으로

해서 더 나아진 결과만 저장할 수 있도록

하는 함수다.

 

또한 성능이 개선되지 않는 지점에 도달하면

자동으로 학습을 멈춰주는 함수도 keras에서

지원한다. 바로 EarlyStopping()함수다.

 

실전 예제

 

케라스에서 데이터를 로드하고,

모델을 생성 / 컴파일 / 생성하는 작업은

아래 글을 참고하길 바란다.

 

 

딥러닝 실제 모델 만드는 방법 딥러닝 코드 구현해보기 이항 분류 keras 모듈 이용하기 (feat 인디

1. 데이터 : 피마 인디언 당뇨병 발생 유무 2. 문제형태 : 이항분류(Binary Classification) 3. 코드 구현 keras 모듈을 호출한다. tf.compat.v1.disable_eager_execution()는 tensorflow 버전 호환 문제를 해결..

incomeplus.tistory.com

 

아래 코드는  와인 데이터를 불러와서,

모델을 설계하고, 컴파일 하는 과정이다.

은닉층은 3개, 출력층은 1개로 구성된

모델이다.

 

와인 데이터는 여러가지 변수들을 종합해

레드와인과 화이트와인을 분류하는 이항

분류이기 때문에, 출력층의 활성화 함수는

sigmoid()함수를 사용한다.

 

또한 모델 컴파일 부분에서 오차 함수는

binary_crossentropy() 함수를 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import ModelCheckpoint, EarlyStopping
 
import pandas as pd
import numpy
import tensorflow as tf
import matplotlib.pyplot as plt
import os
 
# seed 값 설정
seed = 0
numpy.random.seed(seed)
tf.compat.v1.set_random_seed(seed)
 
# 데이터 입력
df_pre = pd.read_csv('./dataset/wine.csv', header=None)
df = df_pre.sample(frac=1)
dataset = df.values
= dataset[:, 0:12]
= dataset[:, 12]
 
# 모델 설정
model = Sequential()
model.add(Dense(30, input_dim=12, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
 
# 모델 컴파일
model.compile(loss='binary_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])
cs

 

모델을 저장하기 위해서는 먼저 경로

설정이 필요하다. 만약 /model/ 경로가

존재하지 않으면 디렉토리를 새로 만들어서

모델을 저장한다.

 

모델명은 epoch와 val_loss을 입력받는다.

모델의 개선정도를 나타내는 checkpointer는

ModelCheckpoint() 함수의 반환값을 저장한다.

ModelCheckpoint()에서 모델의 정확도가

개선될 때만 저장하기 위한 파라미터가 

save_best_only=True 부분이다. 

 

학습 자동중단

딥러닝의 왕도는 존재하지 않는다.

모델의 학습을 계속 반복한다고 해서 정확도가

올라가는 것은 아니다. 모델 학습수가 반복되면

오히려 학습셋에 대한 과적합이 올라가 테스트

셋에서의 정확도는 떨어지게 된다.

 

모델의 학습이 반복되면서 일정 구간에 도달하면

더 이상의 학습을 진행해도 정확도가 개선되지

않는 구간이 발생한다.

 

우리는 모델의 정확도가 더 이상 개선되지 않는

지점에서 모델의 학습을 중지해야 한다. keras에서

이런 로직을 도와주는 함수가 존재한다.

바로 EarlyStopping() 함수다. 

 

테스트 오차를 모니터링해서 모델 정확도의 개선

정도를 모니터링한다. patience 인자는 만약

모델 정확도가 개선되지 않는 것을 감지하면,

향후 N번 더 모델 학습을 진행하는 것을 설정하는

부분이다.

1
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=100)
cs

 

이제 성능이 개선된 모델만 저장하고,

만약 성능이 개선되지 않으면 학습이

조기 종료되는 로직이 완성되었다.

 

결과값을 대량으로 출력한다음 개선될 때까지

모델을 돌리기만 하면 된다. 굉장히 편해졌다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 모델 저장 폴더 설정
MODEL_DIR = './model/'
if not os.path.exists(MODEL_DIR):
    os.mkdir(MODEL_DIR)
 
# 모델 저장 조건 설정
modelpath = './model/{epoch:02d}-{val_loss:.4f}.hdf5'
checkpointer=ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=1, save_best_only=True)
 
# 학습 자동 중단 설정
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=100)
    
# 모델 실행
model.fit(X, Y, epochs=350, batch_size=500, validation_split=0.2, verbose=0, callbacks=[checkpointer, early_stopping_callback])
 
# 결과 출력
print("\n Accuracy : %.4f" %(model.evaluate(X,Y)[1]))
cs

 

 

더 읽을거리

 

 

딥러닝 머신러닝 차이, 머신러닝 딥러닝

머신러닝 딥러닝 차이 알파고가 대한민국을 초토화 시킨지 5년이 지났다. 실생활에도 인공지능이 많이 들어 왔고, 무수히 쌓여가는 데이터들을 기반으로 한 새로운 사업들이 계속 등장하고 있

incomeplus.tistory.com

 

딥러닝의 층 구조 딥러닝을 배워보자

더보기 딥러닝 기본 구조 신경망 딥러닝의 구조는 크게 3부분으로 나뉘어져 있다. 1. 입력 부분 2. 분석 부분 3. 출력 부분 마지막으로 모델을 만들고 난 후, 컴파일을 하는 부분으로 구성된다. 층

incomeplus.tistory.com

 

 

딥러닝 기본 구조 이해하기 선형회귀 , 평균 제곱근 오차 10분만에 이해하기

딥러닝 기본구조 딥러닝의 근간을 이루는 것은 인공 신경망이라고 불리는 작은 연산장치들의 집합이다. 신경망의 뼈대는 알고리즘에 많은 의존도를 보인다. 그 중 가장 대표적인 것이 선형 회

incomeplus.tistory.com

 

 

딥러닝 데이터가 부족할 때 해결하는 방법 K겹 교차 검증이란? (feat 광석 돌 구분 예제 사용)

문제의 발단 딥러닝 모델을 학습시키기 위해서는 방대한 양의 데이터셋이 필요하다. 하지만 현실에서 데이터셋을 다량으로 구축하기는 쉽지 않은 일이다. 그럼에도 불구하고 예측정확도가 높

incomeplus.tistory.com

 

 

딥러닝 과적합 문제 해결하기(feat 광석 판별하기)

과적합(Overfitting)이란? 과적합은 특정 모델이 학습 데이터셋 안에서는 일정 수준 이상의 예측 정확도를 보이지만, 새로운 데이터를 적용 하면 정확도를 높이지 못하는 현상을 의미한다. 과적합

incomeplus.tistory.com

 

반응형

댓글