일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- index
- DFS
- pip
- GitHub
- 삼성소프트웨어멤버십
- Numpy
- E-P1
- keras
- RNN
- LSTM
- SciPy
- GT-S80
- Lotto
- pandas
- 알고리즘
- mariadb
- pycharm
- Button
- mean
- dataframe
- install
- synology
- SPL
- Splunk
- Series
- CNN
- ipad
- javascript
- Python
- imread
Archives
- Today
- Total
잠토의 잠망경
5장 02 -케라스로 구현하는 RNN(순환신경망) 본문
GITHUB
https://github.com/yiwonjae/Project_Book_002/blob/master/ch05/p194.py
0. 목표
항공사 탑승객의 수요를 예측한다.
1. DATA
# Data Read
import pandas as pd
fname='data.txt'
dataset = pd.read_csv(fname, usecols=[1],
engine='python',
skipfooter=3)
data = dataset.values.reshape(-1)
ShowMeDrawData(data)
data는 local data를 활용한다.
panda를 활용하여 csv file을 read한다.
그리고 values.reshape(-1) 통해서 data를 추출한다.
2. DATA 정제
X
# 정규화
# LSTM 신경망은 data가 -1~1 사이의 값을 갖고 있어야 한다.
import numpy as np
data_dn = (data - np.mean(data))/np.std(data)/5
ShowMeDrawData(data_dn)
data를 -1~1 사이로 정규화 한다.
Y
위와 동일
train/test
# data 정제
# 한 data당 12point로 data를 갖고 온다.
x, y = getXy(data_dn, D=12)
# train, Test 나누기
from sklearn import model_selection
x_train, x_test, y_train, y_test = model_selection.train_test_split(x, y, test_size=0.2, random_state=42)
print(x_train.shape, y_train.shape) #(104, 12, 1) (104,)
print(x_test.shape, y_test.shape) #(26, 12, 1) (26,)
3. 학습
# model 만들기
from keras import layers
from keras.layers import LSTM, Dense
from keras.models import Model
shape = x_train.shape[1:]
m_x = layers.Input(shape=shape) # 12
m_h = layers.LSTM(10)(m_x)
m_y = layers.Dense(1)(m_h)
model = Model(m_x, m_y)
model.compile('adam', 'mse')
model.summary()
history = model.fit(x_train, y_train,
epochs=400,
validation_data=(x_test, y_test), verbose=2)
ShowMeDrawLoss(history)
pred = model.predict(x_test)
ShowMeDrawpred(y_test, pred)
LSTM을 활용하며 optimizer는 adam이고 loss 평가는 mse이다.
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 12, 1) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 10) 480
_________________________________________________________________
dense_1 (Dense) (None, 1) 11
=================================================================
Total params: 491
Trainable params: 491
Non-trainable params: 0
_________________________________________________________________
Process finished with exit code 0
4. 표시
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
def ShowMeDrawData(data):
plt.plot(data)
plt.show()
def ShowMeDrawLoss(history):
loss = history.history['loss']
val_loss = history.history['val_loss']
size = len(loss)
plt.plot(range(size), loss, 'bo')
plt.plot(range(size), val_loss, 'r+')
plt.show()
def ShowMeDrawpred(r, p):
size = len(r)
plt.plot(range(size), r, 'bo')
plt.plot(range(size), p, 'r+')
plt.show()
pycharm의 경우 plt가 안뜨는 경우가 있어서 아래와 같이 미리 선언해줘야 한다.
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
실제와 예측을 비교한 그림이다.
Comments