2016년 4월 25일 월요일

TensorFlow - TensorBoard 로 Tensor Graph 및 각종 정보 시각화 해보기

TensorFlow 는 명령형 인터페이스 이외에도, 웹상에서 상태를 볼 수 있는 TensorBoard 를 제공한다. TensorBoard를 이용하면, TensorFlow Graph 를 시각화 해 볼 수도 있고, Quantitative metrics 를 차트(plot) 형태로 볼 수도 있으며, understand, debug, optimize 등에 활용 가능하다.

아래는 TensorBoard 를 구동 및 활용하는 방법이다.


  1. TensorBoad 데몬 구동
    1. sudo tensorboard --logdir=/home/spiccato/tensorboard &
  2. OS 내부 방화벽 해제 
    1. iptables -F : 걍 귀찮으니까 다 끈다...
  3. 외부에서 접속해 보자.
    1. http://서버URL:6006
  4. 소스에서 로그를 남겨보자.
    1. TensorBoard 는 자동으로 모든 Training 이나 Test 를 시각화 해주진 않는다. 원하는 Log 를 Serialize ( TensorBoard 는 구글 답게 Protobuf 객체로 Serialize 한다. ) 하여 적절하게 객체에 담아 Disk 에 써 주면, 해당 Serialize Data 가 존재하는 위치를 LogDirectory 로 인지하여 데몬이 구동되어야, 시각화가 가능하다.
    2. 한가지 다행인 것은 디렉토리 관리가 가능하다는 점이다.
    3. 복수의 모델을 TensorBoard 로 관리하고자 할때, LogDirectory 안에 모델별로 디렉토리가 존재하고 해당 디렉토리를 내려가야 파일이 존재한다면, 해당 ParentDirectory 를 지정하는 경우 메뉴화 접근이 가능하다.
    4. 소스에서 로그를 남기는 부분에 대한 설명은 아래에 잘 명기 되어 있음.
      1. https://www.tensorflow.org/versions/r0.8/how_tos/summaries_and_tensorboard/index.html
      2. Log 의 Summary Write 메소드 수행시 경로 직정을 적절하게 잘 해주어야 함.
        1. train_writer = tf.train.SummaryWriter(FLAGS.summaries_dir + '/train', sess.graph)
        2. test_writer = tf.train.SummaryWriter(FLAGS.summaries_dir + '/test')
  5. 위에서 지정한 logdir 로 tensorboard 구동
    1. 아래 처럼 TensorFlow Graph 시각화 가능.
      1. CNN알고리즘 for MNIST
      2. Hidden Node 를 (+)클릭하여 Drill Down 상세화 해보기
      3. 아래는 x entropy mean 값 polt 그래프

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 율이 점점 줄어 들었음.

2016년 4월 15일 금요일

TensorFlow - CentOS 6.X 구버전에 설치기

TensorFlow는 CentOS 7 최신 버전에서는 그나마 쉽게 설치가 된다. 하지만, CentOS 6 후반 버전에서는 Dependency 모듈 버전 업 해줄게 많아 설치가 좀 귀찮은 작업들이 수반된다.TT

그래서, 누군가가 CentOS 6.X 에 TensorFlow를 설치한다고 한다면, 만약 테스트 목적이라면, Docker 를 쓰거나 Python 의 Virtualenv를 쓰라고 권장하고 싶다. 그렇지 않고, 실제 머신에 Fully 깔고자 한다면, CentOS 6.X 는 과감하게 포맷하고 OS 부터 버전업 하라고 권하고 싶다.

여튼 메모해놓은 내용을 정리해 보았다.
  1. Python 환경 정비
    1. 기본 설치 버전 확인
      1. python -V 로 버전 확인. TensorFlow는 2.7 이나 3.3이상의 Python 이 필요함.
      2. 버전이 낮은 경우 설치.(아래는 2.7 기준)
        1. sudo yum install gcc
        2. 소스로 깔자!. 2.X 의 최신버전은 2.7.11이넹.
        3. wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
        4. tar xvzf Python-2.7.11.tgz
        5. cd Python-2.7.11
        6. ./configure
        7. 구버전 Overwrite 방지하면서...
          1. sudo make altinstall
        8. 잘 설치 되었나 확인
          1. python2.7 -V
          2. python -V
            1. 아직 python 컴멘드는 옛날 버전으로 연결 됨.
      3. python 구 버전 dependancy 완전 없애고 Gracefully 하게 update 하기.(CentOS 7.1 기준)
        1. yum groupinstall -y "Development tools"
        2. yum install -y zlib-devel
        3. yum install -y openssl-devel
        4. yum install -y ncurses-devel
        5. yum install -y sqlite-devel
        6. Which python 
          1. /usr/bin/python
        7. 아래 명령 수행
          1. ln -s /usr/local/bin/python2.7/usr/local/bin/python
        8. 다시 which python
          1. /usr/local/bin/python
        9. 나갔다 들어와서 python 이라고 날려보면 정상적으로 반영된걸 볼 수 있음.
          1. python 버전 변경 완료
    2. Pip Upgrade
      1. pip 또한 구 버전이 설치 되어 있음.
      2. pip 버전 확인 
        1. pip --version
          1. 구버전 2.6 이라고 나옴.
      3. 신 버전 설치
        1. wget https://bootstrap.pypa.io/get-pip.py
        2. python get-pip.py
        3. ls -al /usr/local/bin/pip* 를 해보면 새로 설치 된 2.7 버전 확인 가능.
        4. 역시 나갔다 들어오거나 bash 갱신 해주면, 정상적으로 pip --version 확인 시 2.7로 바뀐 것을 확인 할 수 있게 됨.
          1. pip 버전 변경 완료
  2. TensorFlow Install
    1. CPU Only
      1. pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
    2. GPU enabled
      1. pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
      2. Cuda 인스톨
        1. 링크로 대신.
        2. https://www.tensorflow.org/versions/r0.7/get_started/os_setup.html#optional-install-cuda-gpus-on-linux
      3. ~/.bash_profile 안에 cuda 아래 환경 변수 추가
        1. LD_LIBRARY_PATH
          1. /usr/local/cuda 추가
        2. CUDA_HOME
          1. /usr/local/cuda 추가
  3. TensorFlow 수행
    1. TensorFlow 로딩 해보기
      1. 우선 라이브러리 import
      2. 위와 같은 에러 남.
      3. GLIBC_2.14 설치 하자!
        1. wget http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.14.tar.xz
        2. tar xvf glibc-2.14.tar.xz
        3. cd glibc-2.14
        4. mkdir build
        5. cd build
        6. ../configure --prefix=/opt/glibc-2.14
        7. make -j4
        8. make install
        9. cd ~
        10. vi .bash_profile
        11. export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
        12. source .bash_profile
      4. 초기 에러는 해결 되었으나, 뒤이어 아래 에러 발생
        1. 이번에는 GLIBCXX_3.4.14 모듈 필요.
        2. rpmfind 에서 libstdc 모듈 설치
      5. 기타, CentOS6.X 버전에따라 좀더 추가 모듈 Dependency 가 날 수 있으나, 일단, CentOS6.X 후반 버전에서는 위 정도로 설치 완료...
    2. Hello, TensorFlow!