[TensorFlow] Linear Regression Start

BioinformaticsAndMe










[TensorFlow] Linear Regression

: TensorFlow 2.0 에서 수행되는 선형회귀 low-level approach 과정

# '__future__' : python 2에서 python 3 문법 사용 가능

from __future__ import absolute_import, division, print_function

# 텐서플로우, 넘파이 라이브러리 임포트

import tensorflow as tf import numpy as np rng = np.random # 난수 생성을 위한 변수 준비

# 학습 파라미터 설정

learning_rate = 0.01 # 학습률 training_steps = 1000 # train될 총 스텝 display_step = 50 # 학습과정에서 보여질 스텝

# Training 데이터 생성 (numpy 배열)

X = np.array([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167, 7.042,10.791,5.313,7.997,5.654,9.27,3.1]) Y = np.array([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221, 2.827,3.465,1.65,2.904,2.42,2.94,1.3]) n_samples = X.shape[0] # shape 함수로 array 차원 확인 print(n_samples)

17

# 처음 학습에 사용될 Weight와 Bias 값을 랜덤하게 생성

W = tf.Variable(rng.randn(), name="weight") # tf.Variable: 텐서플로우 변수 생성 b = tf.Variable(rng.randn(), name="bias") # rng.randn: 임의의 숫자(난수) 생성 # Linear regression (Wx + b) 수식 정의 def linear_regression(x): return W * x + b # 손실함수인 Mean Square Error (MSE;평균 제곱 오차) 수식 정의 def mean_square(y_pred, y_true): return tf.reduce_sum(tf.pow(y_pred-y_true, 2)) / (2 * n_samples) # Stochastic Gradient Descent (SGD;확률적경사하강법) 알고리즘 optimizer = tf.optimizers.SGD(learning_rate)

# 학습 알고리즘 최적화 과정 정의

def run_optimization():

# 텐서플로우는 자동 미분(주어진 입력 변수에 대한 연산의 gradient를 계산하는 것)을 위한 tf.GradientTape 함수 사용

with tf.GradientTape() as g: pred = linear_regression(X) loss = mean_square(pred, Y) # gradients 계산 gradients = g.gradient(loss, [W, b]) # gradients에 따라 Weight(W)와 bias(b) 업데이트 optimizer.apply_gradients(zip(gradients, [W, b]))

# 주어진 스텝에 맞춰 training 시작

for step in range(1, training_steps + 1):

# Weight(W)와 bias(b) 업데이트를 위해 사전 정의된 최적화 과정 실행 run_optimization()

# display_step(50, 100, 150...)에서 적용 중인 파라미터값 출력 if step % display_step == 0: pred = linear_regression(X) loss = mean_square(pred, Y) print("step: %i, loss: %f, W: %f, b: %f" % (step, loss, W.numpy(), b.numpy()))

step: 50, loss: 0.133085, W: 0.117284, b: 1.751286 step: 100, loss: 0.126663, W: 0.125200, b: 1.695165 step: 150, loss: 0.120975, W: 0.132650, b: 1.642350 step: 200, loss: 0.115937, W: 0.139661, b: 1.592647 step: 250, loss: 0.111476, W: 0.146259, b: 1.545872 step: 300, loss: 0.107524, W: 0.152467, b: 1.501854 step: 350, loss: 0.104025, W: 0.158310, b: 1.460430 step: 400, loss: 0.100926, W: 0.163809, b: 1.421446 step: 450, loss: 0.098182, W: 0.168984, b: 1.384759 step: 500, loss: 0.095751, W: 0.173854, b: 1.350234 step: 550, loss: 0.093598, W: 0.178437, b: 1.317743 step: 600, loss: 0.091692, W: 0.182750, b: 1.287166 step: 650, loss: 0.090003, W: 0.186809, b: 1.258391 step: 700, loss: 0.088508, W: 0.190628, b: 1.231312 step: 750, loss: 0.087184, W: 0.194223, b: 1.205827 step: 800, loss: 0.086011, W: 0.197606, b: 1.181845 step: 850, loss: 0.084972, W: 0.200789, b: 1.159276 step: 900, loss: 0.084052, W: 0.203785, b: 1.138036 step: 950, loss: 0.083237, W: 0.206604, b: 1.118049 step: 1000, loss: 0.082516, W: 0.209258, b: 1.099238

# Linear regression(선형회귀) 결과 시각화

import matplotlib.pyplot as plt # matplotlib: 차트(chart)나 플롯(plot)으로 데이터를 시각화하는 라이브러리

plt.plot(X, Y, 'ro', label='Original data') plt.plot(X, np.array(W * X + b), label='Fitted line') plt.legend()

plt.show()





#참고 - [TensorFlow] 용어

ㄱ) Epoch:  전체 데이터를 한 바퀴 돌며 학습하는 것(1 epoch)

ㄴ) Step:  weight와 bias를 1회 업데이트하는 것(1 step)

ㄷ) Batch size:  1회 step에서 사용된 데이터 수





#Reference

1) https://github.com/aymericdamien/TensorFlow-Examples/tree/master/tensorflow_v2

2) https://m.blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=221333529176&proxyReferer=https%3A%2F%2Fwww.google.com%2F

3) https://www.tensorflow.org/tutorials/customization/autodiff?hl=ko






[TensorFlow] Linear Regression End

BioinformaticsAndMe

'Machine Learning' 카테고리의 다른 글

랜덤포레스트(Random Forest)  (0) 2019.10.17
[TensorFlow] Logistic Regression  (0) 2019.10.09
[TensorFlow] 기본 연산  (0) 2019.10.04
[TensorFlow] 문자열 출력  (0) 2019.10.03
경사하강법 종류  (0) 2019.09.26

+ Recent posts