ecsimsw

Multi-variable / Matrix 본문

Multi-variable / Matrix

JinHwan Kim 2019. 3. 16. 23:01

Multi-variable / matrix

  • Multi-variable
    - 텐서플로우에서 여러개의 변수를 사용하는 것도 기존의 1개의 변수를 사용하여 학습한 것과 똑같다. hypothesis식 H(a)= Wa+u에서 변수의 개수만 늘려 다음처럼 표시하면 되는 것이다.

      cost 역시 위에서 구한 H(a,b,c)-y 제곱의 평균이므로 이전과 다를게 없이 구할 수 있다.
    "변수가 3개인 학습" x1_data = [73.,93.,89.,96.,73.] x2_data = [80.,88.,91.,98.,66.] x3_data = [75.,93.,90.,100.,70.] y_data = [152.,185.,180.,196.,142.] x1 = tf.placeholder(tf.float32) x2 = tf.placeholder(tf.float32) x3 = tf.placeholder(tf.float32) y = tf.placeholder(tf.float32) w1 = tf.Variable(tf.random_normal([1])) w2 = tf.Variable(tf.random_normal([1])) w3 = tf.Variable(tf.random_normal([1])) b = tf.Variable(tf.random_normal([1])) hypothesis = x1 * w1 + x2*w2 + x3*w3+b cost = tf.reduce_mean(tf.square(hypothesis - y)) optimizer = tf.train.GradientDescentOptimizer(learning_rate = 1e-5) train = optimizer.minimize(cost) sess = tf.Session() sess.run(tf.global_variables_initializer()) for step in range(2001): cost_val , hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={x1: x1_data , x2:x2_data, x3:x3_data, y: y_data}) if step % 20 ==0: print(step, "cost : ", cost_val, "hypothesis : ", hy_val)
      위 코드에서 처럼 변수를 늘리고 hypothesis = x1 * w1 + x2*w2 + x3*w3+b 으로 식을 만들면 된다.
      하지만 이 변수의 개수가 무수히 많을 때는 비효율적이고, 코드가 깔끔하지 못할 것이다. 이럴 때 matrix를 이용하면 간단하게 변수가 여러개인 학습을 처리할 수 있다.
  • Matrix
    - matrix의 곱을 이용하면 여러 변수가 존재할 때 간단히 hypothesis를 표현할 수 있다. 아래 식처럼 단순히 W matrix와 데이터 matrix를 곱하기만 하면 된다.

    - 또한 matrix를 사용하면 여러 변수가 존재하는 다수의 데이터를 처리하기도 유리하다. 인스턴스가 몇 개인지에 상관없이 W matrix는 그대로 두고 기존의 데이터 matrix에 행만 늘리면 쉽게 다수의 데이터를 처리할 수 있는 것이다.

    - 이제 matrix만 이용한다면 hypothesis는 간단히 다음처럼 표현할 수 있는 것이다.

  • example
    - 위 코드를 matrix를 이용하면 다음과 같다.
    "matrix" ### 1) matrix x_matrix = [[73. , 80. , 75.], [93. , 88., 93.], [89., 91.,90.], [96.,98.,100.],[73.,66.,72.]] y_matrix = [[152.],[185.],[180.],[196.],[142]] X = tf.placeholder(tf.float32, shape =[None, 3]) ### 2-1) shape / variable count Y = tf.placeholder(tf.float32, shape =[None, 1]) W = tf.Variable(tf.random_normal([3,1])) ### 2-2) b = tf.Variable(tf.random_normal([1])) hypothesis = tf.matmul(X,W)+b ### 3) matmul / matrix multiply cost = tf.reduce_mean(tf.square(hypothesis - Y)) optimizer = tf.train.GradientDescentOptimizer(learning_rate = 1e-5) train = optimizer.minimize(cost) sess = tf.Session() sess.run(tf.global_variables_initializer()) for step in range(2001): cost_val , hy_val, _ = sess.run([cost, hypothesis, train], feed_dict={X: x_matrix , Y: y_matrix}) if step % 20 ==0: print(step, "cost : ", cost_val, "hypothesis : ", hy_val)
    - 위 코드에서 확인해야할 포인트는 표시한 3부분이다.
      1) 인스턴스를 여러 배열 변수를 두었던 x 데이터를 인스턴스별로 matrix로 만들어 x_matrix, y_matrix로 간단하게 선언하였다.
      2) 학습용 placeholder는 행렬의 크기를 먼저 정해주어야한다.
      3) matrix 곱셈은 tf.matmul()로 처리한다.

'Machine Learning > Tensorflow' 카테고리의 다른 글

Tensorflow architecture  (0) 2019.03.18
Placeholder / Variable  (0) 2019.03.17
Linear Regression / Gradient descent algorithm  (0) 2019.03.16
Data flow graph  (0) 2019.03.16
Supervised / Unsupervised  (0) 2019.03.15
Comments