-
문장 입력 다중클래스분류 모델 레시피(순환 컨볼루션 신경망 모델)Keras 2018. 1. 6. 21:35
# 1. 패키지 불러오기
import matplotlib.pyplot as plt
from keras.datasets import reuters
from keras.utils import np_utils
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM, Flatten, Dropout
from keras.layers import Conv1D, MaxPooling1D
%matplotlib inline# 2. 데이터 생성하기
max_features = 15000
text_max_words = 120# 2.1 훈련 데이터, 시험 데이터 불러오기
(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=max_features)# 2.2 훈련 데이터와 검증 데이터 분리하기
x_val = x_train[7000:]
y_val = y_train[7000:]
x_train = x_train[:7000]
y_train = y_train[:7000]# 2.3 데이터 전처리 : 문장 길이 맞추기
x_train = sequence.pad_sequences(x_train, maxlen = text_max_words)
x_val = sequence.pad_sequences(x_val, maxlen = text_max_words)
x_test = sequence.pad_sequences(x_test, maxlen = text_max_words)# 2.4 One-hot 인코딩
y_train = np_utils.to_categorical(y_train)
y_val = np_utils.to_categorical(y_val)
y_test = np_utils.to_categorical(y_test)# 3. 모델 구성하기
model = Sequential()
model.add(Embedding(max_features, 128, input_length = text_max_words))
model.add(Dropout(0.2))
model.add(Conv1D(256, 3, padding = "valid", activation = "relu", strides = 1))
model.add(MaxPooling1D())
model.add(LSTM(128))
model.add(Dense(46, activation='softmax'))# 4. 모델 학습과정 설정하기
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])# 5. 모델 학습시키기
hist = model.fit(x_train, y_train, epochs = 10, batch_size = 64, validation_data = (x_val, y_val))# 6. 학습과정 살펴보기
fig, loss_ax = plt.subplots()
acc_ax = loss_ax.twinx()loss_ax.plot(hist.history["loss"], "blue", label = "Train Loss")
loss_ax.plot(hist.history["val_loss"], "red", label = "Validation Loss")
loss_ax.set_ylim([-0.2, 1.2])acc_ax.plot(hist.history["acc"], "purple", label = "Train Accuracy")
acc_ax.plot(hist.history["val_acc"], "green", label = "Validation Accuracy")
acc_ax.set_ylim([-0.2, 1.2])loss_ax.set_xlabel("epoch")
loss_ax.set_ylabel("loss")
acc_ax.set_ylabel("accurach")loss_ax.legend(loc = "upper left")
acc_ax.legend(loc = "lower left")plt.show()
# 7. 모델 평가하기
loss_and_metrics = model.evaluate(x_test, y_test, batch_size = 64)
print("## Evaluation Loss and Metrics ##")
print(loss_and_metrics)[출처] 블록과 함께하는 파이썬 딥러닝 케라스, 김태영 지음, DigitalBooks, p296~299
'Keras' 카테고리의 다른 글
Keras Cheat Sheet (0) 2018.01.09 Model.fit() 함수의 verbose (0) 2018.01.08 문장 입력 다중클래스분류 모델 레시피(컨볼루션 신경망 모델) (0) 2018.01.06 문장 입력 다중클래스분류 모델 레시피(순환 신경망 모델) (0) 2018.01.06 문장 입력 다중클래스분류 모델 레시피(다층퍼셉트론 신경망 모델) (0) 2018.01.06