-
시계열 수치입력 예측모델 레시피(다층퍼셉트론 신경망 모델)Keras 2018. 1. 2. 16:25
# 1. 사용할 패키지 불러오기
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.utils import np_utils
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
%matplotlib inline# 2. 함수 만들기
def create_dataset(signal_data, look_back = 1):
dataX, dataY = [], []
for i in range(len(signal_data) - look_back):
dataX.append(signal_data[i:(i + look_back), 0])
dataY.append(signal_data[(i + look_back), 0])return np.array(dataX), np.array(dataY)
look_back = 40
# 3. 데이터 핸들링
signal_data = np.cos(np.arange(1600)*(20*np.pi/1000))[:, None]# 3.1 데이터 전처리
scaler = MinMaxScaler(feature_range = (0, 1))
signal_data = scaler.fit_transform(signal_data)# 3.2 데이터 분리
train = signal_data[0:800]
val = signal_data[800:1200]
test = signal_data[1200:]# 3.3 데이터 생성
x_train, y_train = create_dataset(train, look_back)
x_val, y_val = create_dataset(val, look_back)
x_test, y_test = create_dataset(val, look_back)# 3.4 데이터 전처리
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
x_val = np.reshape(x_val, (x_val.shape[0], x_val.shape[1], 1))
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))x_train = np.squeeze(x_train)
x_val = np.squeeze(x_val)
x_test = np.squeeze(x_test)# 4. 모델 구성하기
model = Sequential()
model.add(Dense(32, input_dim = 40, activation = "relu"))
model.add(Dropout(0.3))
for i in range(2):
model.add(Dense(32, activation = "relu"))
model.add(Dropout(0.3))
model.add(Dense(1))# 5. 모델 학습과정 설정하기
model.compile(loss='mean_squared_error', optimizer='adagrad')# 6. 모델 학습시키기
hist = model.fit(x_train, y_train, epochs=200, batch_size=32, validation_data=(x_val, y_val))# 7. 학습과정 살펴보기
plt.plot(hist.history["loss"])
plt.plot(hist.history["val_loss"])
plt.ylim(0.0, 0.15)
plt.ylabel("loss")
plt.xlabel("epoch")
plt.legend(["train", "val"], loc = "upper left")
plt.show()# 8. 모델 평가하기
trainScore = model.evaluate(x_train, y_train, verbose = 0)
print("Train Score : ", trainScore)valScore = model.evaluate(x_val, y_val, verbose = 0)
print("Validation Score : ", valScore)testScore = model.evaluate(x_test, y_test, verbose = 0)
print("Test Score : ", testScore)# 9. 모델 사용하기
look_ahead = 250
xhat = x_test[0, None]
predictions = np.zeros((look_ahead, 1))for i in range(look_ahead):
prediction = model.predict(xhat, batch_size = 32)
predictions[i] = prediction
xhat = np.hstack([xhat[:, 1:], prediction])plt.figure(figsize = (12, 5))
plt.plot(np.arange(look_ahead), predictions, "red", label = "prediction")
plt.plot(np.arange(look_ahead), y_test[:look_ahead], label = "prediction")
plt.legend()
plt.show()[출처] 블록과 함께하는 파이썬 딥러닝 케라스, 김태영 지음, DigitalBooks, p253~260
'Keras' 카테고리의 다른 글
시계열수치입력 수치 예측 모델 레시피(상태유지 스택 순환신경망 모델) (0) 2018.01.03 시계열 수치입력 예측모델 레시피(순환신경망 모델) (0) 2018.01.02 영상입력 다중클래스분류모델(깊은 컨볼루션 신경망 모델) (0) 2018.01.02 영상입력 다중클래스분류모델 레시피(컨볼루션 신경망 모델) (0) 2018.01.02 영상입력 다중클래스분류모델 레시피(다층퍼셉트론 신경망 모델) (0) 2018.01.02