텐서플로우

- 파이썬을 거의 모르는 사람도, 코드를 이해 가능할만큼, 함수와 기타 등등이 뭔지 정리함.

- 내가 강의할때 보거나 할것.

* 텐서플로우가 어떻게 돌아가는지에 대한 이해는 있어야함!

모르면 머신러닝 포스팅 lab 1&2 보기

 

import tensorflow as tf

'텐서플로우' 라는 패키지를 불러와서, 그 이름을 "tf" 라고 하자.

* as tf 안하면 tensorflow 관련 함수 호출할때 tensorflow.~~~ 해야되는데,

as tf 하면 tf.~~~하면 됨, 아주 간편함!

 

x_train = [1, 2, 3, 4]
y_train = [0,-1,-2,-3]

x,y값을 일단 선언해둠. (데이터를 이걸로 할거라 미리 저장해 놓는 것)

 

# Placeholder 설정
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

# 변수 설정
W = tf.Variable(tf.random_normal([1]))
b = tf.Variable(tf.random_normal([1]))

tf.Placeholder 뜻 : 지금 미리 값을 넣어두는 것이 아니고, 나중에 sess.run 할때 데이터를 집어넣을 것임.

뭔소린지 모르겠다면 머신러닝 포스팅 lab 1&2로 가서 확인할 것.

 

tf.Variable 뜻 : 텐서플로우의 변수선언.

tf.random_normal([1])) 뜻 : [1] 크기의 랜덤한 (정규분포를 따르는) 수를 생성함.

Linear regression 코드이므로, W,b값이 각각 하나이기 때문에 [1] 씩만 생성함.

 

hypothesis = X * W + b

 Linear regressionHypothesis function H(x) = W*x + b 를 hypothesis로 선언함.

 

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

Cost function이었던

$$(H(x) - y)^2 을 각각의 데이터 m개에 대하여 모두 더하고, m으로 나누어 평균을 구함.$$

을 구현한 것.

 

tf.square 뜻 : 제곱.

 

tf.reduce_mean 뜻 : 평균.

 

* hypothesis 는 x*W + b이고, x 는 크기 4의 배열이라 계산된 총 크기는 [4],

y도 [4] 이므로 둘이 빼면 그냥 다 더한거랑 똑같은 게 됨.

 

train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)

Gradient Descent 방법을 이용하여 train함.

minimize(cost) : cost를 최소화 시킬것임.

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    
    for step in range(1001):
        sess.run(train, feed_dict={X: x_train, Y: y_train})
            
        if step%50 == 0:
            W_val, b_val, cost_val = sess.run([W, b, cost], feed_dict={X: x_train, Y: y_train})
            print("   < Step : %d>" %step)
            print("Cost : ",cost_val,"\nW :",W_val,"\nb : ",b_val,"\n\n")
        
    # evaluate training accuracy
    
    print(f"W: {W_val} b: {b_val} cost: {cost_val}")

session을 열음.

sess.run(tf.global_variables_initializer()) 뜻 : 아직 초기화되지 않은 (값이 박히지도 않은) 변수들을 죄다 초기화해줌.

이거 안하면 변수 터짐.

 

for step in range(1001) : 뜻  - 0부터 1000까지 돌릴것 ㅎ

sess.run(train, feed_dict = {X: x_train, Y: y_train}) 뜻 : train 함수를 실행시킴 (minimize(cost) 한것)

cost에는  tf.square(Hypothesis - Y) 가 있으니 Y값이 필요할 것이고,

Hypothesis 에는 X*W + b가 있으므로 X값이 필요함.

그 두개의 X,Y를 아까 선언해뒀던 x_train, y_train값으로 집어넣음.


if step%50 == 0:  -  step이 50의 배수일때 (50,100,150,200 ... , 1000번째 step에서 : )

 

W_val, b_val, cost_val = sess.run([W, b, cost], feed_dict={X: x_train, Y: y_train}) 뜻 :

W_val, b_val, cost_val 에 각각 W,b,cost의 값을 집어넣음.

cost의 값에는 위에서 언급했듯이 X,Y 둘다 있으므로, feed_dict 로 X,Y값으로 넣어줌.

 

아래는 간단한 print이므로 설명 생략.

 

끝~

+ Recent posts