본문 바로가기

인공지능/Tensorflow

[Tensorflow] 텐서보드 사용하기

728x90
반응형

현재 딥러닝 라이브러리와 프레임워크는 너무나 많이 존재한다. 그 중 유독 텐서플로를 사용하는 것이 급증한데에는 텐서보드의 역할도 크다고 한다.
딥러닝을 현업에서 활용하다 보면 학습하는데 걸리는 시간이 아주 상당하다.
따라서 모델을 효과적으로 실험하려면 학습 과정을 추적하는 일이 매우 중요해진다.
하지만 학습 과정을 추적하는데에도 별도의 추가 작업이 많이 필요한 실정이다.

이러한 개발자의 어려움을 덜어주고자 텐서플로는 텐서보드라는 도구를 기본적으로 제공하고 있다. 텐서보드는 학습하는 중간중간 손실값이나 정확도 또는 결과물로 나온 이미지나 사운드 파일들을 다양한 방식으로 시각화해 보여준다.
더 놀라운 점은 이러한 도구를 사용하는데 코드 몇줄만 추가하면 된다는 것이다.

1. 데이터를 읽고 필요한 변수를 placeholder를 통해 선언하는 부분에서는 변경될 부분이 필요 없다.
2. 신경망의 각 계층에 아래와 같은 코드가 추가 되어야 한다. [각 계층을 블록으로 묶어주고 이름을 붙여주는 일을 한다.]

with tf.name_scope('layer1'):
W1 = tf.Variable(tf.random_uniform([2, 10], -1, 1.), name='W1')
L1 = tf.nn.relu(tf.matmul(X, W1))

with tf.name_scope으로 묶은 블록은 텐서보드에서 한 계층 내부를 표현해 준다.
변수뒤에 name 파라미터에 W1과 같이 설정을 해주면 텐서보드에서 해당 이름의 변수가 어디서 사용되는지 보다 쉽게 확인 할 수 있다. 이름은 변수 뿐만 아니라 플레이스 홀더, 연산, 활성화 함수 등 모든 텐서에 붙일 수 있다.

3. 손실값을 추적하기 위해 수집할 값을 지정하는 코드를 작성한다.

tf.summary.scalar('cost', cost)

이와 같은 간단한 코드로 cost 텐서의 값을 손쉽게 지정할 수 있다.
tf.summary 모듈의 scalar 함수는 값이 하나인 텐서를 수집할 때 사용한다.
scalar가 아닌 histogram, image, audio 등 다양한 값을 수집하는 함수를 제공함으로 자신이 필요한 텐서에 맞는 함수를 사용하면 된다.

[http://www.tensorflow.org/api_docs/python/tf/summary]

4. 이제 앞서 지정한 텐서들을 수집하고 그래프와 텐서들의 값을 저장할 디렉터리를 설정하는 부분을 살펴 보자.

merged = tf.summary.merge_all()
writer = tf.summary.FileWirter('./logs', sess.graph)

그리고 이어 최적화를 실행하는 코드를 작성해주면 된다.
최적화 과정에 텐서의 값을 계산하여 수집하고 지정한 디렉터리에 저장해준다.

summary = sess.run(merged, feed_dict={X: x_data, Y: y_data})
writer.add_summary(summary, global_step = sess.run(global_step))

merged로 모다운 텐서의 값은 sess.run을 통해 수집하며 writer.add_summary 함수를 이용해 해당 값들을 해당 경로에 저장하게 된다.

이와 같이 작성하면 모든 준비가 완료 되었다.

학습을 실행하고 나면 현재 디렉토리에 logs라는 디렉터라가 새로 생성된 것을 확인 할 수 있다.

5. 이어서 아래와 같은 명령어를 실행한다.

tensorboard --logdir = ./logs

명령을 실행하면 아래 메시지가 실행되면서 웹서버가 실행된다.

Starting TensorBoard b'41' on port 6006

웹 브라우저를 통해 http://localhost:6006 주소를 작성하면 텐서보드 화면을 확인 할 수 있다.

6. SCALARS 메뉴
- tf.summary.scalar('cost', cost)로 수집한 소실값의 변화를 그래프로 보여준다.
8. GRAPHS 메뉴
- with tf.name_scope로 그룹핑한 결과를 볼 수 있다.

각 가중치와 편향 등의 변화를 그래프로 확인하고 싶다면 아래 코드를 추가로 작성하면 DISTRIBUTIONS, HISTOGRAMS메뉴에서 확인 할 수 있다.

tf.summary.histogram("Wegiths", W1)



[출처 : 3분 딥러닝 텐서플로우 맛]

728x90
반응형