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