본문 바로가기

책/딥러닝으로 걷는 시계열 예측

딥러닝 시작

1에서 10까지 예측 모델 구하기

 소스의 전체 내용

import numpy as np
# 데이터 생성
x = np.array([1,2,3,4,5,6,7,8,9,10])

# 결괏값이 들어가는 y 데이터를 준비
y = np.array([1,2,3,4,5,6,7,8,9,10])


from keras.models import Sequential
from keras.layers import Dense

# 딥러닝 모델을 순차적으로 구성하겠다는 뜻
model = Sequential()

# 순차적 구성 모델에 Dense layer를 추가하겠다는 의미
model.add(Dense(1, input_dim=1, activation='relu'))



model.compile(loss='mean_squared_error',optimizer='adam',
metrics=['accuracy'])
model.fit(x, y, epochs= 500, batch_size=1)
loss, acc = model.evaluate(x, y, batch_size=1)
print("loss : ", loss)
print("acc : ", acc)

 

데이터 준비

import numpy as np
# 데이터 생성
x = np.array([1,2,3,4,5,6,7,8,9,10])

# 결괏값이 들어가는 y 데이터를 준비
y = np.array([1,2,3,4,5,6,7,8,9,10])

 

딥러닝 회귀모델의 형태

# 딥러닝의 1차함수 모델은 회귀모델 이라고 함
y = wx + b
h(x) = wx + b

 

  • 빅 데이터 등으로 준비한 x값과  y값을 가지고 훈련 시켜서 w값(weight) 과 b값(bais)을 구하는 행위의 반복
    • x : 입력값
    • y : 결과값
    • w : 가중치
    • b : 절편
    • Cost(비용): 컴퓨터에서 한가지 더 제공하는 것. Cost 값은 낮을 수록 좋다.
    • accuracy, predict : 아주 정확한 값이 예측되었는지 확인
# 딥러닝 모델을 순차적으로 구성하겠다는 뜻
model = Sequential()

# 순차적 구성 모델에 Dense layer를 추가하겠다는 의미
model.add(Dense(1, input_dim=1, activation='relu'))

 

딥러닝은 보통 아래와 같은 방식으로 도식화 되어 있다.

  • 동그란부분을 노드(node) 각 층을 레이어(layer) 라고 한다.
  • 일반적으로 노드가 많고 레이어가 깊을 수록 더 잘 훈련을 한다고 한다.
  • 데이터를 준비할 때 x값과 y값을 준비하면 된다.
  • 모델을 생성할 때는 얼마나 많은 레이어와 노드를 준비할 것인지에 대해 설계해야 한다.

딥러닝 모델을 실행 시키기 앞서 머신이 이해할 수 있도록 컴파일

  1. loss: 손실함수는 어떤 것을 사용할 것인가?
    • mean_sequared_error 평균제곱법
  2. optimizer: 최적화 함수는?
    • adam 옵티마이저
  3. metrics: 어떤방식
    • accuracy(정확도)로 판정
model.compile(loss='mean_squared_error',optimizer='adam', metrics=['accuracy'])

 

딥러닝 모델 실행

  1. epochs : 몇번을 훈련시킬지 (epochs= 500 : 500번을 훈련)
  2. batch_size : 몇개씩 끊어서 작업할 것인지
    1. 10개의 데이터를 1개씩 잘라서 작업하게 되므로 1로 셋팅 
    2. batch_size를 크게 잡을 경우 속도가 빨라지지만 정확도가 떨어질 수 있음
    3. batch_size를 작게 잡을 경우 속도가 떨어지지만 정확도가 올라갈 수 있음
    4. 너무많은 데이터에 너무 작은 batch_size는 오히려 정확도가 떨어질수 있음(overfitting 과적합)
model.fit(x, y, epochs= 500, batch_size=1)

 

딥러닝 최종결과 평가(evaluate)

  1. loss : 작을 수록 좋음
  2. acc : 1에 가까울 수록 좋음
loss, acc = model.evaluate(x, y, batch_size=1)
print("loss : ", loss)
print("acc : ", acc)

 

결과

