본문 바로가기

프로그래밍

ALL_ABOUT_TORCH - 2 / Plot training loss with visdom

ALL_ABOUT_TORCH

사용자 입장에서 파이토치 라이브러리를 사용하면서 필요한 부분에 대하여 포스팅 한 글 입니다. 

Plot training loss with visdom

이번 시간에서 training 도중에 loss를 시각적으로 확인하는 방법 중 하나인 

Visdom 사용법을 살펴보겠습니다. 

 


1. 아나콘다 커멘드 창에서 visdom 을 설치해줍니다. 

pip install visdom

 

2. 콘다 커멘드 창에서 visdom을 실행시켜 줍니다 .

visdom

Tip

만일 다른 포트 번호를 원한다면 2번에서 visdom 대신에 visdom -p 8099

이런식으로 다른 포트 번호를 입력해주시면 됩니다. 

 

 

3. 소스코드 창에서 vis 객체를 만듭니다. 

import visdom
vis = visdom.Visdom()

3번을 실행 후 웹브라우저에서 localhost:8097 로 접속이 가능합니다. 

 

4. 원하는 값을 visdom 객체를 통해서 보내주시면 됩니다. 

EPOCH = 3

for t in range(EPOCH): # EPOCH
    for i, (sample, target) in enumerate(train_loader): #BATCH
        sample = sample.view(sample.size()[0], -1)   
        y = model(sample)
        loss = criterion(y, target)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if i % 1000 == 99:
            print(t, loss.item())  
    #--------------- VISDOM 
        vis.line(X=[i], Y=[loss.data], 
            win="loss", 
            update="append", 
            name=f"epoch {t+1}",
            opts=dict(showlegend=True))     
    #---------------------------------------------------

저는 batch에 대해서 Loss를 플롯하고 싶었으므로 Y=[loss.item()] 으로 코드를 작성하였습니다. 

* loss.item()인 이유는 loss가 tensor이므로 JSON serializable하지 않아서 입니다. 

* X, Y는 리스트로 값을 보내야 합니다. 

* win 은 plot을 하는 figure를 나타냅니다. 

* update 방식은 append으로 합니다. 

* name은 선의 이름입니다. 이름이 다른 선은 한 윈도우 내에서 다른 선으로 그려집니다. 

* option에서 legend를 보여지게 하였습니다. 

 

5. 결론

 

여기서는 loss를 plot하므로 vis.line 을 사용하였습니다. 

더 다양한 plot을 원하신다면 facebook의 visdom github를 참고하시면 좋습니다. 

github.com/facebookresearch/visdom 

 

facebookresearch/visdom

A flexible tool for creating, organizing, and sharing visualizations of live, rich data. Supports Torch and Numpy. - facebookresearch/visdom

github.com

 

파이토치 버전에 대해서 해당 코드가 제대로 작동하지 않을 수 있습니다. 

APPENDIX에서 해당 코드가 돌아가는 버전을 적어놨습니다. 

전체 코드는 GITHUB에 올려뒀습니다. 

 

github.com/fxnnxc/all_about_torch/blob/main/train_with_visdom.ipynb

 

fxnnxc/all_about_torch

Contribute to fxnnxc/all_about_torch development by creating an account on GitHub.

github.com


APPENDIX

계발환경

python 3.6.8
pytorch 1.7.0
numpy 1.19.2
visdom 0.1.8.9