본문 바로가기

AI/Pytorch

Pytorch visualization #1. Visodom 사용법

파이토치를 이용하다가 실시간 visualization을 하기 위해여 visdom을 사용하였다.

Tensorboad를 사용하다가 visdom을 써보니 편한듯 하지만 좀 어설퍼보인다는 생각이 자꾸 든다.

최근호님의 튜토리얼을 현재 버전에 맞게 수정하고 그림을 추가하였다.

 

Visdom Tutorial

튜토리얼, 현재 버전에 맞게 변형 및 그림 추가

- 본 블로그 실습 코드 : https://github.com/keep-steady/etc_code/blob/master/visdom_tutorial.ipynb
- 공식 사이트 : https://github.com/facebookresearch/visdom
- 튜토리얼 : https://github.com/GunhoChoi/PyTorch-FastCampus/blob/master/02_Regression%26NN/Visdom_Tutorial.ipynb

 

1. 설치

1
pip install visdom

 

2. 서버 사용시 터미널창에


> visdom 을 입력

 

local에서
> http://서버주소:defaul_port/ 로 접근 가능
> http://192.168.10.228:8097/

 

3. visdom 선언

1
2
3
4
5
6
from visdom import Visdom
import numpy as np
import math
import os.path
 
viz = Visdom()

4.글 남기기

1
textwindow = viz.text("Hello Pytorch")

 

 

5. 그림 한개 그리기

1
2
3
image_window = viz.image(np.random.rand(3,256,256),
                          opts=dict(title = "random",
                                    caption = "random noise"))

 

6. 그림 여러개

1
2
3
images_window = viz.images(np.random.rand(10,3,64,64),
                           opts=dict(title = "random",
                                     caption = "random noise"))

 

7. Scatter 그림 그리기

1
2
3
4
5
6
7
8
9
10
11
12
= np.random.rand(100)
scatter_window=viz.scatter(X=np.random.rand(1002),
                           Y=(Y+1.5).astype(int),
                           opts=dict(legend=['Apples''Pears'],
                                     xtickmin=0,
                                     xtickmax=2,
                                     xtickstep=0.5,
                                     ytickmin=0,
                                     ytickmax=2,
                                     ytickstep=0.5,
                                     markersymbol='cross-thin-open')
                           )
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter

 

8. Update image


2018년 초 vis.updateTrace() 함수가 없어짐, 대신 update = 'append' or 'replace'로 사용.

update - 'append' : 기존 그림에 추가해서 그리기

update - 'replace' : 기존 그림 지우고 대체하기

 

1
2
scatter_window=viz.scatter(X=np.random.rand(50), Y=np.random.rand(50),
                            win=scatter_window, name='bananas', update='append')

 

 

9. 그림 업데이트

 

update - 'append' : 기존 그림에 추가해서 그리기

update - 'replace' : 기존 그림 지우고 대체하기

 

1
2
scatter_window=viz.scatter(X=np.random.rand(50),Y=np.random.rand(50),
                            win=scatter_window, name='bananas', update='replace')

 

 

10. 3D Scatter Plot

 

x 축에 2차원, y축에 1차원을 추가하여 3차원 만듬

 

1
2
viz.scatter(X=np.random.rand(1003), Y=(Y + 1.5).astype(int), 
            opts=dict(legend=['Men''Women'],markersize=5))

 

11. Bar Plot

 

 

12. Stacked Bar Plot

 

누적 그래프, stacked = True

1
2
3
4
5
6
        opts=dict(stacked=True,
                  legend=['Facebook''Google''Twitter'],
                  rownames=['2012''2013''2014''2015''2016']
                  )
        )

 

 

13. Unstacked Bar Plot

 

비교 그래프, stacked = False

1
2
3
4
5
        opts=dict(stacked=False,
                  legend=['The Netherlands''France''United States']
                )
        )

 

 

14. Contour Map & Surface

 

contour, 2차원

 

1
2
3
4
5
= np.tile(np.arange(1101), (1001))
= x.transpose()
= np.exp((((x - 50** 2+ ((y - 50** 2)) / -(20.0 ** 2))
 
viz.contour(X=X, opts=dict(colormap='Viridis'))

 

 

15. surface, 3차원

 

1
viz.surf(X=X, opts=dict(colormap='Hot'))

 

 

16. Line Plot

 

 

17. Update Line Plot

 

line updates, update='append' 를 이용

 

1
2
3
4
5
6
7
8
9
10
11
win =   viz.line(
                 X=np.column_stack((np.arange(010), np.arange(010))),
                 Y=np.column_stack((np.linspace(51010), np.linspace(51010+ 5)),
                )
 
        viz.line(
                 X=np.column_stack((np.arange(1020), np.arange(1020))),
                 Y=np.column_stack((np.linspace(51010), np.linspace(51010+ 5)),
                 win=win,
                 update='append'
                )

 

 

18. Pie Chart

 

pie chart, 원형 차트, 엑셀에서 자주 이용

 

1
2
= np.asarray([192655])
viz.pie(X=X, opts=dict(legend=['Residential''Non-Residential''Utility']))

 

 

19. With PyTorch Tensors

 

PyTorch tensor, 좌표를 전다랗여 torch_tensor로 그래프 그리기

 

1
viz.line(Y=torch.Tensor([[0.0.], [1.1.]]))

 

 

Conclusion

 

visdom은 페북에서 만든 pytorch용 visualization tool 이다.

근데 사용하다보면....참 좀 허접해보이고 엉성하다는 개인적인 느낌이 든다.

역시, TensorboardX를 써야겠다. 다음 포스터는 TensorboardX 에 대한 글이다.

'AI > Pytorch' 카테고리의 다른 글

Pytorch visualization #2. TensorboardX 사용법  (3) 2019.05.09
Pytorch 사용법 정리  (0) 2019.05.08