아나콘다텐서플로우

아나콘다 쥬피터 노트북 MNIST 학습에 의한 숫자인식 예제 실행 II

coding art 2018. 5. 23. 15:28
728x90

파이선 코딩을 배우는 초보자도 머신 러닝에 한번 도전해 보자.

머신 러닝을 배우려는 초보자들이 가지게 될 의문점들을 하나하나 찾아내어

실제 풀어보고 결과를 확인해볼 수 있도록  완전히 뒷문으로 들어가 시작하는 머신 러닝!

 

우선 아래 url 을 방문하여 url 로 구성된 본 서의 목차 파일을 무료로 다운로드 받아 살펴보시기 바랍니다.

파이선 코딩 초보자를 위한 톈서플로우∙OpenCV 머신러닝 머리말과 url 목차 파일 다운로드
https://steemit.com/kr/@codingart/pryx1-opencv

noname03.png

_____________________________________________________________________________________________________

 

이 한권의 책으로 아두이노 엘렉트로닉스 코딩에서 시작하여 와이파이 코딩을 넘어 흥미로운 앱인벤터 코딩으로 넘어가보자. 특별한 컴퓨터 과학의 지식이 없어도 누구든지 코딩의 세계로 초대 받을 수 있습니다. 교보문고에서 판매 중입니다.

 

 

 

__________________________________________________________________________________________________________________________________

 

어제 발생한 에러를 처리하기 위해서 다시 시작하도록 한다. 텐서플로우가 활성화 되어 있는 아나콘다3의 쥬피터 노트북(tensorflow)를 클릭하자.

 


아나콘다의 Home 이 뜨면 New에서 Python3을 클릭하면 아래의 위치까지 올 수 있다. 이미 3번째 연습이므로 익숙한 편이다.

 

 

 


여기서 직접 MNIST 파이선 코드를 입력할 것이 아니라 일단 Markdown 모드를 택하여 몇 줄의 설명을 넣기로 한다. 방법은 위 그림에서 보이는 Code 박스를 클릭하여 Markdown 이 메뉴에 나타나면 선택한다.

 

 

 


Markdown  션택에 따라 In[]:  이 사라지고 텍스트를 입력할 수 있는 단순 박스로 바뀐다. 아래와 같이 입력해 보자. # + 빈칸 또는 ## + 빈칸은 HTML 문서의 헤딩과 유사하다.

 

 


입력이 다 끝났으면 Insert 의 Insert Cell Below를 실행하여 다시 파이선 코드를 입력할 수 있는 상태로 되돌아가자.

 

 

 


다시 파이선 입력 창이 나타난다. 여기에다 MNIST  예제 파이선 코드를 복사해다 붙이도록 하자. 편의를 위해서 MNIST 예제 코드를 첨부해 두니 복사하여 연습하기 바란다.

 

 

 

 

 

어제의 실패 원인이 soft_max_∙∙∙ 루틴 사용법과 관련된 에러였는데 이번에는 이 문제를 원천적으로 피할 수 있도록 여기서는 cross_entropy 라는 변수명으로 처리한 cost 함수를 soft_max_∙∙∙ 루틴 처리할 것이 아니라 아래와 같이 로지스틱스 루틴으로 처리하도록 변경한다. 물론 결과 값의 미미한 차이는 있을 수 있다.

 

 

 

 

이 코드를 복사한 후 Run 시키고 그 결과를 관찰해 보자. Extracting ∙∙∙ 과정은 5만+1만 개의 데이터를 불러 오는 과정이며 결과값은 0.9171 로서 91.71% 의 인식율을 나타낸다. 물론 cost 함수를 로지스틱에서 최소자승법이라든지 또는 soft_max_∙∙∙ 루틴으로 변경하게 되면 인식율 값이 변동된다.

 

 

 


참고로 가장 간단한 최소자승법을 적용하면 3% 가량 인식율이 떨어지며, 한편으로 뉴럴 네트워크 기법이 사용될 경우 99% 수준의 높은 인식율을 보이게 된다.
차후 기회가 오면 블로그에 이 문제를 포스팅하기로 한다.

여기서는 쥬피터 편집기법을 연습해 나가기로 한다. 일단 필요한 결과 값을 얻었으므로 앞의 헤딩과 코드 및 계산 결과를 원하는 형태의 파일로 저장해 보도록 한다. 스팀잇에서 적용되는 Markdown 으로 저장도 가능하며 여기서는 HTML 로 저장해 보기로 한다. 저장할 파일 명을 mnist_HTML_01로 둔다.

 

 

 

다음과 같이 mnist_HTML_01.ipynb 파일이 저장되었다.

 

 

 


이 파일을 지정 더블 클릭해서 최종 형태를 살펴보자. # 와 ## 부분이 HTML 헤딩 태그처럼 처리되었음을 알 수 있다.

 

 

 


다음에는 쥬피터 노트북에서 파이선 코드를 사용하여 그래프를 작성해 보도록 한다.

#MNIST_DEMO_01

 

# -*- coding: utf-8 -*-
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
 
import tensorflow as tf
 
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)

# cross-entropy
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
 
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
 
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))