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값을 준비하면 된다.
- 모델을 생성할 때는 얼마나 많은 레이어와 노드를 준비할 것인지에 대해 설계해야 한다.
딥러닝 모델을 실행 시키기 앞서 머신이 이해할 수 있도록 컴파일
- loss: 손실함수는 어떤 것을 사용할 것인가?
- mean_sequared_error 평균제곱법
- optimizer: 최적화 함수는?
- adam 옵티마이저
- metrics: 어떤방식
- accuracy(정확도)로 판정
model.compile(loss='mean_squared_error',optimizer='adam', metrics=['accuracy'])
딥러닝 모델 실행
- epochs : 몇번을 훈련시킬지 (epochs= 500 : 500번을 훈련)
- batch_size : 몇개씩 끊어서 작업할 것인지
- 10개의 데이터를 1개씩 잘라서 작업하게 되므로 1로 셋팅
- batch_size를 크게 잡을 경우 속도가 빨라지지만 정확도가 떨어질 수 있음
- batch_size를 작게 잡을 경우 속도가 떨어지지만 정확도가 올라갈 수 있음
- 너무많은 데이터에 너무 작은 batch_size는 오히려 정확도가 떨어질수 있음(overfitting 과적합)
model.fit(x, y, epochs= 500, batch_size=1)
딥러닝 최종결과 평가(evaluate)
- loss : 작을 수록 좋음
- 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)
딥러닝 케라스의 기본 구조
- 데이터준비
- 모델구성
- 컴파일훈련
- 평가, 예측
'책 > 딥러닝으로 걷는 시계열 예측' 카테고리의 다른 글
앙상블 (0) | 2020.11.29 |
---|---|
회귀모델 (0) | 2020.11.29 |