参考链接1安装:
参考链接2使用:
TensorBoard:TensorFlow中强大的可视化工具;
支持标量、图像、文本、音频、视频和Embedding等多种数据可视化;
import numpy as np
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter(comment='test_tensorboard') # 用于记录要可视化的数据
for x in range(100):
writer.add_scalar('y=2x', x * 2, x) # 'y=2x'是标量的名称, x*2是曲线的y轴,x是曲线的x轴
writer.add_scalar('y=pow(2, x)', 2 ** x, x)
writer.add_scalars('data/scalar_group', {"xsinx": x * np.sin(x),
"xcosx": x * np.cos(x),
"arctanx": np.arctan(x)}, x)
writer.close()
2)在terminal输入 命令 :
tensorboard --logdir=./runs
得到类似以下输出:
TensorBoard 2.1.1 at http://localhost:6006/ (Press CTRL+C to quit)
打开对应网站即可看到可视化界面
runs/日期时间
” 路径保存日志runs/日期时间-comment
” 路径保存日志使用过程:
对于每次实验建立一个路径不同的summaryWriter,也叫一个run
接下来,调用summaryWriter中的不同实例中的add_something
方法向日志中写入文件
如果想要可视化这些数据,在命令行中开启tensorboard即可:tensorboard --logdir=
其中,
可以是单个run的路径,也可以是父目录,底下含有多个子文件夹,可以在可视化界面横向的比较runs/
下面的不同次实验得到的数据的差异。
使用add_scalar
方法记录数字常量,如训练过程中的loss,accuracy、learning_rate等,监控训练过程
add_scalar(tag, scalar_value, global_step=None, walltime=None)
参数
在’runs/scalar_example‘和‘runs/another_scalar_example’两个不同目录中记录名称相同但是参数不同的两个二次函数和指数函数数据,效果如下图。
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/scalar_example') # 写入的目录
for i in range(10):
writer.add_scalar('quadratic',i**2,global_step=i)
writer.add_scalar('exponential',2**i,global_step=i)
writer = SummaryWriter('runs/another_scalar_example') # 在另一个路径中写
for i in range(10):
writer.add_scalar('quadratic',i**3,global_step=i)
writer.add_scalar('exponential',3**i,global_step=i)
执行命令 tensorboard --logdir=./policy_save/runs/
后打开网页 【定位到公共在一起的目录】
可以看到,两个名称相同的数据被放在同一张图中,便于对比观察。可以在左侧runs
栏选择要查看哪些变量
使用add_histogram
方法记录一组数据的直方图
**add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)**
参数:
import numpy as np
writer = SummaryWriter('runs/embedding_example')
writer.add_histogram('normal_centered',np.random.normal(0,1,1000),global_step=1)
writer.add_histogram('normal_centered',np.random.normal(0,2,1000),global_step=50)
writer.add_histogram('normal_centered',np.random.normal(0,3,1000),global_step=100)
结果图:
可以看到有"DISTRIBUTIONS"和"HISTOGRAMS"两栏,它们都是用来观察数据分布的。其中在"HISTOGRAMS"中,同一数据不同 step 时候的直方图可以上下错位排布 (OFFSET) 也可重叠排布 (OVERLAY)。
使用add_graph
方法来可视化一个神经网络
**add_graph(model, input_to_model=None, verbose=False, **kwargs)**
参数:
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)
终端输入命令:tensorboard --logdir=./runs/graph
点击网页查看可视化界面