텐서보드(tensorboard) 사용법

실습 환경은 Python 3.6과 tensorflow 1.5이다.

 

텐서보드(tensorboard)

텐서플로우에서 제공하는 기본 도구이다.

텐서보드를 이용하면 손실값, 정확도와 같은 결과값을 시각화하여 확인할 수 있다.

 

텐서보드를 이용하기 위해서는 모델을 다음과 같이 세팅해야 한다.

 

1. 계층을 name_scope로 묶기

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

다음과 같이 tf의 name_scope 함수를 통해 계층을 묶고 이름을 붙일 수 있다. 이는 이후 텐서보드의 그래프에서 확인할 수 있다.

계층 뿐만이 아니라 플레이스홀더나 연산, 활성화 함수 등도 name_scope를 이용해 묶을 수 있다.

 

 

2. 손실값 추적을 위해 수집할 값(cost tensor) 지정

이는 최적화 이름 영역에서 진행한다.

with tf.name_scope('optimizer'):
    # 손실
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=Y, logits=model))

    # 최적화
    optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
    train_op = optimizer.minimize(cost, global_step=global_step)

    # 손실값(스칼라) 추적을 위해 수집할 값
    tf.summary.scalar('cost', cost)

스칼라 뿐 아니라 이미지/오디오, 히스토그램 등의 수집 또한 가능하다.

 

 

3. merged 변수에서 앞서 지정한 모든 텐서 수집, writer 변수에서 그래프와 텐서들의 값을 저장할 디렉토리 지정

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

 

학습을 수행할 때 이 값들이 어떻게 쓰이는지 보자.

for step in range(100):
    sess.run(train_op, feed_dict={X: x_data, Y: y_data})

    print('Step: %d ' % sess.run(global_step),
          'Cost: %.3f ' % sess.run(cost, feed_dict={X: x_data, Y: y_data}))

    # 값들의 수집 및 저장
    summary = sess.run(merged, feed_dict={X: x_data, Y: y_data})
    writer.add_summary(summary, global_step=sess.run(global_step))

merged에 모인 값은 매 단계에서 데이터값에 따라 연산된 결과를 summary에 저장하며, 이 결과값은 앞서 writer에 지정해준 디렉토리에 기록된다.

 


 

텐서보드의 실행

모델의 학습이 끝나고 나면, 지정한 디렉토리 logs가 생긴 것을 확인할 수 있다. terminal을 실행시켜 이 폴더의 상위 디렉토리로 이동한 뒤

tensorboard --logdir=./logs

다음과 같은 명령어를 입력해 주자. 그러면 http://locallhost:6006/ 이라는 주소를 출력해준다. 해당 주소는 텐서보드의 디폴트 포트 번호이다.

 

텐서보드 실행 결과 1

[SCALARS] 화면에서는 우리가 앞서 지정한 추적값인 Cost 값의 변화를 그래프로 보여주고 있다.

 

텐서보드 실행 결과 2

[GRAPHS] 화면에서는 앞서 지정한 name_scope들을 확인할 수 있다.

 

+ 가중치와 편향 등 다른 변수의 변화 또한 그래프로 확인하고 싶다면,

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

다음과 같은 코드를 추가하면 된다.