티스토리 뷰

빅데이터

MNIST 데이터베이스 시각화

한 혜윰 2017. 11. 6. 19:16


MNIST 데이터베이스 시각화



사진 출처: 본인




늦어서 죄송합니다! 파이선에 대해 전반적으로 공부한다고 늦었네요. 이번 글에서는 마지막 포스트의 코딩을 정리하고 좀 더 나은 시각화를 위해 몇몇 코딩 라인을 추가하겠습니다. 그래프를 좀 더 보기 좋게 tf.name_scope를 이용해 노드를 분류했고 tf.summary를 이용한 loss, weights, 그리고 bias의 시각화, inspect와 os 모듈을 이용한 파일 위치 찾기, 마지막으로 __main__ 드라이버를 추가했습니다. 코드는 따로 깃허브에 올렸으니 확인해보세요. 




from inspect import getsourcefile
from os.path import abspath
.
.
.
ROOT = abspath(getsourcefile(lambda:0)).strip(getsourcefile(lambda:0))
.
.
.




Stackoverflow나 Quora같은 싸이트에서 검색을 해보니 sys.argv[0]이나 os.getcwd()같은 명령어는 스크립트 파일이 아니라 IDE위치를 알려주는 때가 있다고 하더라구요. 그래서 잘 찾아보니 위와 같은 방법을 찾았습니다. getsource 코드를 통해 람다 함수를 실행하는 위치(스크립트 파일의 위치)를 찾고 거기서 스크립트의 메모리 위치를 지우고, 이 디렉토리의 절대경로가 ROOT의 경로입니다.




.
.
.
def MNIST(minst):
.
.
.     
      with tf.name_scope('variables_group'):
            W = tf.Variable(tf.random_normal(shape=[784,10], stddev=0.1))
            b = tf.Variable(tf.zeros([1,10]), name='bias')
            tf.summary.histogram("weights", W)
            tf.summary.histogram("bias", b)
.
.
.



위와 같이 name_scope 블락 안에 노드를 포함하면 나중에 텐서보드로 시각화 할 때 variables_group 노드 안에 있음을 볼 수 있습니다. MNIST 분석은 많은 공식들과 텐서, 노드들이 필요하지 않기에 이런 작업이 불필요 하다 볼 수 있습니다만 나중에 CNN이나 Recurrent를 적용 하면 노드들이 셀 수 없이 많이지기 때문에 name_scope를 사용하시는게 낫습니다. 뿐만아니라 비슷한 노드들이 여러가지가 있으면 색을 이용해 자동으로 분류합니다. 훨씬 보기 좋아지고 시각적으로 알고리즘을 분석하기 쉬워지죠. 그리고 변수 코드 바로 밑에 tf.summary.histogram을 추가했습니다. 이것또한 텐서플로의 노드중 하나인데 히스토그램을 통한 데이터 시각화를 위해 위 코드에선 weights들과 bias 변수데이터들을 수집합니다. 이들 또한 노드이기에 세션에서 따로 작업을 해야하는데 일일이 하기에 귀찮으므로 밑의 코드에서 볼 수 있다시피 tf.summary.merge_all() 명령줄을 통해 시간을 아낄 수 있습니다.




.
.
.
      summ = tf.summary.merge_all()

      with tf.Session() as sess:
.
.
.
                        _, loss_batch, s = sess.run([optimizer, loss, summ], feed_dict={X: X_batch, Y: y_batch})
                        writer.add_summary(s, i)
.
.
.




그리고 나중에 이 MNIST코드를 사용할 날이 있겠지요. 그래서 MNIST를 함수화 시켰고 또한 본 스크립트는 MNIST를 직접적으로 사용하기 때문에 밑에 코드에서 볼 수 있다시피 main 드라이버를 추가했습니다.




.
.
.
def main():
      mnist = input_data.read_data_sets(ROOT_DATA, one_hot=True)
      MNIST(mnist)

if __name__ == '__main__':
      main()




그리고 전 포스트에서 설명했던거와 동일하게 텐서보드를 실행하시면 됩니다!


이로써 MNIST시리즈를 끝마치겠습니다. 질문이나 시정할 것이 있으면 답글 달아주세요^^




참조

www.tensorflow.org

https://github.com/ageron/handson-ml

Stanford CS20 SI




'빅데이터' 카테고리의 다른 글

MNIST 분석  (0) 2017.09.05
MNIST 인식  (0) 2017.08.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함