오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-16 07:14
관리 메뉴

우노

[DL] Keras 단순 선형 회귀 튜토리얼 본문

AI/Deep Learning

[DL] Keras 단순 선형 회귀 튜토리얼

운호(Noah) 2020. 7. 29. 18:14

케라스로 구현하는 단순 선형 회귀 튜토리얼

from tensorflow.keras.models import Sequential # keras의 Sequential()을 임포트
from tensorflow.keras.layers import Dense # keras의 Dense()를 임포트
from tensorflow.keras import optimizers # keras의 옵티마이저를 임포트
import numpy as np # Numpy를 임포트

X=np.array([1,2,3,4,5,6,7,8,9]) # 공부하는 시간
y=np.array([11,22,33,44,53,66,77,87,95]) # 각 공부하는 시간에 맵핑되는 성적

# Sequential()로 model이라는 이름의 모델 객체을 만듭니다.
model=Sequential()

# 첫번째 인자 : 출력의 차원
# 두번째 인자 : 입력의 차원
# 이 실습은 1개의 실수 x를 가지고, 1개의 실수 y를 예측하는 단순 선형 회귀이기 때문에 각각 1을 가진다.
# 선형 회귀를 사용할 경우에 활성함수를 'linear' 로 기재합니다.
model.add(Dense(1, input_dim=1, activation='linear'))

# optimer로는 경사 하강법의 일종인 sgd(확률적 경사 하강법)을 사용
# 학습률(learning rate, lr)은 0.01로 합니다.
sgd=optimizers.SGD(lr=0.01)

# 손실 함수(Loss function)은 평균제곱오차 mse를 사용합니다.
model.compile(optimizer=sgd ,loss='mse',metrics=['mse'])

# 주어진 X와 y데이터에 대해서 오차를 최소화하는 작업을 300번 시도합니다.
model.fit(X,y, batch_size=1, epochs=300, shuffle=False)
  • epoch는 300이지만, 어느 순간 오차가 더 이상 줄어들지 않는데, 이는 오차를 최소화하는 가중치 W와 b를 찾았기 때문으로 추정이 가능합니다.
Epoch 1/300
9/9 [==============================] - 0s 37ms/step - loss: 294.9226 - mean_squared_error: 294.9226
... 중략 ...
Epoch 167/300
9/9 [==============================] - 0s 1ms/step - loss: 2.1460 - mean_squared_error: 2.1460
... 중략 ...
Epoch 300/300
9/9 [==============================] - 0s 1ms/step - loss: 2.1460 - mean_squared_error: 2.1460
  • 이제 모델을 사용해 9시간 30분을 공부했을 때의 시험 성적을 예측 해봅시다.
  • model.predict()은 학습이 완료된 모델이, 입력된 데이터에 대해서 어떤 값을 예측하는지를 보여줍니다.
  • 9시간 30분을 공부하면 약 98.5점을 얻는다고 예측하고 있습니다.
print(model.predict([9.5]))
# [[98.556465]]
Comments