본문 바로가기
Machine Learning/Pytorch

Pytorch Tensorboard 사용하기

by SoongE 2021. 1. 13.

pytorch에서 tensorboard를 이용해서 log를 찍어보는 과정에 대해 알아보자! 쉽게 train log를 볼 수 있어서 나는 자주 사용하는 편이다.

일단 tensorboard를 설치해야한다.

pip install tensorboard

선언

파이썬을 켜고 다음과 같이 SummaryWriter를 import한다. log_dir은 따로 명시하지 않을 시, ./runs이 default이다. log_dir은 tensorboard의 log 기록이 저장될 공간을 의미한다.

from torch.utils.tensorboard import SummaryWriter

log_dir = "./log_dir"

writer = SummaryWriter(log_dir)

기록

사전 준비는 끝났다. 이제 기록할 값을 넣어주기만 하면 된다.

 

Image

images, labels = get_dataset()

img_grid = torchvision.tuils.make_grid(images)

writer.add_image("image_name", img_grid)

 

Model

모델은 모델과 함께 input값을 넣어주어야 한다.

writer.add_graph(net,images)

 

Projector

# 임의의 이미지들과 정답(target) 인덱스를 choice
images, labels = select_n_random(trainset.data, trainset.targets)

# 각 이미지의 분류 라벨(class label)을 get
class_labels = [classes[lab] for lab in labels]

# 임베딩(embedding) 내역을 기록
features = images.view(-1, 28 * 28)
writer.add_embedding(features,
                    metadata=class_labels,
                    label_img=images.unsqueeze(1))
writer.close()

 

Scalar

writer.add_scalar('Loss/Train',loss/100,epoch*len(train_loader) + i)

 

Figure

def images_to_probs(net, images):
    '''
    학습된 신경망과 이미지 목록으로부터 예측 결과 및 확률을 생성
    '''
    output = net(images)
    # convert output probabilities to predicted class
    _, preds_tensor = torch.max(output, 1)
    preds = np.squeeze(preds_tensor.numpy())
    return preds, [F.softmax(el, dim=0)[i].item() for i, el in zip(preds, output)]

def plot_classes_preds(net, images, labels):
    '''
    학습된 신경망과 배치로부터 가져온 이미지 / 라벨을 사용하여 matplotlib
    Figure를 생성. 이는 신경망의 예측 결과 / 확률과 함께 정답을 보여주며,
    예측 결과가 맞았는지 여부에 따라 색을 다르게 표시합니다. "images_to_probs"
    함수를 사용.
    '''
    preds, probs = images_to_probs(net, images)
    # 배치에서 이미지를 가져와 예측 결과 / 정답과 함께 표시
    fig = plt.figure(figsize=(12, 48))
    for idx in np.arange(4):
        ax = fig.add_subplot(1, 4, idx+1, xticks=[], yticks=[])
        matplotlib_imshow(images[idx], one_channel=True)
        ax.set_title("{0}, {1:.1f}%\n(label: {2})".format(
            classes[preds[idx]],
            probs[idx] * 100.0,
            classes[labels[idx]]),
                    color=("green" if preds[idx]==labels[idx].item() else "red"))
    return fig

writer.add_figure('pred Vs target', plot_class_preds(net,inputs,labels),global_step=epoch * len(train_loader) + i)
```

 

확인

만약 `log_dir = "./log_dir"`이라면 log_dir이 보이는 위치에서 cmd창에 아래 코드를 실행한다.

tensorboard logdir=./log_dir

그러면 아래와 같이 화면이 실행되는 것을 알 수 있는데 화면에 보이는 주소(http://localhost:6006/)을%EC%9D%84) 복사해서 인터넷 주소창에 입력하면 log 기록을 볼 수 있다. 주소는 사람마다 다를 수 있다.

cmd 입력 결과

결과

다음과 같은 모습들을 볼 수 있다.

tensorboard scalar wirte 결과물
tensorboard model write 결과물

댓글