일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- object detection
- 영어
- findContours
- 딥러닝
- convexhull
- TensorFlow
- #영어
- #English
- #일상영어
- 영어명언
- #1일1영어
- tokenizing
- #opencv
- tensorflow update
- python list
- word embedding
- #영어 명언
- #실생활영어
- #Android
- #프로젝트
- 이미지 생성
- text2img
- opencv SURF
- python __init__
- #실생활 영어
- c언어
- 완전탐색
- keras
- python 알고리즘
- Convolution Neural Network
Archives
- Today
- Total
When will you grow up?
Tensorflow로 Logistic(Binary) Classification 구현하기 본문
김성훈 교수님께 감사의 말씀드림니다.
모두를 위한 머신러닝/딥러닝 강의 를 토대로 만들어 졌습니다.
문제가 되거나, 저작권 위반이 된다면
댓글이나 메일로 문의 주시면 삭제 하겠습니다.
Logistic(Binary) Classification?
->이전 블로그 포스팅에서는 Linear Regression는 좌표상 위치한 데이터를 이어주는 직선을 그어 데이터 위치를 예측하는 모델이였는데
Logistic Classification은 분류 중에서 가장 단순한 모델 2가지 중 하나를 찾는 모델이다.
Logistic(Binary) Classification Hypothesis?
->수학자들이 0~1사이로 표현되는 것을 찾다가 sigmoid함수를 발견하게 된다.
Sigmoid 그래프 생김새
Hypothesis
e는 자연상수 / W는 weight (상황에 따라 전치를 해야될 경우와 안해도 될 경우가 있다.) / X 는 실제 데이터 x_data 값
1 2 3 4 | #python ex) h = tf.matmul(W, X) hypothesis = tf.div(1., 1. + tf.exp(-h)) #표현 되는데,h가 가설이고 tf.div(1., 1. + tf.exp(-h))를 sigmoid 함수로 생각하시면 좋을 듯 싶다. | cs |
Logistic(Binary) Classification Cost function
맨 아래와 같이 하나의 수식으로 표현될수 있는데
y데이터가 1이면 뒤에가 사라지게 되며
y데이터가 0이면 앞의 사라지게 된다.
구현코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import tensorflow as tf import numpy as np # train.txt # #x0 x1 x2 y # ex) # x1를 수업에 참여한 횟수 x2를 공부한 시간 # y값이 1이면 합격 0이면 불합격 이라고 가정한다. # 1 2 1 0 # 1 3 2 0 # 1 3 5 0 # 1 5 5 1 # 1 7 5 1 # 1 2 5 1 # 원본 파일은 6행 4열이였다, 하지만 numpy 형식 텍스트 읽는것은 열 우선이라서 4행 6열로 가지고 왔다. xy = np.loadtxt('train.txt', unpack=True, dtype='float32') # print(xy[0], xy[-1]) # [ 1. 1. 1. 1. 1. 1.] [ 0. 0. 0. 1. 1. 1.] x_data = xy[:-1] # [1. 1. 1. 1. 1. 1.] [2. 3. 3. 5. 7. 2.] [1. 2. 5. 5. 5. 5.] y_data = xy[-1] # [ 0. 0. 0. 1. 1. 1.] X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32) # 1행 * 3열 W를 만들고 각 요소를 -1.0~1.0 사이값으로 초기화 W = tf.Variable(tf.random_uniform([1, len(x_data)], -1.0, 1.0)) # 행렬 곱셈. W = (1*3) * X = (3*6) ->h = 1행*6열 나온 값의 합 #exp()함수는 e 즉, 실수값만 전달하며, 자연상수(a) 안에 e의 a승이 도니다. h = tf.matmul(W, X) hypothesis = tf.div(1., 1. + tf.exp(-h)) #cost function cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis)) #cost값 최소화 하기 rate = tf.Variable(0.1) optimizer = tf.train.GradientDescentOptimizer(rate) train = optimizer.minimize(cost) #초기화를 시켜주는 구문 ->텐서플로우 구동하기 전에 그래프에 연결된 모든 변수를 초기화 해야한다. init = tf.initialize_all_variables() c = tf.exp(1.0) d = tf.log(10.0) #세션 실행 sess = tf.Session() sess.run(init) # 파이썬 3.x버전부터는 xrange 가 range로 통합되므로써 range를 사용 # 0부터 2000까지 2001번 반복되는 반복문 # 너무 많은 출력을 피하기 위해서 step별로 계속 진행되다가 20번에 한번씩 출력 for step in range(2001): sess.run(train, feed_dict={X: x_data, Y: y_data}) if step % 20 == 0: print(step, sess.run(cost, feed_dict={X: x_data, Y: y_data}), sess.run(W)) print('*'*50) # 결과값이 0또는 1로 딱 떨어지는 것이 아니므로, True /False는 기준치 0.5로 판단하게 된다. #3번 수업 참여하고 2시간 공부했을 가정 ->불합격 print('[1, 3, 2] :', sess.run(hypothesis, feed_dict={X: [[1], [2], [2]]}) > 0.5) #5번 수업 참여하고 1시간 공부했을 가정 ->불합격 print('[1, 5, 1] :', sess.run(hypothesis, feed_dict={X: [[1], [5], [1]]}) > 0.5) #7번 수업 참여하고 3시간 공부했을 가정 ->합격 print('[1, 7, 3] :', sess.run(hypothesis, feed_dict={X: [[1], [7], [3]]}) > 0.5) #x_data 값 print('x_data 값 :',x_data) #y_data값 print('y_data 값 :',y_data) sess.close() | cs |
결과
'02. Study > Tensorflow' 카테고리의 다른 글
Anaconda(spyder)를 이용한 Tensorflow Object Detection API (4) | 2017.07.17 |
---|---|
Anaconda를 이용한 tensorflow update 하기 (0) | 2017.05.11 |
Tensorflow로 Linear Regression 구현하기 (0) | 2017.01.23 |
[Spyder] Edit창 Vertical 선 없애기 && Syntax color 적용 (0) | 2017.01.18 |
Anaconda를 이용한 윈도우환경에 tensorflow 설치하기 (0) | 2017.01.11 |
Comments