데이터 한 그릇

딥러닝 베스트 모델 만들기 본문

딥러닝/모두의 딥러닝

딥러닝 베스트 모델 만들기

장사이언스 2022. 1. 5. 14:48

 

와인 csv 이용해서 베스트 모델 만들고 저장해보기

 

df_pre = pd.read_csv('C:\\Users\\user\\Desktop\\080228\\deeplearning\\dataset\\wine.csv',
                        header = None,
                       )

df = df_pre.sample(frac=1)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

dataset = df.values
X = dataset[:,0:12]
Y = 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'])

model.fit(X, Y, epochs = 200, batch_size = 200)

print('Accuracy : {:.4f}'.format(model.evaluate(X,Y)[1]))

 

Accuracy : 0.9818

 


Epochs 마다 정확도 기록하며 모델 저장

 

import os

model_dir = 'C:\\Users\\user\\Desktop\\080228\\deeplearning/model'
if not os.path.exists(model_dir):
    os.mkdir(model_dir)
    
modelpath ='C:\\Users\\user\\Desktop\\080228\\deeplearning/model/{epoch:02d}-{val_loss:.4f}.hdf5'


from tensorflow.keras.callbacks import ModelCheckpoint #모델 저장 위한 함수

#verbose = 1 이면 진행상황 프린트 되면서 보여주고 0이면 안보여준다.

checkpointer = ModelCheckpoint(filepath = modelpath, monitor = 'val_loss',verbose = 1)

model.fit(X,Y, validation_split = 0.2,epochs = 200, batch_size = 200, verbose = 0, callbacks = [checkpointer])

#학습 정화도는 acc, 테스트셋 정확도는 val_acc, 학습셋 오차는 loss

 

epoch 마다의 정확도와 loss 를 보여준다.

keras callback 함수의 ModelCheckpoint 가 모델 저장을 도와준다.

인자로 path 를 적어주고, 케라스 내부에서 val_loss 로 기록되게 놔둔다.

 

 


 학습 중단하기

 

앞서 과적합 문제를 확인하면서 학습데이터를 가지고 학습을 오래할 시, 테스트 데이터에서의 성능이 떨어짐을 배웠다.

따라서, 학습데이터의 성능도 높으면서 테스트 데이터 셋에서의 성능이 최고점일 때로 모델을 만들어야 한다.

케라스에서는 학습을 하면서 테스트 데이터 셋의 오차가 줄어들지 않으면 학습을 중단하는 함수가 존재한다.

(위의 이유로 테스트셋 오차가 줄어들지 않거나 오히려 늘어나면 멈춰야 한다. 안그러면 과적합 문제가 발생한다.)

 

from tensorflow.keras.callbacks import EarlyStopping

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

model.fit(X,Y, validation_split = 0.33, epochs = 2000, batch_size = 500, callbacks = [early_stopping_callback])

 

`EarlyStopping()` 함수를 호출한다.

 

monitor 는 어떤 값을 지켜볼지 정하는 것, val_loss를 적었는데, 이는 테스트 데이터 셋의 오차를 의미한다.

즉, 이 값의 크기 변화를 지켜본다는 의미다.

patience 는 만일 오차가 변하지 않을 시 몇 번 참을지 정하는 항목이다. 이 값을 100으로 지정했는데, 이는 100번정도 오차가 나아지지 않아도 참는다는 걸 의미한다.

모델을 학습할 때, callbacks 인자 값에 리스트 안에 EarlyStopping 개체를 집어 넣으면 학습 도중 중단을 한다.

이렇게 되면 결과 값으로 epoch 가 끊기게 되는 지점이 있는데, 위에 모델 저장하는 코드와 함께 돌리면 이 때의 모델을 확인할 수 있다. 이 모델이 최적의 모델이라고 할 수 있는데, 필요할 때 load 해서 사용하면 된다.

 

 

'딥러닝 > 모두의 딥러닝' 카테고리의 다른 글

딥러닝 CNN(1)_기본 프레임 만들기  (0) 2022.01.06
딥러닝 선형 회귀 실습  (0) 2022.01.05
딥러닝 과적합 피하기  (0) 2022.01.05
딥러닝 실습  (0) 2022.01.05
딥러닝 모델 설계하기  (0) 2022.01.05
Comments