[TensorFlow] TensorBoard
```bash
크게 다음 세가지 시각화를 지원한다.
- Visualizing learning
- Graph visualization
- Embedding visualization
Visualizing learning
1.
시각화하고 싶은 노드를 summary operations의 인자로 넘기면 그래프에 summary operation이 추가된다.
아래의 경우 노드 logits에 tf.summary.histogram ops를 붙인다고 생각하면 된다.
```py
logits_hist = tf.summary.histogram('logits(output neuron)', logits)
accuracy_scalar = tf.summary.scalar('accuracy', accuracy)
```
2.
기존 그래프가 실행될 때, 추가된 summary operations에 의존하지 않기 때문에 summary operations는 따로 run해줘야 한다. 약간 헷갈릴 수 있는데, 의존 관계를 갖고 있어 optimizer - cost - logit - W, b ... 순으로 거슬러 올라가는 것을 생각해보면 된다.
아무튼, summary operations들을 한꺼번에 실행하기 위해 묶어주는 방법은 두가지다.
```py
merged_summary = tf.summary.merge_all() #.... [I]
merged_summary = tf.summary.merge(['logits_hist', 'accuracy_scalar']) #.... [II]
```
* merge_all() 시 merge되는 것은 변수가 공유되는 영역이다.
[II] 처럼 output을 merge하는 식으로 작동하기 때문에, output이 존재하는 범위 밖에서 merge_all()하면 merge 되지 않는다.
* 또 하나 주의해야 할 점은 위 코드는 실행될 때 마다 그래프에 Operation을 추가한다
그래서 반복문 안에 위치해있으면 같은 Operation이 계속 그래프에 추가된다.
3.
summary operations이 run 되었을 때, 결과를 파일로 저장할 writer를 생성해둔다.
graph는 선언하면서 지정해도 좋고, 따로 추가해도 된다. 아무튼 추가해야 실행이 된다.
```py
writer = tf.summary.FileWriter('./tflogs/log-'+today, graph=sess.graph)
# writer.add_graph(some.graph) #graph를 따로 추가하는 경우.
```
1. FileWriter를 graph에 추가하는 부분은 반드시 graph를 build하는 코드 뒤에 위치해야 한다.
즉, 먼저 graph가 build되고 나서 FileWriter가 graph에 추가되어야 graph visualization이 제대로 수행된다.
2. 반복문 바깥에 위치해야 한다. 반복문 안쪽에 위치해 있으면 events 파일이 계속 생성된다.
4.
5.
InvalidArgumentError가 발생하는 경우
- ``py tf.variable.scope()``를 사용해 각 모델의 변수 영역을 구분하고,
``py tf.summary.merge([summary_variables])``로 직접 변수를 merge하면 모델 별로 묶을 수 있다. - Session에 각각 다른 graph를 지정해 생성한다.
``py with graph.as_default():``를 이용해 그래프를 지정해서 변수를 추가하고 merge한다.
``py sess.run()`` 시 Session에 등록된 graph를 실행하므로 변수 추가하고 merge할 때만 ``py as_default()``를 사용해주면 된다.
Graph visualization
``py tf.name_scope``를 사용하면 그래프를 보여줄 때 각 name_scope 별로 묶어준다. 보통 ``py with``와 함께 사용하며 layer 단위로 묶게된다.
'Machine Learning > TensorFlow' 카테고리의 다른 글
[TensorFlow] estimator (0) | 2017.11.15 |
---|---|
[TensorFlow] Datasets API (0) | 2017.11.14 |
[TensorFlow] <lagacy> input pipelines / Threading and Queue (0) | 2017.04.22 |
[TensorFlow] CNN (0) | 2017.04.22 |
[TensorFlow] 자료형과 기본적인 사용법 (0) | 2017.04.20 |