NeuroWhAI의 잡블로그

[TensorFlow] 선형 회귀 본문

개발 및 공부/라이브러리&프레임워크

[TensorFlow] 선형 회귀

NeuroWhAI 2018. 1. 7. 18:35


으으 머신러닝이랑 관련없이 좀 이해가 안되는 부분이 있어서 오래 걸렸네요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import tensorflow as tf
 
# 입력, 목표 출력
x_data = [123]
y_data = [123]
 
# '[1]' Shape을 가지는 변수 W, b를 -1.0 이상 1.0 미만의 균등한 범위에서 랜덤값으로 초기화
= tf.Variable(tf.random_uniform([1], -1.01.0))
= tf.Variable(tf.random_uniform([1], -1.01.0))
 
# 입력, 목표 출력이 들어갈 플레이스홀더 생성
= tf.placeholder(tf.float32, name="X")
= tf.placeholder(tf.float32, name="Y")
 
# 목표 함수 정의
hypothesis = W * X + b
 
# 목표 함수의 비용을 계산하는 식 정의
cost = tf.reduce_mean(tf.square(hypothesis - Y))
 
# 학습률 0.1의 경사하강법을 사용하고 위에서 만든 cost의 값을 최소화하는 것을 목표로 설정
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
train_op = optimizer.minimize(cost)
 
with tf.Session() as sess:
    # 변수 초기화
    sess.run(tf.global_variables_initializer())
 
    for step in range(100):
        # 플레이스홀더에 값을 설정해주고 학습 실행 (현재 오류를 출력하기 위해서 cost도 넣음)
        _, cost_val = sess.run([train_op, cost], feed_dict={
            X: x_data,
            Y: y_data
        })
        print(step, cost_val, sess.run(W), sess.run(b))
 
    # 임의의 입력값에 제대로 원하는 값이 나오는지 확인
    print("\n=== Test ===")
    print("X: 5, Y: ", sess.run(hypothesis, feed_dict={X: 5}))
    print("X: 2.5, Y: ", sess.run(hypothesis, feed_dict={X: 2.5}))
 
cs


전체적인 흐름은 어렵지 않은데 reduce_mean이 어떻게 저렇게 동작하는게 가능한지 의문이 안풀려서;;

제가 제대로 알고있는지 모르겠는데 minimize(cost)를 하면 자동으로 cost 함수를 미분해서 파라미터를 조절하는데 필요한 값을 계산한다고 합니다.
참 대단..




Comments