Honey cell_1
레드와인과 화이트 와인을 구분하는 실험을 하기 위해 이용하여 잘 구분하는 모델을 만들어보도록 한다.
df_pre = pd.read_csv(’../dataset/wine.csv’, header=None)
df = df_pre.sample(frac=1)
sample( ) 함수는 원본데이터에서 정해진 비율만큼 뽑아오는 함수로 frac=1이라고 매개변수를 주면 100%를 불러오고 0.5로 지정하면 50%만 랜덤으로 불러온다. frac은 fraction 의 줄임말인 것 같은데 fraction은 쪼개다, 분수..정도의 의미가 있어 사용한 것 같다.
print(df.info()) 를 통해 info()로 전체정보를 출력해보면
이러한 결과가 나오는데 info() 함수가 조금 생소하다. 어떤 원리로 출력이 되는 건지 좀 더 자세히 알아보면!
데이터에 대한 간략한 설명과 특히 전체 행 수, 각 특성의 데이터 타입과 널 null이 아닌 값의 개수를 확인하는 데 유용하다고 나와있는데 실제로 출력을 해보니까 각 필드(열)의 정보를 표로 출력해주고 해당 필드를 이루는 데이터의 개수, null의 여부, 데이터 타입 등을 출력해주는 함수인 것 같다.
데이터의 특징을 살펴보았고 해당 데이터를 이용해 12개의 정보를 가지고 13번째 클래스를 맞추는 모델을 생성해보면
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
# seed 값 설정 141p
seed = 0
numpy.random.seed(seed)
tf.set_random_seed(seed)
# 데이터 입력
df_pre = 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]))
원래는 save() 함수와 load_model()을 사용해왔는데 모델을 그냥 저장하는 것이 아니라 에포크(epoch)마다 모델의 정확도를 함께 기록하면서 저장하기 위해 케라스의 콜백 함수 중 ModelCheckpoint 함수를 이용해 모델을 저장한다. 새로운 저장방식저장 방식! 이니까 기억하기
(일종의 train의 log파일을 저장한다고 생각하기)
hdf5 데이터 파일 경로로 생성하겠다!
- hdf5 파일 형식이란 계층적 데이터 형식(Hierarchical Data Format)은는 HDF Group에 의해 관리되고 있는 대용량의 데이터를 저장하기 위한 파일 형식
모델이 학습되는 과정을 history 변수를 만들어 저장한다. 긴 학습의 예를 지켜 보기 위해 에포크(epoch)를 3500으로 조정하였다. 시간이 너무 오래 걸리지 않도록 sample() 함수를 이용하여 전체 샘플 중 15%만 불러오게 하고, 배치 크기는 500으로 늘려 한 번 딥러닝을 가동할 때 더 많이 입력되게끔 했습니다. 불러온 샘플 중 33%는 분리하여 테스트셋으로 사용하였습니다.
오늘의 Q(Question)_데이터가 6400개 정도 였는데 15퍼센트만 가지고오면 대략 974개 인데 33퍼센트는 데스트 셋으로 쓰고 66퍼센트를 train데이터로 사용하면 대략 653개가 된다. bach size가 500 이 되니까 188p를 보면 에포크(epoch)한번에 500번을 도는건가? 아니면 500 개의 데이터를 사용한다는 것인가??