IT 프로그래밍/자료구조

텐서플로우와 Linear regression, Cost function

기술1 2024. 9. 3. 14:39

텐서플로우 구조

먼저 그래픽을 만듭니다.

 

그 다음 sess.run으로 실행시키는데요.

 

그리고 그래프를 업데이트 해주는 것입니다.

 

그래프 실행 값을 던져줄 때

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b
print(sess.run(adder_node, feed_dict = {a: 3, b: 4.5}))
print(sess.run(adder_node, feed_dict = {a: [1,3], b: [2.4]}))

이렇게 placeholder로 던져줄 수 있습니다. 

 

regression

(Linear)가설

Linear한 모델이 우리 데이터에 맞을 것이다 라고 가정을 합니다.

 

가정을 했을 때 Linear 즉 선을 긋습니다. 가능한 선이 어디인지 확인을 하는 것입니다.

Hx는 가설이 됩니다. Wx+b라는 공식이 나오게 되는데요. 이 선의 모양이 W와 b에 따라 선의 모양이 달라지는 것입니다. 우리는 가설을 이런 1차 방정식으로 될 것이라고 가설을 하는 것입니다. 

 

그러면 이렇게 나타난 선들 중에서 어떠한 것이 가장 잘 맞는 선일까를 알아내야 합니다. 

 

파란 선을 보면 H(x) = 1 * x + 0 이 됩니다. 따라서 W는 1 b는 0이 되는 것입니다. 

 

그런데 어떤 선이 좋은 가설일지 알 수 있을까요?

 

실제 데이터와 가설이 나타내는 데이터 점과의 거리를 비교

거리가 멀면 나쁜 것이고 거리가 작으면 좋은 것입니다. 이것을 linear regression에서는 Cost Function이라고 부릅니다. 가설과 실제 데이터가 얼마나 다른지 알려주는 것입니다. 

 

(H(x) - y)^2이 됩니다. 이런 경우 차이를 양수로 표현해주고 차이가 클 때 패널티를 주면서 차이를 작게 만들 수 있도록 만들어주는 것이며 이것이 cost function이라고 부릅니다.


그래프 코드 만드는법

1.그래프 구성

cost function 정리

 

 

x_train = [1,2,3]
y_train = [1,2,3]

W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = x_train * W + b

 

이렇게 W와 b를 만들어서 표현을 할 수 있습니다. 

cost = tf.reduce_mean(tf.square(hypothesis - y_train))

 

이런 식으로 그래프를 구성해줍니다.

 

2. Run/update graph and get result

#Launch the graph in a session
sess = tf.Session()

#Initializes globalvariables in the graph.
sess.run(tf.global_variable_initializer())

#Fit the Line
for step in range(2001):
	sess.run(train)
    if step % 20 == 0:
    	print(step, sess.run(cost), sess.run(W), sess.run(b))