1-10 Anaconda3 jupyter notebook MNIST 학습에 의한 숫자인식 예제 실행 II

codingart(66)
Published in
#kr
Words
436
Reading
2 min
Listen
Play
8y

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

noname01.png

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

noname02.png

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

noname03.png

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

noname04.png

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

noname05.png

다시 파이선 입력 창이 나타난다. 여기에다 MNIST 예제 파이선 코드를 복사해다 붙이도록 하자. 편의를 위해서 MNIST 예제 코드를 첨부해 두니 복사하여 연습하기 바란다. 단 주의할 점은 ㅍ이선에서 # 와 ##는 명령문을 설명하기 위한 멘트로 사용되지만 스팀잇에 올릴 경우 Markdown 이나 HTML 로 처리되기 때문에 헤딩 글자 크기 효과를 준채 사라져 버리므로 복사 후에 다시 복원해주어야 한다. 이러한 사실까지 포함해서 쥬피터 노트북 학습이라 생각된다.

noname06.png

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

noname07.png

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

noname08.png

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

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

noname09.png

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

noname10.png

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

noname11.png

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

#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}))

1-10 Anaconda3 jupyter notebook MNIST 학습에 의한 숫자인식 예제 실행 II | Ecency