TensorBoard
쥬피터에서 실행시 : %tensorboard --logdir=./my_logs
코드에 텐서보드용 로그 파일 저장 위치 지정
writer = tf.train.SummaryWriter("/tmp/test_logs", session.graph)
Tracking할 대상 지정
step 1: node 선택
add_hist = tf.scalar_summary("add_scalar", add) mul_hist = tf.scalar_summary("mul_scalar", mul)
step 2: summary 통합. 두 개의 코드 모두 동작.
merged = tf.merge_all_summaries()
merged = tf.merge_summary([add_hist, mul_hist])
- 학습 수행시 로그 파일 저장
writer.add_summary(summary, step)
- 실행
tensorboard --logdir=/tmp/sample
# tensorboard --logdir=/tmp/sample --port=8008
주요 함수
1. tf.name_scope()
- name_scope 함수는 노드의 이름을 지정하고 노드의 큰 틀을 제공해줍니다.
- 그 틀 안에서 실행되는 연산들은 텐서보드에서 노드를 클릭하면 연산의 흐름을 볼 수 있습니다.
- 블록 단위로 나누어서 표현 하고자 할때
name_scope가 accuracy , cost , layer1,2,3로 총 5번 나옵니다
2. tf.histogram_summary()
- 히스토그램으로 변수를 요약
summary 함수는 대부분이
변수
의 변화 양상을 그래프로 보여주는 함수일 것입니다그래디언트 결과물이나 가중치 변수에 histogram_summary 작업(op)을 추가해서 데이터를 모을 수 있음
3. tf.scalar_summary()
- histogram_summary과 마찬가지로 요약해주는 함수입니다.
- 하지만 이 함수는 scalar로 변수의 변화를 요약
학습률과 손실을 각각 만들어내는 노드에 scalar_summary 작업(op)을 추가해서 데이터를 모을 수 있음
추가 summary함수들
- tf.image_summary(tag, tensor, max_images=3, collections=None, name=None)
- tf.audio_summary(tag, tensor, sample_rate, max_outputs=3, collections=None, name=None)
4. tf.train.SummaryWriter()
and tf.train.SummaryWriter.add_summary()
- tf.train.SummaryWriter 클래스는 events file을 log 디렉토리에 생성하고 events와 summaries를 추가하는 함수입니다.
- tf.train.SummaryWriter.add_summary 함수는 tf.train.SummaryWriter 클래스의 한 함수이며, 코드에서는 학습할 때마다 요약을 추가해서 그래프를 만드는 것입니다.
tf.merge_all_summaries를 사용해서 모든 요약 노드들을 하나로 합쳐서 한 번에 모든 요약 데이터를 만들 수 있음
샘플코드 #1 : tensorboard에 점 하나 찍는 예제
import tensorflow as tf
a = tf.constant(3.0)
b = tf.constant(5.0)
c = a * b
# tensorboard에 point라는 이름으로 표시됨
c_summary = tf.scalar_summary("point", c)
merged = tf.merge_all_summaries()
with tf.Session() as sess:
writer = tf.train.SummaryWriter("./board/sample_1", sess.graph)
result = sess.run([merged])
tf.initialize_all_variables().run()
writer.add_summary(result[0])
샘플코드 #2 : 두 개의 직선을 출력하는 예제
import tensorflow as tf
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
add = tf.add(X, Y)
mul = tf.mul(X, Y)
# step 1: node 선택
add_hist = tf.scalar_summary("add_scalar", add)
mul_hist = tf.scalar_summary("mul_scalar", mul)
# step 2: summary 통합. 두 개의 코드 모두 동작.
merged = tf.merge_all_summaries()
# merged = tf.merge_summary([add_hist, mul_hist])
with tf.Session() as sess:
init = tf.initialize_all_variables()
sess.run(init)
# step 3: writer 생성
writer = tf.train.SummaryWriter("./board/sample_2", sess.graph)
for step in range(100):
# step 4: 노드 추가
summary = sess.run(merged, feed_dict={X: step * 1.0, Y: 2.0})
writer.add_summary(summary, step)
# step 5: 콘솔에서 명령 실행
# tensorboard --logdir=./board/sample_2