C:\Users\jw-labtop\anaconda3\envs\deeplearning\python.exe C:/JetBrains/python_workspace/deeplearning/ch02/ch02_p035.py
2020-11-08 16:59:08.875682: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-11-08 16:59:08.876346: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2020-11-08 16:59:12.267577: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'nvcuda.dll'; dlerror: nvcuda.dll not found
2020-11-08 16:59:12.268182: W tensorflow/stream_executor/cuda/cuda_driver.cc:312] failed call to cuInit: UNKNOWN ERROR (303)
2020-11-08 16:59:12.279480: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: DESKTOP-S13NJLN
2020-11-08 16:59:12.280398: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: DESKTOP-S13NJLN
2020-11-08 16:59:12.281528: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2020-11-08 16:59:12.541147: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x1ec245cf7a0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-11-08 16:59:12.542039: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
Epoch 1/500
10/10 [==============================] - 0s 766us/step - loss: 4.5528 - accuracy: 0.1000
Epoch 2/500
10/10 [==============================] - 0s 704us/step - loss: 4.3168 - accuracy: 0.1000

.....

Epoch 499/500
10/10 [==============================] - 0s 1ms/step - loss: 1.1099e-05 - accuracy: 0.1000
Epoch 500/500
10/10 [==============================] - 0s 997us/step - loss: 1.0517e-05 - accuracy: 0.1000
10/10 [==============================] - 0s 698us/step - loss: 1.0269e-05 - accuracy: 0.1000
loss :  1.0268525329593103e-05
acc :  0.10000000149011612

Process finished with exit code 0

 

101에서 110까지 예측 모델 구하기

데이터를 구성. 머신에게 훈련시킬 데이터와 판정할 데이터를 분리

  • 훈련용 데이터 : x_train, y_train
  • 평가용 데이터: x_test, y_test
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

x_train = np.array([1,2,3,4,5,6,7,8,9,10])
y_train = np.array([1,2,3,4,5,6,7,8,9,10])
x_test = np.array([101,102,103,104,105,106,107,108,109,110])
y_test = np.array([101,102,103,104,105,106,107,108,109,110])

 

모델을 구성

  • model.add(Dense(5, input_dim=1, activation='relu')) : 1개의 입력으로 5개의 노드로 출력을 의미
  • 딥러닝 케라스를 코딩하면서 모델링을 할 경우, 첫 라인에 입력과 출력의 수를 표현해주고 두 번째 라인부터는 출력만표현해주면 됨
  • model.add(Dense(3)) : 윗줄의 5개의 출력이 5개의 입력이 되고 다시 3개의 노드로 출력을 의미
  • model.add(Dense(1, activation='relu')) : 윗줄의 3개의 입력을 받아 1개로 출력을 의미
model = Sequential()
model.add(Dense(5, input_dim =1 , activation='relu'))
model.add(Dense(3))
model.add(Dense(1, activation='relu'))
model.summary()

 

지금까지의 코딩 실행결과

  • dense_1 에서 5개의 노드가 생성 됨
  • dense_2 에서 3개의 노드가 생성 됨
  • dense_3 에서 1개의 노드가 생성 됨
  • 파라미터의 총 갯수는? 32
    • 1st hidden params = (input(1) + bias(1)) * output(5) = (1+1) * 5 =10
    • 2rd hidden layer params = (input(5) + bias(1)) * ouput(3) = (5+1) * 3 = 18
    • 3rd hidden layer params = (input(3) + bias(1)) * output(1) = (3+1) * 1 = 4
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 5)                 10        
_________________________________________________________________
dense_1 (Dense)              (None, 3)                 18        
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 4         
=================================================================
Total params: 32
Trainable params: 32
Non-trainable params: 0
_________________________________________________________________

Process finished with exit code 0

 

컴파일

model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])

 

모델실행, loss, accuracy를 확인

model.fit(x_train, y_train, epochs=100, batch_size=1,
validation_data = (x_test, y_test))
loss, acc = model.evaluate(x_test, y_test, batch_size =1)
print("loss : ", loss)
print("acc : ", acc)

output = model.predict(x_test)
print("결과물 : \n", output)

 

 

딥러닝 케라스의 기본 구조

  1. 데이터준비
  2. 모델구성
  3. 컴파일훈련
  4. 평가, 예측

 

' > 딥러닝으로 걷는 시계열 예측' 카테고리의 다른 글

앙상블  (0) 2020.11.29
회귀모델  (0) 2020.11.29