티스토리 뷰

 Hypothesis and cost function



위의 것을 텐서플로우를 구현할 것이다.

자세한 내용은 아래 링크에서 확인할 수 있습니다.


http://jwlee010523.tistory.com/8?category=81


Linear Regression 구현하기


cost는 W,b의 함수이다. 학습을 한다는 것은, W와 b를 조절해서 cost를 minimize하는 것을 말한다.

이를 파이썬을 이용해 구현해 보자


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
import tensorflow as tf
 
x_train=[1,2,3]
y_train=[1,2,3#실제 x,y 데이터들
 
W=tf.Variable(tf.random_normal([1]),name="weight")
b=tf.Variable(tf.random_normal([1]),name="bias")
 
#여기서의 variable은 흔히 코딩에서 나오느 변수는 아니고,
#텐서플로우가 자체적으로 변형시키는 것이다. 즉,trainable한 수라고 보면 된다.
 
#random_normal은 W와 b에 어떤 값이 들어올지 모르니 랜덤한 값을 주게 된다. 
#1은 shape으로써 값이 1개라는 뜻
 
hypothesis=x_train*W+
 
cost=tf.reduce_mean(tf.square(hypothesis-y_train))  #식을 코드로 옮긴 것
#reduce_mean은 평균을 내주는 것으로, 행렬 크기에 맞게 다 계산해서 평균을 내준다.
 
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01
 
train=optimizer.minimize(cost)  #GradientDescentOptimizer로 cost를 minimize함
 
sess=tf.Session() 
sess.run(tf.global_variables_initializer()) #variables가 있으므로 initializer을 꼭 넣어줘야 됨
 
for step in range(2001):
    sess.run(train)  # train에 미니마이징하는 걸 선언했음.
    if step % 20 == 0:  #20번에 한번씩 프린팅할 수 있도록.
        print(step, sess.run(cost), sess.run(W), sess.run(b)) #run을 하면, 그 값을 가져온다.

cs


위 코드에서 25번째 줄의 주석을 추가적으로 설명해 볼려고 한다.


위 코드에서 variables가 있으므로 initializer을 꼭 넣어줘야 된다고 하였는데, 그 이유는 변수형(Variable)은 그래프를 실행하기 전에 초기화를 해줘야 그 값이 변수에 지정이 되기 때문이다.


세션을 초기화 하는 순간 변수 W에 그 값이 지정된다


여기서 변수형(Variable)은 h=w*x+b라는 식에 x가 입력데이터 였다면, W와 b는 학습을 통해서 구해야 하는 값이 된다. 이를 변수형(Variable)이라고 하는데, 변수형은 Variable 형의 객체로 생성이 된다.


결과값은 실행해보면 W는 1에 근접해지고, b는 0에 가까워지는 것을 볼 수 있다.



Placeholders로 구현해보기


placeholders는 일단 값을 placeholders로 지정해 놓고, 프린트할 때 넣는 식이다.


placeholders에 대해서 더 자세한 내용은 아래 링크에서 볼 수 있다.

http://jwlee010523.tistory.com/13?category=819642


placeholders를 이용해 코드를 구현해보면 아래와 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import tensorflow as tf
 
x_train=tf.placeholder(tf.float32)
y_train=tf.placeholder(tf.float32)
 
W=tf.Variable(tf.random_normal([1]),name="weight")
b=tf.Variable(tf.random_normal([1]),name="bias")
 
hypothesis=x_train*W+b
 
cost=tf.reduce_mean(tf.square(hypothesis-y_train))
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.01)
train=optimizer.minimize(cost)
 
sess=tf.Session()
sess.run(tf.global_variables_initializer())
 
for step in range(2001):
    cost_val,W_val,b_val,_=sess.run([cost,W,b,train],
    feed_dict={x_train:[1,2,3],y_train:[1,2,3]})
    if step%20==0:
        print(step,cost_val,W_val,b_val)
cs


결과값은 마찬가지로 유사하게 나온다. 이제 예측을 해보자


위 코드에, 아래 코드를 추가한다.


1
2
3
4
5
print(sess.run(hypothesis, feed_dict={x_train: [5.5]}))
 
print(sess.run(hypothesis, feed_dict={x_train: [235.3]}))
 
print(sess.run(hypothesis, feed_dict={x_train: [43.3,  3.1]}))
cs


에상되는 결과치는 x값과 유사한 y값이 나온다. 실제로도 그렇게 나온다.











-------------------------------------------


이 글은

https://hunkim.github.io/ml/, https://gist.github.com/haje01/202ac276bace4b25dd3f, http://pythonkim.tistory.com/8 

의 내용을 보고 정리한 글입니다.







댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함