2021. 8. 19. 18:54ㆍDeep Learning
딥러닝_Linear Regression Implementation
선형회귀모델
Cost Function 은 실제값과 모델값의 차이를 수치화한 함수이다.
Linear Regression Implementation의 모델은 다음과 같다.
Model : H(x) = Wx+b
이 모델 손실함수를 최소화하는 방법이 Gradient Descent Method(경사하강법)이다. 경사하강법은 경사(기울기)를 측정한 다음 밑으로 하강하는 방식이다. 편미분하면 기울기가 나오고 기울기가 0에 가까울 수록 cost가 가장 작은 값에 수렴한다.
경사하강법은 convex function에만 유용하다. 우리의 목적은 global cost mean을 찾는 것인데 local cost minimum에서 편미분이 0이되어 업데이트가 더 이상 되지 않기 때문이다.
선형회귀 모델에서는 행렬형태의 곱으로 다변수 모델도 가능하다.
!pip install tensorflow==1.15
import tensorflow as tf
# 데이터 가공 # 학습시킬 데이터 x_data = [[1,1], [2,2], [3,3]] # input y_data = [[10], [20], [30]] # output # 데이터 값을 넣는 구조, 데이터를 가져오는 형식 X = tf.placeholder(tf.float32, shape=[None,2]) # 데이터를 가져올 때마다 x값 2개씩 Y = tf.placeholder(tf.float32, shape=[None,1]) # 데이터를 가져올 때다다 y값 1개씩 # 계속 업데이트, 학습을 통해 찾아야함 W = tf.Variable(tf.random_normal([2,1])) b = tf.Variable(tf.random_normal([1])) # 모델링의 핵심 model = tf.matmul(X,W)+b #모델 만들기 #matmul 은 행렬의 곱 cost = tf.reduce_mean(tf.square(model - Y)) #cost 식 #square 제곱 # reduce_mean 평균 train = tf.train.GradientDescentOptimizer(0.01).minimize(cost) # cost 값을 최소화하는 방식으로 훈련 #편미분 구하지 않고 구현가능 #0.01은 learning rate with tf.Session() as sess: # section을 만들어줌 sess.run(tf.global_variables_initializer()) #코드 돌리기 전에 초가화 시키기 깨끗! #Training for step in range(2001): # 2001번 돌꺼임 c, W_, b_,_ = sess.run([cost, W, b, train], #train은 넘어가는 과정이라서 출력값 없음_ #section 실행 feed_dict={X: x_data, Y:y_data}) #X에는 x_data를 넣어주고 Y에는 y_data 넣어주기 print(step, c, W_, b_) #Testing print(sess.run(model, feed_dict={X:[[4,4]]})) # test를 print
2000번 훈련한 것을 바탕으로 모델 세우고, 이를 바탕으로 새로운 input인 [4,4]의 output을 출력한다. 입력과 출력 데이터를 학습 시켜서 새로운 값에 대한 예측이 가능한 모델이다.
결과
...
1994 6.5101035e-06 [[5.803497 ] [4.1935773]] [0.00672863]
1995 6.4745327e-06 [[5.8035007] [4.193581 ]] [0.00671108]
1996 6.4414708e-06 [[5.8035045] [4.193585 ]] [0.00669358]
1997 6.4099754e-06 [[5.8035083] [4.1935887]] [0.00667614]
1998 6.3746797e-06 [[5.803512 ] [4.1935925]] [0.00665875]
1999 6.341874e-06 [[5.803516 ] [4.1935964]] [0.00664139]
2000 6.3091525e-06 [[5.8035197] [4.1936 ]] [0.00662407] [[39.995102]]
2000번의 training 결과 39.995라는 우리가 예상하는 40과 유사한 결과가 나온다. training 이 더 필요하다고 생각되며 2000번을 3000, 5000 등으로 변경하면 된다.
Reference
https://www.ibm.com/cloud/learn/gradient-descent
'Deep Learning' 카테고리의 다른 글
딥러닝_합성곱 신경망 (Convolutional Neural Network, CNN) (0) | 2021.08.26 |
---|---|
딥러닝_Softmax Classification (0) | 2021.08.21 |
딥러닝_Binary Classification (0) | 2021.08.20 |