1. 모델 저장과 재사용
- 학습이 끝난 후 테스트해 본 결과가 만족스러울 때 이를 모델로 저장하여 새로운 데이터에 사용 가능
1) 학습 결과 모델로 저장하기
from keras.models import load_model
model.save('my_model.h5')
2) 저장한 모델 불러오기
model=load_model('my_model.h5')
Code)
from keras.models import Sequential, load_model
from keras.layers.core import Dense
from sklearn.preprocessing import LabelEncoder
import pandas as pd
import numpy
import tensorflow as tf
# seed 값 설정
seed = 0
numpy.random.seed(seed)
tf.random.set_seed(3)
df = pd.read_csv('../dataset/sonar.csv', header=None)
'''
print(df.info())
print(df.head())
'''
dataset = df.values
X = dataset[:,0:60]
Y_obj = dataset[:,60]
e = LabelEncoder()
e.fit(Y_obj)
Y = e.transform(Y_obj)
# 학습셋과 테스트셋을 나눔
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=seed)
model = Sequential()
model.add(Dense(24, input_dim=60, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['accuracy'])
model.fit(X_train, Y_train, epochs=130, batch_size=5)
model.save('my_model.h5') # 모델을 컴퓨터에 저장
del model # 테스트를 위해 메모리 내의 모델을 삭제
model = load_model('my_model.h5') # 모델을 새로 불러옴
print("\n Test Accuracy: %.4f" % (model.evaluate(X_test, Y_test)[1])) # 불러온 모델로 테스트 실행
2. k겹 교차 검증
- K겹 교차 검증
- 데이터셋을 여러 개로 나누어 하나씩 테스트셋으로 사용하고 나머지를 모두 합해서 학습셋으로 사용하는 방법
- 알고리즘을 충분히 테스트하였어도 데이터가 충분치 않으면 좋은 결과를 내기 어렵기 때문에 사용
- k겹 교차 검증을 사용하면 가지고 있는 데이터의 100%를 테스트 셋으로 사용 가능
from sklearn.model_selection import StratifiedKFold
n_fold=10
skf=StratifiedKFold(n_splits=n_fold,shuffle=True,random_state=seed)
- StratifiedKFold()
- 데이터를 원하는 숫자만큼 쪼개 각각 학습셋과 테스트셋으로 사용되게 만드는 함수
- 위 코드는 10개의 파일로 쪼개 테스트하는 10겹 교차 검증
Code)
from keras.models import Sequential
from keras.layers.core import Dense
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import StratifiedKFold
import numpy
import pandas as pd
import tensorflow as tf
# seed 값 설정
seed = 0
numpy.random.seed(seed)
tf.random.set_seed(3)
df = pd.read_csv('../dataset/sonar.csv', header=None)
dataset = df.values
X = dataset[:,0:60]
Y_obj = dataset[:,60]
e = LabelEncoder()
e.fit(Y_obj)
Y = e.transform(Y_obj)
# 10개의 파일로 쪼갬
n_fold = 10
skf = StratifiedKFold(n_splits=n_fold, shuffle=True, random_state=seed)
# 빈 accuracy 배열
accuracy = []
# 모델의 설정, 컴파일, 실행
for train, test in skf.split(X, Y):
model = Sequential()
model.add(Dense(24, input_dim=60, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['accuracy'])
model.fit(X[train], Y[train], epochs=100, batch_size=5)
k_accuracy = "%.4f" % (model.evaluate(X[test], Y[test])[1])
accuracy.append(k_accuracy)
# 결과 출력
print("\n %.f fold accuracy:" % n_fold, accuracy)
- 10 x 100 에포크를 수행하고 결과를 각 테스트 별로 보여준다.
'ML > 모두의 딥러닝' 카테고리의 다른 글
15장) 선형 회귀 적용하기 (0) | 2023.07.14 |
---|---|
14장) 베스트 모델 만들기 (0) | 2023.07.13 |
13-1장) 과적합 피하기 (0) | 2023.07.11 |
12장) 다중 분류 문제 해결하기 (0) | 2023.07.11 |
11장) 데이터 다루기 (0) | 2023.07.11 |