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 기록을 볼 수 있다. 주소는 사람마다 다를 수 있다.
결과
다음과 같은 모습들을 볼 수 있다.
댓글