[모두의 딥러닝] 7. 머신 러닝 용어, 텐서플로(tensorflow), 케라스(keras) API

머신 러닝 용어

  • 가설 함수(hypothesis) - H(x)

: 문제를 해결하기 위해 가정하는 식 (ex.y = ax + b)

 

  • 가중치(weight)

: y = ax + b에서 변수 x에 어느 정도의 가중치를 곱하는지 결정하는 기울기 a

 

  • 편향(bias)

: y = ax + b에서 데이터의 특성에 따라 따로 부여되는 값 b

 

머신 러닝에서 y = ax + b => H(x) = wx + b

 

  • 가중합

: 입력 값과 가중치를 모두 곱한 후 바이어스(bias)를 더한 값

 

  • 활성화 함수(activation function)

: 입력된 값을 다음 층으로 넘길 때 각 값을 어떻게 처리할지를 결정하는 함수

: 가중합의 결과를 0 또는 1로 판단하는 함수

 

  • 손실 함수(loss function)

: 실제 값과 예측 값 사이의 오차에 대한 식 (ex.평균 제곱 오차)

 

  • 옵티마이저(optimizer)

: 딥러닝 모델의 학습 과정에서 손실 함수를 최소화하기 위해 모델의 가중치를 업데이트하는 알고리즘 (ex.경사 하강법)

 

 

 

텐서플로에서 실행하는 단순 선형 회귀 - 파이썬 코드로 구현

1. 환경 및 데이터 준비

import numpy as np
import matplotlib.pyplot as plt

# 텐서플로의 케라스 API에서 필요한 함수들을 불러옴
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

 

 

2.  모델 실행

- 가설 함수 : H(x) = wx + b

- 출력 값: 출력 값(성적)이 하나이므로 Dense() 함수의 첫 번째 인자에 1 설정

- 입력 변수 : 입력 변수(학습 시간)가 하나이므로 input_dim=1 설정

- 활성화 함수 : 선형 회귀를 다루고 있으므로 activation='linear' 설정

model = Sequential()

# 출력 값, 입력 변수, 분석 방법에 맞게끔 모델 설정
model.add(Dense(1, input_dim=1, activation='linear'))

 

- 옵티마이저 : 경사 하강법을 실행하려면 optimizer='sgd' 설정

- 손실 함수 : 평균 제곱 오차를 사용하려면 loss='mse' 설정

# 오차 수정을 위해 경사 하강법(sgd)을, 오차의 정도를 판단하기 위해 평균 제곱 오차(mse)를 사용
model.compile(optimizer='sgd', loss='mse')

 

- 반복 횟수 : epochs에 반복 횟수 입력

# 오차를 최소화하는 과정을 2000번 반복
model.fit(x, y, epochs=2000)

 

3. 그래프로 확인

plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')
plt.show()

 

4. 모델 테스트

hour = 7
prediction = model.predict([hour])
print("%.f시간을 공부할 경우의 예상 점수는 %.02f점입니다." % (hour, prediction))
7시간을 공부할 경우의 예상 점수는 95.12점입니다.

 

 

 

텐서플로에서 실행하는 다중 선형 회귀 - 파이썬 코드로 구현

- 단순 선형 회귀와의 차이점

: 입력 변수가 2개가 되었으므로 input_dim=2 설정

# 1. 환경 및 데이터 준비
import numpy as np
import matplotlib.pyplot as plt

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

x = np.array([[2, 0], [4, 4], [6, 2], [8, 3]])
y = np.array([81, 93, 91, 97]) 

# 2. 모델 실행
model = Sequential()

# 입력 변수가 2개(학습 시간, 과외 시간)이므로 input_dim에 2를 입력
model.add(Dense(1, input_dim=2, activation='linear'))
model.compile(optimizer='sgd' ,loss='mse')

model.fit(x, y, epochs=2000)

# 3. 모델 테스트
# 임의의 학습 시간과 과외 시간을 집어넣어 점수를 예측하는 모델을 테스트

hour = 7
private_class = 4
prediction = model.predict([[hour, private_class]])

print("%.f시간을 공부하고 %.f시간의 과외를 받을 경우, 예상 점수는 %.02f점입니다" % (hour, private_class, prediction))
7시간을 공부하고 4시간의 과외를 받을 경우, 예상 점수는 97.53점입니다

 

 

 

'모두의 딥러닝 개정 3판'의 내용과 https://github.com/taehojo/deeplearning의 코드 참고