전공관련/Deep Learning

[Pytorch] pytorch 와 tensorboard를 같이 써보자.

매직블럭 2019. 11. 15. 15:09

pytorch 환경에서는 적당한 log visualization tool이 없었다.

log를 파싱해서 plot 하거나, visdom을 쓴다고 해도 부족한 부분이 있어서 아쉬운점이 있었지만

pytorch가 1.3버전으로 올라가면서부터 tensorflow의 tensorboard와 연동이 가능해 졌다.

그래서 사용 방법 정리!

 


우선 anaconda의 가상환경을 사용하는 것을 것을 전제로 시작. pip와 큰 차이는 없다.

 

1. tensorflow 설치

tensorflow와 함께 설치되는 tensorboard가 있어야 한다.

# install tensorflow
conda install tensorflow

 

2. tensorboardx 설치

pip를 이용 할 경우 버전 문제로 에러가 발생하는 경우도 있다해서 나는 conda로 설치 (190115 기준)

# pip
pip install tensorboardx

# conda
conda install -c conda-forge tensorboardx

 

3. import tensorboardx

SummaryWriter를 생성하면 실행중인 경로에 runs 폴더가 자동 생성됨. 이벤트는 여기에 저장.

from tensorboardx import SummaryWriter
summary = SummaryWriter()

 

4. tensorboard 출력을 위한 값 저장하기

summarywriter에는 다양한 값을 저장 할 수 있다.

아래 예 외에도 오디오, 임베딩, json export, pr curve 등의 옵션도 존재한다. 

(참고 : https://pytorch.org/docs/stable/tensorboard.html)

writer를 close 하지 않으면 값이 저장되지 않으니 close 해주던가 with 안에 넣어주자.

# 단일 변수
writer.add_scalar("그룹/변수명", 변수, iter)

# 다중 변수
# 한 그래프에 여러 변수를 그릴경우는 dict 형태로 넘겨준다
writer.add_scalars("그룹/변수명", 변수dict, iter)

# 이미지, index는 N, C , W, H 순
# 3차원 numpy array도 가능. 4차원 이상은 tensor로 변환 필요
writer.add_image("그룹/변수명", tensor(or numpyArr), iter)

# 텍스트
writer.add_text("그룹/변수명", "text", iter)

# named_param
for name, param in NET.named_parameters():
	writer.add_histogram(name, param.clone().cpu.data.numpy(), iter)
    
# 저장 후에는 반드시 writer close 해주기
writer.close()

 

5. tensorboard 서버 활성화 하여 결과 확인하기

tensorboard --logdir [log 경로] --port=XXXX(Optional, default=6006)
# example
tensorboard --logdir ./runs

 

6. tensorboard 서버 접근

# web browser에서 
localhost:[설정한 포트]

# ex
localhost:6006