AI

PyTorch Monitoring tools | 학습과정 쉽게 그래프로 살펴보기

cstory-bo 2024. 1. 12. 14:39

오늘은 PyTorch에서 쉽게 그래프 등 시각화하여 살펴볼 수 있는 방법들을 소개하려고 한다. 

원래 matplotlib 밖에 모르던 때는 귀찮아서 잘 안그렸지만, 확실히 시각화해서 보는게 학습과정 이해에 필요한 것 같다.

아래의 도구들은 귀찮다라는 말을 달고 사는 내가 쓸 정도니까
대부분의 사람들은 좋아하지 않을까...?라는 생각이 든다.☺️

Monitoring tools

학습과정을 트래킹 하기 위한 도구들이다.

Tensorboard

  • Tensorflow의 프로젝트로 만들어진 시각화 도구이다.
  • 학습 그래프, metric, 학습 결과의 시각화를 지원한다.

Tensorboard 지원 도구

  • scalar : metric 등 상수 값의 연속(epoch 단위)을 표시한다.
  • graph : 모델의 computational graph를 표시한다.
  • histogram : weight 등 값의 분포를 표현한다.
  • image : 예측값과 실제값을 비교 표시한다.
  • mesh : 3d형태의 데이터를 표현하는 도구이다.

사용 방법

우선 Tensorboard 기록을 위한 directory를 생성한다.

import os
logs_base_dir = "logs"
os.makedirs(logs_base_dir, exist_ok=True)

기록 생성 객체인 SummaryWriter를 생성한다.

from torch.utils.tensorbard import SummaryWriter

writer=SummaryWriter(logs_base_dir)
for n_iter in ramge(100):
	writer.add_scalar('Loss/train',np.random.random(),n_iter)
	writer.add_scalar('Loss/test',np.random.random(),n_iter)
	writer.add_scalar('Accuracy/train',np.random.random(),n_iter)
	writer.add_scalar('Accuracy/test',np.random.random(),n_iter)
writer.flush() # 값을 기록한다 (disk에 쓰기)

add_scalar 함수 : scalar 값 기록

Loss/train : loss category에 train 값

n_iter: x축의 값

jupyter 상에서 tensorboard 수행하고 

파일 위치 지정 같은 명령어를 입력한다.

%load_ext tensorboard
%tensorboard --logdir {logs_base_dir}

Weight & biases (Wandb)

나도 처음 봤을 때 완디비라고 읽는 줄 알았으나,,,더블유-앤드-비 라고 읽는다고 한다.😮

특징

  • 머신러닝 실험을 원활히 지원하기 위한 상용도구이다.
  • 협업, code versioning, 실험 결과기록 등을 제공해준다.
  • MLOps의 대표적인 툴로 저변 확대 중이다.

설치

!pip install wandb -q

config 설정

config = {"epochs":EPOCHS,"batch_size":BATCH_SIZE,"learning_rate":LEARNING_RATE}
wandb.init(project="my-test-project",entity='~',config=config)
# wandb.config.batch_size = BATCH_SIZE
# wandb.config.learning_rate = LEARNING_RATE

학습 후 기록

for e in range(1,EPOCHS+1):
	epoch_loss=0
	epoch_acc=0
	for X_batch,y_batch in train_dataset:
		X_batch, y_batch = X_batch.to(device),y_batch.to(device).type(torch.cuda.FloatTensor)
		...
		optimizer.step()
		...
	wandb.log({'accuracy':train_acc,'loss':train_loss}) # Tensorboard의 add와 동일