본문 바로가기

Tech/머신러닝

[정리] 모두를 위한 딥러닝 05 - Logistic Classification

네이버 공유하기
728x90

[정리] 모두를 위한 딥러닝 05 - Logistic Classification  by 김성훈 


강의 웹사이트 : http://hunkim.github.io/ml/

Lec = 강의 / Lab = 실습


지금까지는 결과값 Y 가 숫자였는데, 이번 강의에서는 0 또는 1 이렇게 둘 중 하나인 경우를 살펴본다.

병에 걸렸는지 여부, 시험을 통화할 수 있는지 여부 등에 이용할 수 있다.


이를 나타내려면 단순히 직선 그래프로는 안되고 0 또는 1 에 수렴해야 하는데, 이때 사용되는 함수는 아래와 같다. 


시그모이드 (하이퍼볼릭 탄젠트 tanh 파란색 점선) 함수로 나타낼 수 있다.



로그 함수로 나타낼 수도 있다.

여기에서 빨간색이 X 축이라면 Y 값은 0 또는 1 에 수렴하는 그래프가 된다. 오 ~ 


이를 파이썬으로 구현하면 아래와 같다.

x_data = [[1, 2], [2, 3], [3, 1], [4, 3], [5, 3], [6, 2]]

y_data = [[0], [0], [0], [1], [1], [1]]

# placeholders for a tensor that will be always fed.

X = tf.placeholder(tf.float32, shape=[None, 2])

Y = tf.placeholder(tf.float32, shape=[None, 1])


W = tf.Variable(tf.random_normal([2, 1]), name='weight')

b = tf.Variable(tf.random_normal([1]), name='bias')

# Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))

hypothesis = tf.sigmoid(tf.matmul(X, W) + b)

# cost/loss function

cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))

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


# Accuracy computation

# True if hypothesis>0.5 else False

predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)

accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))


# Launch graph

with tf.Session() as sess:

  # Initialize TensorFlow variables

  sess.run(tf.global_variables_initializer())


  for step in range(10001):

      cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data})

      if step % 200 == 0:

          print(step, cost_val)


  # Accuracy report

  h, c, a = sess.run([hypothesis, predicted, accuracy],

                     feed_dict={X: x_data, Y: y_data})

  print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)



소스코드 : https://github.com/hunkim/DeepLearningZeroToAll


반응형
네이버 공유하기


* 쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.