[#E2 : 머신러닝의 첫 단계 Linear Regression이란?] 에서는 x_train = [1,2,3], y_train = [1,2,3] 으로 데이터가 미리 지정되어 있었고, 이것을 바로 hypothesis 함수에 대입하여 제한된 결과를 도출했습니다.
1 2 | x_train = tf.placeholder(tf.float32, shape=[None]) y_train = tf.placeholder(tf.float32, shape=[None]) | cs |
위의 코드에서 x_train, y_train은 사용자가 입력하는 유동적인 데이터를 나타냅니다. tf.float32는 데이터의 형식, shape는 데이터의 구조를 나타냅니다.
None이라는 뜻은 제공받은 데이터의 구조를 신경쓰지 않겠다는 뜻으로, 추후에 상세하게 다루겠습니다.
1 2 3 4 5 6 | for step in range(2001): cost_val, w_val, b_val, _ = sess.run([cost, w, b, train], feed_dict={x_train: [1, 2, 3, 4, 5], y_train: [2.1, 3.1, 4.1, 5.1, 6.1]}) if step % 20 == 0: print(step, cost_val, w_val, b_val) | cs |
이후의 과정은 이전과 같으며, 유일하게 다른 점은 학습을 시작하면서 직접 데이터를 제공해야 한다는 점입니다.
즉, 사용자가 직접 feed_dict 에서 x_train = [1, 2, 3, 4, 5] , y_train = [2.1, 3.1, 4.1, 5.1, 6.1] 데이터를 제공합니다.
위의 코드는 2001번의 학습에서 cost_val, w_val, b_val 변수에 회차별로 발생하는 cost, w 변수, b 변수를 입력받으며 train을 진행합니다.
동시에 출력의 효율성을 위해 회차가 20배수일때만 결과를 출력합니다.
SOURCE CODE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | x_train = tf.placeholder(tf.float32, shape=[None]) y_train = tf.placeholder(tf.float32, shape=[None]) W = tf.Variable(tf.random_normal([1]), name="weight") b = tf.Variable(tf.random_normal([1]), name="bias") hypothesis = W * x_train + 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,4,5], y_train: [2.1,3.1,4.1,5.1,6.1]}) if step % 20 == 0: print(step, cost_val, w_val, b_val) | `cs |
[RESULT]
1 2 3 | 1960 2.6277302e-08 [0.99989504] [1.1003786] 1980 2.2997586e-08 [0.99990195] [1.1003541] 2000 2.0044912e-08 [0.9999084] [1.1003307] | cs |
결과에서 최종적으로 W = 1, b = 1.1가 구해졌으며, Hypothesis = (W*x+b) 1*x+1.1 의 형태가 됩니다. 이는 우리가 제공한 데이터와 일치합니다.
데이터가 (x = 1, y = 2.1) 일 때 Hypothesis 에 의해 정확한 값이 구해지는 것을 알 수 있습니다.
테스트
1 | print(sess.run(hypothesis, feed_dict={x_train:[5]})) | cs |
1 | [6.0998726] | cs |
'파이썬 > 머신러닝' 카테고리의 다른 글
| [#E6] Multinomial Logistic Classification [Softmax Regression] (0) | 2018.12.04 |
|---|---|
| [#E5] Logistic Classification 이란? (0) | 2018.12.02 |
| [#E4] 다중 변수를 사용하는 Multi Variables Linear Regression (0) | 2018.12.01 |
| [#E2]머신러닝의 첫 단계 LinearRegression 이란? (0) | 2018.11.30 |
| [#E1]Tensorflow와 시작하는 머신러닝 (0) | 2018.11.30 |