학습 과정 시각화하기

이번 장에서는 PyTorch에서 학습 과정을 시각화할 수 있는 툴에 대해서 알아보겠습니다. Tensorflow의 Tensorboard처럼 PyTorch에서도 사용할 수 있는 유용한 도구들이 많습니다. 이번에는 Visdom에서 알아보겠습니다.

01. Visdom

Visdom은 PyTorch에서 사용할 수 있는 시각화 도구 중 하나입니다.

visdom

Visdom의 설치는 Visdom 문서 를 확인 바랍니다. Visdom은 자세한 API를 제공하지 않습니다. 하지만 API가 별도로 존재하지 않는 이유는 사용법이 간단하기 때문이기도 합니다. Visdom의 Github repository에서 제공하는 간단한 API문서예제코드를 숙지하면 누구나 바로 자신의 프로젝트에 Visdom을 추가할 수 있습니다.

02. 프로젝트에 적용

이제 본격적으로 우리 프로젝트에 적용해봅시다. YOLO와 같은 multi-task learning은 계산해야 할 로스가 많습니다. 따라서 전체 로스만 시각화하는 것도 좋지만 각 로스들을 개별적으로 출력해 줄 필요가 있습니다.

if USE_VISDOM:
    viz = visdom.Visdom(use_incoming_socket=False)
    vis_title = 'Yolo V1 Deepbaksu_vision (feat. martin, visionNoob) PyTorch on ' + 'VOC'
    vis_legend = ['Train Loss']
    iter_plot = create_vis_plot(viz, 'Iteration', 'Total Loss', vis_title, vis_legend)
    coord1_plot = create_vis_plot(viz, 'Iteration', 'coord1', vis_title, vis_legend)
    size1_plot = create_vis_plot(viz, 'Iteration', 'size1', vis_title, vis_legend)
    noobjectness1_plot = create_vis_plot(viz, 'Iteration', 'noobjectness1', vis_title, vis_legend)
    objectness1_plot = create_vis_plot(viz, 'Iteration', 'objectness1', vis_title, vis_legend)
    obj_cls_plot = create_vis_plot(viz, 'Iteration', 'obj_cls', vis_title, vis_legend)
};

여기에서는 visdom 객체를 생성합니다. 그다음 사용법은 matplotlib와 같은 다른 시각화 툴과 아주 유사합니다. title, legend를 정의하고, 각 로스를 출력한 plot 객체를 선언합니다. plot 객체를 create_vis_plot() 함수를 사용합니다.

image create_visdom() 함수를 실행하면 다음과 같이 visdom 서버에 plot이 추가됩니다.

if USE_VISDOM:
    update_vis_plot(viz, (epoch + 1) * total_step + (i + 1), loss.item(), iter_plot, None, 'append')
    update_vis_plot(viz, (epoch + 1) * total_step + (i + 1), obj_coord1_loss, coord1_plot, None, 'append')
    update_vis_plot(viz, (epoch + 1) * total_step + (i + 1), obj_size1_loss, size1_plot, None, 'append')
    update_vis_plot(viz, (epoch + 1) * total_step + (i + 1), obj_class_loss, obj_cls_plot, None, 'append')
    update_vis_plot(viz, (epoch + 1) * total_step + (i + 1), noobjness1_loss, noobjectness1_plot, None, 'append')
    update_vis_plot(viz, (epoch + 1) * total_step + (i + 1), objness1_loss, objectness1_plot, None, 'append')

그리고 학습 과정을 Visdom에 출력하려면 다음과 같이 계산한 loss를 앞서 선언한 plot 객체에 뿌려주기만 하면 됩니다. 여기에는 update_vis_plot() 함수를 사용합니다.

image update_vis_plot()을 실행하면 Visdom 서버에서 loss가 지속해서 업데이트합니다.

REFERENCES

[1] https://github.com/facebookresearch/visdom


크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

results matching ""

    No results matching ""