피곤핑
코딩일탈
피곤핑
전체 방문자
오늘
어제
  • 분류 전체보기
    • Kotlin & Java
    • Spring
      • Spring Security
      • Spring
    • 네트워크
    • JavaScript & Node js
    • Docker
    • Python3
    • Unity
    • 딥러닝
    • 객체지향프로그래밍
    • Error 보고서
    • 나의 이야기 & 회고
    • HTML & CSS
    • Archive
    • 독서

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 오블완
  • 코딩테스트준비
  • nodejs
  • 개발자취업
  • 99클럽
  • TiL
  • 티스토리챌린지
  • Client
  • 항해99
  • JavaScript

최근 댓글

hELLO · Designed By 정상우.
피곤핑

코딩일탈

0802 keras 실습 [와인종류예측] - 베스트모델만들기
딥러닝

0802 keras 실습 [와인종류예측] - 베스트모델만들기

2019. 8. 2. 17:46

실습데이터 : 와인의 종류 예측

 - 이번 실습을 위해 사용되는 데이터들은 레드와인 샘플 1,599개를 등급과 맛, 산도를 측정해 분석하고 화이트와인 샘플 4,898개를 마찬가지로 분석해 데이터를 만들었음.

 

- sample() : 원본 데이터에서 정해진 비율만큼 랜덤으로 뽑아오는 함수

df_pre = pd.read_csv('./dataset/wine.csv', header=None)
df = df_pre.sample(frac=1)

 

데이터의 확인과 실행

 - from keras.callbacks import ModelCheckpoint, EarlyStopping 추가됨

 - X : 특징 / Y : 레이블값

from keras.models import Sequential
from keras.layers.core import Dense
from keras.callbacks import ModelCheckpoint, EarlyStopping

import pandas as pd
import numpy
import tensorflow as tf
import matplotlib.pyplot as plt

# seed 값 설정
seed = 0
numpy.random.seed(seed)
tf.set_random_seed(seed)

# 데이터 입력
df = pd.read_csv('./dataset/wine.csv', header = None)
df = df_pre.sample(frac=1)

# 데이터 분류
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("\n Accuracy : %.4f" % (model.evaluate(X,Y)[1]))

 * 실행화면

 

모델 업데이트 하기

 - 에포크 마다 모델의 정확도를 기록하면서 저장하기

val_loss : 내장변수 (소수점 넷째짜리까지 옴)

 - ModelCheckpoint() : 값을 가져와서 내용을 저장해주는데 알고싶은 값은 loss값이고 실행되는 값을 확인하고 싶을때 verbose를 1로 줌! (ex : epoch 199/200) / monitor : 무엇을 내가 중점적으로 보고싶은지 / save_best_only = True : loss가 좀 나아졌을때만 저장한다는 표시

(참고로 학습 정확도는 acc, 테스트셋 정확도는 val_acc(validation 검증데이터), 학습셋 오차는 loss로 각각 기록됨)

 - model.fit() : -> callbacks = 내가 만들어두었던 checkpoint 를 넣어줌 

from keras.callbacks import ModelCheckpoint

기존 코드 컴파일 부분 밑에 추가/수정

# 모델 저장 폴더 설정
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)

# 모델 실행 및 저장
model.fit(X, Y, validation_split=0.2, epochs=200, batch_size=200,
         verbose=(), callbacks=[checkpointer])

* 실행결과

* 만들어져서 저장된 모델들

학습의 자동중단

 - 학습이 진행되어도 테스트텟 오차가 줄지 않으면 학습을 멈추게 함.

from keras.callbacks import EarlyStopping

 - patience 내가 참고볼 epoch이 얼마인가?

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

 

 * 코드 추가 및 수정

frac=1에서 0.15로 반드시 수정

# 데이터 입력
df = pd.read_csv('./dataset/wine.csv', header = None)
df = df_pre.sample(frac=0.15)
# 모델 컴파일
model.compile(loss='binary_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])

# 자동 중단 설정
early_stopping_callback = EarlyStopping(monitor='val_loss', 
                                       patience=100)

# 모델 실행 및 저장
model.fit(X, Y, validation_split=0.2, epochs=2000, batch_size=500,
         verbose=0, callbacks=[early_stopping_callback, checkpointer])
    
    
# 결과 출력
print("\n Accuracy:%.4f " % (model.evaluate(X,Y)[1]))

 

 * 실행화면

 에포크를 2000으로 설정하였지만 도중에 계산이 멈추는 것을 확인 할 수 있음! 

 

그래프로 확인하기

 - 코딩 안하고 설명만

 - 긴 학습의 예를 지켜보기위헤 에포크를 3500으로 조정

 - 포인트! -> 찾아보기

# y_vloss에 테스트셋으로 실험 결과의 오차 값을 저장 
y_vloss=history.history['val_loss']

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

0805 신경망의 구조 - 용어들의 의미  (0) 2019.08.05
0805 CNN익히기  (0) 2019.08.05
0802 keras 실습 [초음파 광물 예측] - 과적합 피하기  (0) 2019.08.02
0802 keras 실습 [아이리스 분류문제]  (0) 2019.08.02
0802 keras 실습 [파마 인디언 데이터 분석하기]  (0) 2019.08.02
    '딥러닝' 카테고리의 다른 글
    • 0805 신경망의 구조 - 용어들의 의미
    • 0805 CNN익히기
    • 0802 keras 실습 [초음파 광물 예측] - 과적합 피하기
    • 0802 keras 실습 [아이리스 분류문제]
    피곤핑
    피곤핑

    티스토리툴바