실습데이터 : 와인의 종류 예측
- 이번 실습을 위해 사용되는 데이터들은 레드와인 샘플 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 |