*Tensorboard 장점

(1) "실시간"으로 학습 과정을 그래프로 확인할 수 있다.

- 학습이 시작되고 원하는 step 마다 summary를 실행하는 순간부터 학습이 어떻게 되고 있는지 확인할 수 있음

- 너무 오차가 심해서 보기가 어려우면 smooth하게 표현도 가능하고, 전체적으로 올라가고 있는지 떨어지고 있는지 확인 가능

 

(2) 기존 학습했던 모델과 "동시 비교 분석" 가능함

- 같은 step 수에서 기존 모델보다 학습이 더 잘 되고 있는지, 학습이 떨어지고 있는지 확인하는 것은 매우 중요

- 학습이 처음부터 잘 안되고 있다면 initial 값에서 문제가 있다고 생각해 볼 수도 있음

 

(3) Segmentation 문제를 풀고 있다면, 동시에 Label과 Inference 결과를 실시간으로 "이미지화" 할 수 있음

- Convolution 의 Filter 나 각 Layer에서 나온 결과값들을 실시간으로 확인도 가능

- 그러면 Blackbox라고 불리는 신경망을 시각적으로 이해하는데 도움이 될 것임

 

Visualize Learning

학습 과정을 시각화하려면, 학습 중에 시각화하려는 데이터를 tf.summary 모듈을 이용해서 중간중간에 파일로 기록해놨다가, 학습이 끝난 후에 이 파일을 텐서 보드를 통해서 읽어서 시각화

tf.summary.merge_all

- summary를 사용하기 위해서 초기화

tf.summary.scalar(name, value)

- summary에 추가할 텐서를 정의, name에는 이름, value에는 텐서를 정의

- scalar 형 텐서로 (다차원 행렬이 아닌, 단일 값을 가지는 텐서형만 사용 가능), 주로 accuracy나 loss와 같은 스칼라형 텐서에 사용

tf.summary.histogram(name, value)

- value에 대한 분포도를 보고자 할 때 사용. scalar 와 다르게 다차원 텐서 사용 가능

- 입력 데이터에 대한 분포도나, weight, bias 값의 변화를 모니터링 할 수 있음

tf.train.SummaryWriter

- 파일에 summary 데이터를 쓸 때 사용

 

*데이터 저장(serialize)

- TensorBoard는 TensorFlow를 실행할 때 만들 수 있는 요약 데이터(summary data)가 들어간 TensorFlow 이벤트 파일을 이용

- TensorBoard에서 요약 데이터가 보여주는 라이플 사이클

- 요약 데이터를 얻고 싶은 TensorFlow 그래프, summary operations을 이용해서 어느 노드를 기록할 지 결정

- 학습률이 어떻게 달라지는지, 목표함수가 어떻게 바뀌는지를 기록하고 싶을 것,

- 학습률과 손실을 각각 만들어내는 노드에 "scalar_summary" 작업(op)을 추가해서 데이터를 모을 수 있음

- 특정 layer 에서 발생한 activation, gradient, weight의 분포를 시각화 : "histogram_summary" 작업(op)을 추가해서 데이터를 모을 수 있음

- TensorFlow의 작업(op)들은 이용자가 그 작업이나 연관된 다른 작업을 실행시킬 때까지 아무 것도 하지 않음

- "tf.merge_all_summaries" 를 사용해서 요약 노드들을 하나로 합쳐서 한 번에 모든 요약 데이터를 만들 수 있게 함

- 통합된 요약 작업(summary op)을 실행시키면 모든 요약 데이터를 담은 "summary" proto buffer object를 만들 수 있음

- 마지막으로 이 요약 데이터를 disk에 저장하기 위해 proto buffer object를 tf.train.SummaryWriter 로 넘겨야 함

- "SummaryWriter" 을 쓰기 위해서 모든 요약 데이터를 저장할 디렉토리인 logdir을 정해줘야 한다.

- "SummaryWriter" 는 때에 따라 그래프도 이용 가능

- 그래프 오브젝트를 이용하는 경우에는 TensorBoard가 tensor shape 정보에 덧붙여서 그래프도 보여줄 것임

 

*TensorBoard 실행

- tensorboard --logdir=path/to/log-directory

- logdir : "SummaryWriter" 가 데이터를 저장(serialize)해 놓은 디렉터리

- "logdir" 디렉터리에 다른 실행에 대한 데이터를 저장해 놓은 하위 디렉터리가 있다면 TensorBoard는 모두 다 시각화해서 보여줄 것임

 

*학습 메트릭

(1) 손실 함수

- 학습률과 손실의 관계

- 학습률이 낮을 경우 학습률이 선형적으로 진행

- 학습률이 조금 높을 경우 초반에는 기하급수적으로 손실이 감소하는 것처럼 보이나, 어느 정도 지나면 학습이 진행되지 않음

- 학습률이 많이 높을 경우, 학습이 안됨

 

(2) 정확도(accuracy)

- 훈련 정확도 & 평가 정확도

- training accuracy 와 validataion accuracy 간의 차이가 과적합된 정도다. (overfitting)

- 차이가 큰 경우, overfitting이 발생한 경우로, data regularization을 적용하거나 더 많은 dataset으로 훈련/평가를 시도

- 차이가 없는 경우, 평가 정확도가 훈련 정확도를 잘 쫓아가는 경우로, 네트워크 사이즈(노드 개수, 레이어 개수)를 키우면서 훈련/평가를 시도함

 

(3) weight : update 비율

- weight : update 비율로 (network 전체, layer별로) weight 의 크기에 비해 변경되는 가중치의 update 크기간의 비율

 

param_scale = np.linalg.norm(W.ravel())

update = -learning_rate * dW

update_scale = np.linalg.norm(update.ravel())

w += update

print update_scale / param_scale

 

* 그래프 구성하기

- node 와 operation 으로 구성된 tensorflow graph를 만든다.

- 기본 전역 그래프인 tf.Graph 인스턴스를 기본 그래프로 사용

 

입력 노드 생성

예측 모델 정의

손실 정의

학습 정의(최적화 방법)

그래프 평가(학습 실행)

 

*summary operation 추가하기

- 측정하려는 operation 에 대해 tf.summary operation을 추가함

- 손실의 경우 scalar 값이므로, tf.summary.scalar 를 이용

- tf.summary operation 을 등록할 때, 첫 번째 parameter로 operation을 식별할 수 있는 tag를 전달

"tf.summary.scalar('cross_entropy', cross_entropy)"

 

*summary operation 에서 제공하는 operation 종류

- tensor_summary

- scalar

- histogram

- image

 

*summary operation 병합하기

- 추가된 summary operation은 모델 graph 와는 별개로 평가해야 하며, 개별 operation 각각을 평가해야 함

- 쉽게 평가하기 위해 summary operation을 하나의 operation으로 병합한다.

 

*file 로 저장하기

- tensorboard 는 각 summary operation이 평가된 결과가 저장된 파일을 기반으로 함

- 파일을 저장할 수 있는 FileWriter를 생성, 그래프도 parameter로 전달

 

*평가하기

 

*Visualize Learning

 

반응형

'스타트업 > AI' 카테고리의 다른 글

[AI] Cascade RCNN  (0) 2020.07.13
[AI] mmcv  (0) 2020.07.09
[AI] jupyter notebook tensorboard, proxy  (0) 2020.07.09
[AI] TensorboardX  (0) 2020.07.08
[AI] TF-IDF  (0) 2020.07.08

+ Recent posts