Skip to content

lanpa/tensorboardX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5a90eef · Jan 18, 2018
Aug 30, 2017
Oct 16, 2017
Jan 18, 2018
Jan 5, 2018
Oct 16, 2017
Dec 31, 2017
Oct 11, 2017
Dec 31, 2017
Nov 10, 2017
Nov 10, 2017
Jan 18, 2018
Aug 28, 2017
Nov 10, 2017
Dec 29, 2017
Jan 4, 2018
Dec 18, 2017

Repository files navigation

tensorboardX

Build Status PyPI version Downloads

Write TensorBoard events with simple function call.

  • Support scalar, image, histogram, audio, text, graph, onnx_graph, embedding and pr_curve summaries.

demo_graph.py needs pytorch v0.4, so you have to build pytorch from source(commit newer than 040336f, which supports scoping).

Install

Tested on anaconda2 / anaconda3, with PyTorch 0.3 / torchvision 0.2 / tensorflow-tensorboard 0.4

pip install tensorboardX

or build from source:

pip install git+https://github.com/lanpa/tensorboard-pytorch

Example

  • Run the demo script: python demo.py
  • Use TensorBoard with tensorboard --logdir runs (needs to install TensorFlow)
# demo.py

import torch
import torchvision.utils as vutils
import numpy as np
import torchvision.models as models
from torchvision import datasets
from tensorboardX import SummaryWriter

resnet18 = models.resnet18(False)
writer = SummaryWriter()
sample_rate = 44100
freqs = [262, 294, 330, 349, 392, 440, 440, 440, 440, 440, 440]

for n_iter in range(100):

    dummy_s1 = torch.rand(1)
    dummy_s2 = torch.rand(1)
    # data grouping by `slash`
    writer.add_scalar('data/scalar1', dummy_s1[0], n_iter)
    writer.add_scalar('data/scalar2', dummy_s2[0], n_iter)

    writer.add_scalars('data/scalar_group', {'xsinx': n_iter * np.sin(n_iter),
                                             'xcosx': n_iter * np.cos(n_iter),
                                             'arctanx': np.arctan(n_iter)}, n_iter)

    dummy_img = torch.rand(32, 3, 64, 64)  # output from network
    if n_iter % 10 == 0:
        x = vutils.make_grid(dummy_img, normalize=True, scale_each=True)
        writer.add_image('Image', x, n_iter)

        dummy_audio = torch.zeros(sample_rate * 2)
        for i in range(x.size(0)):
            # amplitude of sound should in [-1, 1]
            dummy_audio[i] = np.cos(freqs[n_iter // 10] * np.pi * float(i) / float(sample_rate))
        writer.add_audio('myAudio', dummy_audio, n_iter, sample_rate=sample_rate)

        writer.add_text('Text', 'text logged at step:' + str(n_iter), n_iter)

        for name, param in resnet18.named_parameters():
            writer.add_histogram(name, param.clone().cpu().data.numpy(), n_iter)

        # needs tensorboard 0.4RC or later
        writer.add_pr_curve('xoxo', np.random.randint(2, size=100), np.random.rand(100), n_iter)

dataset = datasets.MNIST('mnist', train=False, download=True)
images = dataset.test_data[:100].float()
label = dataset.test_labels[:100]

features = images.view(100, 784)
writer.add_embedding(features, metadata=label, label_img=images.unsqueeze(1))

# export scalar data to JSON for external processing
writer.export_scalars_to_json("./all_scalars.json")
writer.close()

Screenshots

Tweaks

To add more ticks for the slider (show more image history), you can modify the hardcoded event_accumulator in ~/anaconda3/lib/python3.6/site-packages/tensorflow/tensorboard/backend/application.py as you wish.

For tensorflow-tensorboard > 0.17 see #44

Reference