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 |