선형회귀(Linear Regression) 구현하기

텐서플로 버전 확인

import tensorflow as tf
tf.__version__

2.3.0

2버전대(2.*.*) 가 아닌 1버전이 설치가 되어있으면, 삭제후 재설치 해줍니다.

!pip uninstall tensorflow
!pip install tensorflow

필요 모듈 설정

import tensorflow as tf
import numpy as np

X, Y 샘플 데이터 입력

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]

변수 선언, 가중치(기울기) W, 편향(절편), 학습률(learning_rate)

w = tf.Variable(tf.random.normal([1]))
b = tf.Variable(tf.random.normal([1]))
learning_rate = 0.001

경사 하강법 알고리즘(GradienTape : 자동 미분 API) 사용

with tf.GradientTape() as tape:
    hypothesis = w * x_data + b
    diff = tf.square(hypothesis - y_data)
    cost = tf.reduce_mean(diff)

경사 하강법에 따른 변수 업데이트

w_grad, b_grad = tape.gradient(cost, [w, b])
w.assign_sub(learning_rate * w_grad)
b.assign_sub(learning_rate * b_grad)

풀코드

import tensorflow as tf
import numpy as np

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]

w = tf.Variable(tf.random.normal([1]))
b = tf.Variable(tf.random.normal([1]))
learning_rate = 0.001

for i in range(50001):
    with tf.GradientTape() as tape:
        hypothesis = w * x_data + b
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))
    new_w, new_b = tape.gradient(cost, [w, b])
    w.assign_sub(learning_rate * new_w)
    b.assign_sub(learning_rate * new_b)
    if i % 500 == 0:
      print(f'Step : {i}, Cost : {int(cost)}, Weight : {w.numpy()[0]}, Bias : {b.numpy()[0]}')

temp_x = 18.
print()
print(f"x가 {temp_x} 일 때, y의 예측값 :", int(w * temp_x + b))
반응형

+ Recent posts