Python

텐서플로우의 리그레션 문제 모델링 하는 코드

K2ODING 2021. 11. 30. 14:48
728x90
# 라이브러리 임포트 

import tensorflow.keras
from keras.models import Sequential
from keras.lavers import Dense
# 딥러닝을 이용한 모델링

model = Swquential()
X_train.shape # 첫번째 히든레이어의 인풋 레이어의 숫자 셋팅을 위해 확인
(400, 5)
# 첫번째 히든레이어 생성 : 이때는 인풋 레이어의 숫자도 셋팅해준다. input_dim = 5

model.add( Dense(units = 20, activation = 'relu', input_dim = 5 ) )
# 두번째 히든레이어 생성

model.add( Dense(units = 10, activation = 'relu'))
# 아웃풋 레이어 생성
# 리그레션 문제의 액티베이션 펑션은 linear 사용

model.add( Dense(units = 1, activation = 'linear'))
# 만든 모델을, 요약

model.summary()

# 결과값
Model: "sequential_1"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense_3 (Dense)             (None, 20)                120       
                                                                 
 dense_4 (Dense)             (None, 10)                210       
                                                                 
 dense_5 (Dense)             (None, 1)                 11        
                                                                 
=================================================================
Total params: 341
Trainable params: 341
Non-trainable params: 0
_________________________________________________________________​
# 옵티마이저는 'adam' 으로 하고, 로스펑션은 'mean_squared_error' 로 셋팅하여 컴파일

# 컴파일(Compile) ?
# 오차함수를 설정하고, 옵티마이저(그레디언트 디센트 알고리즘)를 설정한다.

# 옵티마이저는, 그레디언트 디센트 알고리즘을 개선한 것들 중에서 선택하면 된다.
# 그레디언트 디센트는, 오차가 최소가 될때의 W 값을 찾는 알고리즘이다.
# loss 는, 오차함수를 말한다.

model.compile(optimizer = 'adam', loss = 'mean_squared_error')
# 'mean_squared_error' = MSE
# 컴파일이 끝나면, 학습을 진행.

epoch_history = model.fit(X_train, y_train, batch_size=20, epochs=20 ) # 학습 데이터의 결과

# 출력
Epoch 1/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0210
Epoch 2/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0105
Epoch 3/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0079
Epoch 4/20
20/20 [==============================] - 0s 2ms/step - loss: 0.0062
Epoch 5/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0052
Epoch 6/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0044
Epoch 7/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0035
Epoch 8/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0028
Epoch 9/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0021
Epoch 10/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0016
Epoch 11/20
20/20 [==============================] - 0s 1ms/step - loss: 0.0012
Epoch 12/20
20/20 [==============================] - 0s 1ms/step - loss: 9.1913e-04
Epoch 13/20
20/20 [==============================] - 0s 2ms/step - loss: 7.3311e-04
Epoch 14/20
20/20 [==============================] - 0s 1ms/step - loss: 5.6759e-04
Epoch 15/20
20/20 [==============================] - 0s 1ms/step - loss: 4.6450e-04
Epoch 16/20
20/20 [==============================] - 0s 1ms/step - loss: 3.7364e-04
Epoch 17/20
20/20 [==============================] - 0s 1ms/step - loss: 3.1415e-04
Epoch 18/20
20/20 [==============================] - 0s 2ms/step - loss: 2.6817e-04
Epoch 19/20
20/20 [==============================] - 0s 1ms/step - loss: 2.4016e-04
Epoch 20/20
20/20 [==============================] - 0s 1ms/step - loss: 2.1935e-04
# 테스트셋으로 예측

y_pred = model.predict(X_test)

# MSE 계산
# MSE : 오차를 구하고, 제곱한 후, 평균을 구한다.
# Mean, Squared, Error

((y_test - y_pred) ** 2).mean()
# 출력
0.00033102419183589203
# 실제값과 예측값을 plot 으로 나타내기

plt.plot(y_test)
plt.plot(y_pred)

plt.legend(['Real','Pred'])
plt.show()