티스토리 뷰
Hypothesis and cost function
위의 것을 텐서플로우를 구현할 것이다.
자세한 내용은 아래 링크에서 확인할 수 있습니다.
http://jwlee010523.tistory.com/8?category=81
Linear Regression 구현하기
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+b 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을 하면, 그 값을 가져온다. |
위 코드에서 25번째 줄의 주석을 추가적으로 설명해 볼려고 한다.
위 코드에서 variables가 있으므로 initializer을 꼭 넣어줘야 된다고 하였는데, 그 이유는 변수형(Variable)은 그래프를 실행하기 전에 초기화를 해줘야 그 값이 변수에 지정이 되기 때문이다.
세션을 초기화 하는 순간 변수 W에 그 값이 지정된다
여기서 변수형(Variable)은 h=w*x+b라는 식에 x가 입력데이터 였다면, W와 b는 학습을 통해서 구해야 하는 값이 된다. 이를 변수형(Variable)이라고 하는데, 변수형은 Variable 형의 객체로 생성이 된다.
결과값은 실행해보면 W는 1에 근접해지고, b는 0에 가까워지는 것을 볼 수 있다.
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
의 내용을 보고 정리한 글입니다.
'AI > 딥러닝(sung kim)' 카테고리의 다른 글
multi-variable linear regression (1) | 2018.05.22 |
---|---|
Linear regression의 cost 최소화의 tensorflow 구현 (0) | 2018.05.19 |
Tensorflow의 기본적인 operations (0) | 2018.05.14 |
Linear Regression의 cost 최소화 알고리즘의 원리 (0) | 2018.05.09 |
Linear Regression의 개념 (1) | 2018.05.09 |