1.安装 TensorboardX
pip install tensorboardX==1.8
后面的==1.8 是版本号。
tensorboardX运行时常会报一些奇奇怪怪的错误,如AttributeError: 'torch._C.Value' object has no attribute 'debugName'。这通常是版本号的问题。多试几个版本就可以了。
2.数字 (scalar)
使用 add_scalar 方法来记录数字常量。
add_scalar(tag, scalar_value, global_step=None, walltime=None)
参数
- tag (string): 数据名称,不同名称的数据使用不同曲线展示
- scalar_value (float): 数字常量值
- global_step (int, optional): 训练的 step
- walltime (float, optional): 记录发生的时间,默认为 time.time()
需要注意,这里的 scalar_value 一定是 float 类型,如果是 PyTorch scalar tensor,则需要调用 .item() 方法获取其数值。我们一般会使用 add_scalar 方法来记录训练过程的 loss、accuracy、learning rate 等数值的变化,直观地监控训练过程。
3.直方图 (histogram)
使用 add_histogram 方法来记录一组数据的直方图。
add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)
参数
- tag (string): 数据名称
- values (torch.Tensor, numpy.array, or string/blobname): 用来构建直方图的数据
- global_step (int, optional): 训练的 step
- bins (string, optional): 取值有 ‘tensorflow’、‘auto’、‘fd’ 等, 该参数决定了分桶的方式,详见这里。
- walltime (float, optional): 记录发生的时间,默认为 time.time()
- max_bins (int, optional): 最大分桶数
我们可以通过观察数据、训练参数、特征的直方图,了解到它们大致的分布情况,辅助神经网络的训练过程。
4.运行图 (graph)
使用 add_graph 方法来可视化一个神经网络。
add_graph(model, input_to_model=None, verbose=False, **kwargs)
参数
- model (torch.nn.Module): 待可视化的网络模型
- input_to_model (torch.Tensor or list of torch.Tensor, optional): 待输入神经网络的变量或一组变量
该方法可以可视化神经网络模型,TensorboardX 给出了一个官方样例大家可以尝试。
5.测试例程
import torch
import torch.nn as nn
from tensorboardX import SummaryWriter
class LeNet(nn.Module):
def __init__(self):
super(LeNet, self).__init__()
self.conv1 = nn.Sequential( # input_size=(1*28*28)
nn.Conv2d(1, 6, 5, 1, 2),
nn.ReLU(), # (6*28*28)
nn.MaxPool2d(kernel_size=2, stride=2), # output_size=(6*14*14)
)
self.conv2 = nn.Sequential(
nn.Conv2d(6, 16, 5),
nn.ReLU(), # (16*10*10)
nn.MaxPool2d(2, 2) # output_size=(16*5*5)
)
self.fc1 = nn.Sequential(
nn.Linear(16 * 5 * 5, 120),
nn.ReLU()
)
self.fc2 = nn.Sequential(
nn.Linear(120, 84),
nn.ReLU()
)
self.fc3 = nn.Linear(84, 10)
# 定义前向传播过程,输入为x
def forward(self, x):
x = self.conv1(x)
x = self.conv2(x)
# nn.Linear()的输入输出都是维度为一的值,所以要把多维度的tensor展平成一维
x = x.view(x.size()[0], -1)
x = self.fc1(x)
x = self.fc2(x)
x = self.fc3(x)
return x
dummy_input = torch.rand(13, 1, 28, 28) # 假设输入13张1*28*28的图片
model = LeNet()
with SummaryWriter('runs/graph') as w:
w.add_graph(model, dummy_input)
writer = SummaryWriter('policy_save/runs/scalar_example')
for i in range(100):
writer.add_scalar('quadratic', i * 2, global_step=i)
writer.add_scalar('exponential', 1.2 * i, global_step=i)
writer = SummaryWriter('policy_save/runs/another_scalar_example')
for i in range(100):
writer.add_scalar('quadratic', i**2, global_step=i)
writer.add_scalar('exponential', 1.2**i, global_step=i)
运行, 可以看到在项目文件中生成了runs文件夹。在终端输入,即可查看相应图表。
tensorboard --logdir=path/runs/
————————————————
参考:https://blog.csdn.net/bigbennyguo/article/details/87956434