2016년 4월 22일 금요일

TensorFlow - CNN 모델 for MNIST


TensorFlow를 이용한 Deep Neural Network 의 Hellow World 격인 MNIST....
(Hellow World 라고는 했지만, 쉬운 알고리즘과 어려운 알고리즘이 있는데, 오늘 다루는 알고리즘은 알파고에서도 쓰였을 정도로, 간단하지만은 않은 알고리즘이다. 그러나, TensorFlow가 많은것을 추상화 해 주어 이 마저도 매우 간단하다.)

MNIST 는 손필기체를 인식하여 숫자를 알아맞추는 일종의 이미지 Classification 문제이다. 여러가지 알고리즘이 존재하는데.... SoftMax , SVM  등도 가능하고... 오늘 수행해본 CNN(Convolutional Neural Networks) 도 가능하다.

아래는 설치시 기 제공하는 convolutional.py example 파일로 MNIST 를 학습 수행시키는 학습 과정이다.

SoftMax 알고리즘을 가지고 training 을 수행하고(training data set으로), test 를 돌리면(test data set으로) 정확도가 약 93% 정도가 나온다. (소스 코드는 20~30줄 정도밖에 안된다.)

그리고, oeverfit 을 피하기 위한 dropout, gradient vanishing 문제의 해결책으로 나온 ReLU, 그리고 max pooling 등 여러가지 트릭 알고리즘들을 추가로 수행 시켜 주면 성능이 99.2% 정도까지 바로 향상이 된다. ( 모두 tensorflow 안에 기 구현되어 있어 한두줄 메소드 실행으로 수행 가능한 기법 들이다. 이 기법들을 모두 적용해도 전체 소스라인이 60~70줄 정도이다.)

TensorBoard 로 코드를 시각화 해보면 아래와 같다. (정말 God! Google 이다.)
데몬을 띄우고 브라우저로 볼수 있으며, URL은 http://서버URL:6006 이다.
(TensorFlow - TensorBoard 로 Tensor Graph 및 각종 정보 시각화 해보기)

사실 아래 링크에서 MNIST알고리즘들의 정확도 랭킹을 확인 할 수 있다.
http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html
아래 랭크에서도 상당히 Top 레벨에 해당하는 매우 정확도 높은 결과임을 확인 할 수 있다.


아래는 CNN 모델 수행 및 Training 과정이다.

  1. 모듈 위치 확인 및 모듈 import
    1. 메뉴얼과 다르게 나의 머신의 tensorflow 라이브러리들 위치 경로는 아래와 같았다.
      1. /usr/lib/python2.7/site-packages/tensorflow
    2. 모듈 import
      1. python -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))'
  2. CNN 모델 수행
    1. 모델 수행
      1. CNN 수행
    2. 최종 학습 결과
      1. 최종 학습 결과
      2. 러닝이 진행되면서 error 율이 점점 줄어 들었음.

댓글 없음:

댓글 쓰기