mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: This is a porting of the fix from: https://github.com/lanpa/tensorboardX/issues/421 cc orionr Pull Request resolved: https://github.com/pytorch/pytorch/pull/20688 Reviewed By: NarineK Differential Revision: D15415093 Pulled By: orionr fbshipit-source-id: d32a6298218fbc6fe315aa0f18b57e0c8ef92627
100 lines
3.2 KiB
ReStructuredText
100 lines
3.2 KiB
ReStructuredText
torch.utils.tensorboard
|
|
===================================
|
|
|
|
.. warning::
|
|
|
|
This code is EXPERIMENTAL and might change in the future. It also
|
|
currently does not support all model types for ``add_graph``, which
|
|
we are actively working on.
|
|
|
|
Before going further, more details on TensorBoard can be found at
|
|
https://www.tensorflow.org/tensorboard/
|
|
|
|
Once you've installed TensorBoard, these utilities let you log PyTorch models
|
|
and metrics into a directory for visualization within the TensorBoard UI.
|
|
Scalars, images, histograms, graphs, and embedding visualizations are all
|
|
supported for PyTorch models and tensors as well as Caffe2 nets and blobs.
|
|
|
|
The SummaryWriter class is your main entry to log data for consumption
|
|
and visualization by TensorBoard. For example:
|
|
|
|
.. code:: python
|
|
|
|
|
|
import torch
|
|
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 = torch.nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
|
|
images, labels = next(iter(trainloader))
|
|
|
|
grid = torchvision.utils.make_grid(images)
|
|
writer.add_image('images', grid, 0)
|
|
writer.add_graph(model, images)
|
|
writer.close()
|
|
|
|
This can then be visualized with TensorBoard, which should be installable
|
|
and runnable with::
|
|
|
|
pip install tb-nightly # Until 1.14 moves to the release channel
|
|
tensorboard --logdir=runs
|
|
|
|
|
|
Lots of information can be logged for one experiment. To avoid cluttering
|
|
the UI and have better result clustering, we can group plots by naming them
|
|
hierarchically. For example, "Loss/train" and "Loss/test" will be grouped
|
|
together, while "Accuracy/train" and "Accuracy/test" will be grouped separately
|
|
in the TensorBoard interface.
|
|
|
|
.. code:: python
|
|
|
|
|
|
from torch.utils.tensorboard import SummaryWriter
|
|
import numpy as np
|
|
|
|
writer = SummaryWriter()
|
|
|
|
for n_iter in range(100):
|
|
writer.add_scalar('Loss/train', np.random.random(), n_iter)
|
|
writer.add_scalar('Loss/test', np.random.random(), n_iter)
|
|
writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
|
|
writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
|
|
|
|
|
|
Expected result:
|
|
|
|
.. image:: _static/img/tensorboard/hier_tags.png
|
|
:scale: 75 %
|
|
|
|
|
|
|
|
|
|
|
|
.. currentmodule:: torch.utils.tensorboard.writer
|
|
|
|
.. autoclass:: SummaryWriter
|
|
|
|
.. automethod:: __init__
|
|
.. automethod:: add_scalar
|
|
.. automethod:: add_scalars
|
|
.. automethod:: add_histogram
|
|
.. automethod:: add_histogram_raw
|
|
.. automethod:: add_image
|
|
.. automethod:: add_images
|
|
.. automethod:: add_figure
|
|
.. automethod:: add_video
|
|
.. automethod:: add_audio
|
|
.. automethod:: add_text
|
|
.. automethod:: add_graph
|
|
.. automethod:: add_embedding
|
|
.. automethod:: add_pr_curve
|
|
.. automethod:: add_custom_scalars
|