1. TensorBoard 설정

- torch.utils 의 tensorboard를 불러오고, TensorBoard에 정보를 제공(write)하는 SummaryWriter 를 주요한 객체인 SummaryWriter를 정의하여 TensorBoard를 설정

 

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('runs/experiment')

 

 

2. TensorBoard 에 기록하기

 

dataiter = iter(trainloader(

images, labels = dataiter.next()

img_grid = torchvision.utils.make_grid(images)

matplotlib_imshow(img_grid, one_channel=True)

writer.add_image('images', img_grid)

 

(command line)에서

tensorboard --logdir=runs

 

https://localhost:6006

 

3. TensorBoard를 사용하여 모델 살펴보기

 

모델 시각화

writer.add_graph(net, images)

writer.close()

 

"Net"을 더블 클릭하여 펼쳐보면, 모델을 구성하는 개별 연산(operation)들에 대해 자세히 볼 수 있음

 

4. TensorBoard에 "Projector" 추가하기

 

add_embedding method를 통해 고차원 데이터의 저차원 표현(representation)을 시각화할 수 있음

 

def select_n_random(data, labels, n=100):

    assert len(data) == len(labels)

    perm = torch.randperm(len(data))

 

    return data[perm][:n], labels[perm][:n]

 

#임의의 이미지들과 정답(target) 인덱스를 선택

images, labels = select_n_random(trainset.data, trainset.targets)

# 각 이미지의 분류 라벨(class label)을 가져옴

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()

 

- TensorBoard의 'Projector' 탭에서 - 각각은 784 차원인 -100개의 이미지가 3차원 공간에 투사(project)된 것을 볼 수 있음. 클릭하고 drag하여 3차원으로 투영된 것을 회전할 수 있음. "Color by : label"을 선택하고, "야간모드(night mode)"를 활성화하면 이미지 배경이 흰색이 되어 더 편하게 볼 수 있음

 

5. TensorBoard로 모델 학습 추적하기

학습 과정부터 시작하여 TensorBoard가 어떻게 모델 학습과 평가(evaluation)를 더 명확히 추적(track)

TensorBoard에 학습 중 손실을 기록하는 것 대신에 plot_classes_preds 함수를 통해 모델의 예측 결과를 함께 볼 수 있도록 함

 

def images_to_probs(net, images):

    output = net(images)

    _, 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):

    preds, probs = images_to_probs(net, images)

    fig = plt.figure(figsize=(12, 48))

    for idx in np.arrange(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]]

 

 

반응형

'스타트업 > AI' 카테고리의 다른 글

[AI] TensorboardX  (0) 2020.07.08
[AI] TF-IDF  (0) 2020.07.08
[AI] mmdetection transfer learning  (0) 2020.07.06
[AI] Adaptive Transfer Learning  (0) 2020.07.02
[AI] transfer learning  (0) 2020.07.01

+ Recent posts