관리 메뉴

Storage Gonie

모두를 위한 딥러닝 제9강 ML lab 04-1: multi-variable linear regression을 TensorFlow에서 구현하기 (new) 본문

데이터 사이언스/모두를 위한 딥러닝

모두를 위한 딥러닝 제9강 ML lab 04-1: multi-variable linear regression을 TensorFlow에서 구현하기 (new)

Storage Gonie 2018. 9. 8. 17:51
반응형

# Multi-Variable Linear Regression 모델 생성(학습데이터 확장이 제한됨)

- 확장이 제한되는 이유는 학습데이터를 일일이 사람손으로 쳐주는 것도 그렇고, 매개변수 w의 개수가 늘어날 때 노가다 해주기가 힘들어짐


import tensorflow as tf

# 훈련데이터
# x1 x2 x3 y
# 73 80 75 152
# 93 88 93 185
# 89 91 90 180
# 96 98 100 196
# 73 66 70 142
x1_data = [73., 93., 89., 96., 73.]
x2_data = [80., 88., 91., 98., 66.]
x3_data = [75., 93., 90., 100., 70.]
y_data = [152., 185., 180., 196., 142.]

# feed_dict로 모델에 위의 데이터를 공급하기 위함
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
x3 = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

# 랜덤한 숫자로 초기화된 매개변수들
w1 = tf.Variable(tf.random_normal([1]), name='weight1')
w2 = tf.Variable(tf.random_normal([1]), name='weight2')
w3 = tf.Variable(tf.random_normal([1]), name='weight3')
b = tf.Variable(tf.random_normal([1]), name='bias')

# hypothesis 노드 선언(xw 곱셈순서 주의)
hypothesis = x1 * w1 + x2 * w2 + x3 * w3 + b

# cost/loss function 노드 선언
cost = tf.reduce_mean(tf.square(hypothesis - Y))

# train 노드 선언
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5) #1e-5 = 1*10^-5 = 0.00001
train = optimizer.minimize(cost)

sess = tf.Session()
# 위에서 tf.placeholder 또는 tf.Variable을 사용했으므로 이것 먼저 실행
sess.run(tf.global_variables_initializer())

# W 갱신(훈련) 100번 반복
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={x1: x1_data, x2: x2_data, x3: x3_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)

'''
0 Cost: 122671.4
Prediction:
[-151.81143 -194.13591 -185.2805 -200.98085 -151.74805]
10 Cost: 36.978657
Prediction:
[157.95276 178.22021 181.5862 198.52972 132.27493]
...
...
1990 Cost: 13.130109
Prediction:
[155.44531 181.72447 181.65694 198.8812 136.34274]
2000 Cost: 13.066046
Prediction:
[155.43224 181.7335 181.653 198.87782 136.35503]

'''

# Multi-Variable Linear Regression 모델 생성(학습데이터 확장이 가능함)

-연산과정 모두를 행렬 방식으로 표현해 준것이 아래와 같음

import tensorflow as tf

# 훈련데이터
# x1 x2 x3 y
# 73 80 75 152
# 93 88 93 185
# 89 91 90 180
# 96 98 100 196
# 73 66 70 142
x_data = [[73., 80., 75.], [93., 88., 93.], [89., 91., 90.], [96., 98., 100.], [73., 66., 70.]]
y_data = [[152.], [185.], [180.], [196.], [142.]]

# feed_dict로 모델에 위의 데이터를 공급하기 위함
X = tf.placeholder(tf.float32, shape=[None, 3]) # row는 무제한 가능하고 column은 3개인 행렬이 들어올 수 있다는 것
Y = tf.placeholder(tf.float32, shape=[None, 1]) # row는 무제한 가능하고 column은 1개인 행렬이 들어올 수 있다는 것

# 랜덤한 숫자로 초기화된 매개변수들
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

# hypothesis 노드 선언
hypothesis = tf.matmul(X, W) + b

# cost/loss function 노드 선언
cost = tf.reduce_mean(tf.square(hypothesis - Y))

# train 노드 선언
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5) #1e-5 = 1*10^-5 = 0.00001
train = optimizer.minimize(cost)

sess = tf.Session()
# 위에서 tf.placeholder 또는 tf.Variable을 사용했으므로 이것 먼저 실행
sess.run(tf.global_variables_initializer())

# W 갱신(훈련) 100번 반복
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={X: x_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)

'''
0 Cost: 93325.734
Prediction:
[[-110.1494 ]
[-147.48538]
[-137.31595]
[-151.42026]
[-114.84549]]
10 Cost: 43.046097
Prediction:
[[160.00769]
[177.27098]
[182.64726]
[197.01448]
[132.87134]]
...
...
1990 Cost: 14.551982
Prediction:
[[156.96066]
[180.90736]
[182.4332 ]
[197.21602]
[137.10072]]
2000 Cost: 14.47433
Prediction:
[[156.94592]
[180.91748]
[182.4287 ]
[197.21277]
[137.11398]]
'''


반응형
Comments