Почему резюме TensorBoard не обновляется? - PullRequest
0 голосов
/ 04 мая 2019

Я использую тензорную доску с pytorch1.1 для записи значений потерь.

Я использую writer.add_scalar("loss", loss.item(), global_step) в каждом теле цикла for.

Однако график построения не обновляется во время тренировкиобрабатывает.

Каждый раз, когда я хочу увидеть последнюю потерю, я должен перезапускать сервер тензорной доски.

Код здесь

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasets, transforms

# Writer will output to ./runs/ directory by default
writer = SummaryWriter()

transform = transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]
)
trainset = datasets.MNIST("mnist_train", train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
model = torchvision.models.resnet50(False)
# Have ResNet model take in grayscale rather than RGB
model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
model.fc = nn.Linear(2048, 10, True)

criterion = nn.CrossEntropyLoss()

epochs = 100

opt = torch.optim.Adam(model.parameters())

niter = 0

for epoch in range(epochs):
    for step, (x, y) in enumerate(trainloader):
        yp = model(x)
        loss = criterion(yp, y)
        opt.zero_grad()
        loss.backward()
        opt.step()
        writer.add_scalar("loss", loss.item(), niter)
        niter += 1
        print(loss.item())

grid = torchvision.utils.make_grid(images)
writer.add_image("images", grid, 0)
writer.add_graph(model, images)
writer.close()

Обучение продолжаетсяпродолжается, и глобальные шаги уже были 3594. Тем не менее, тензорная доска все еще показывает около 1900.

enter image description here

1 Ответ

0 голосов
/ 06 мая 2019

Внутреннее кэширование выполняется на стороне регистрации.Чтобы узнать, является ли это проблемой, создайте ваш SummaryWriter с помощью

writer = SummaryWriter(flush_secs=1)

и посмотрите, обновятся ли все сразу.Если это так, не стесняйтесь настраивать flush_secs (по умолчанию 120) для вашего случая.Однако из вашего описания это может быть со стороны визуализации TensorBoard.Если это так, то это должно быть как-то связано с интервалом опроса.

Меняет ли это поведение установка TensorFlow (которая заставляет TensorBoard использовать другую бэкэнд-файловую систему)?

...