使用环境:win10 ,在jupyter notebook下运行 谷歌浏览器
1、环境安装
使用conda 安装,打开anacond powershell,输入pip install tensorboard ,然后安装pip install tensorflow
2、使用操作
在终端或者环境命令行下,打开程序所在目录,使用shift+右键进入cmd,输入jupyter notebook,进入环境,打开程序。
(1)在程序开头加入
from torch.utils.tensorboard import SummaryWriter,而不是from tensorboardX import SummaryWriter,参考https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html
(2)writer = SummaryWriter('runs/exp1'),runs/exp1表示相关信息存储位置,可自行定义。然后调用相关函数即可。例如想知道训练次数epoch与损失函数之间的关系,调用writer.add_scalar('Train Loss', train_loss / len(train_data), global_step=epoch) 。然后运行一次函数,等待程序运行完毕。
(3)打开runs文件夹的上一级目录,然后使用shift+右键进入cmd,输入tensorboard --logdir=runs ,随后弹出如下
复制网址,然后打开(据说只能使用谷歌浏览器,未经验证)。有可能出现如下提示,打开exp1文件夹,如果文件大小为0,则表示数据未成功写入,重新运行程序即可。或者重新操作第三步
如果进入如下类似页面,则表示成功
指令集补充
(1)add_scalar(tag, scalar_value, global_step=None, walltime=None)
功能:
在一个图表中记录一个标量的变化,常用于 Loss 和 Accuracy 曲线的记录。
参数:tag(string)- 该图的标签,类似于 polt.title。
scalar_value(float or string/blobname)- 用于存储的值,曲线图的 y 坐标
global_step(int)- 曲线图的 x 坐标
walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()
(2)add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
功能:
在一个图表中记录多个标量的变化,常用于对比,如 trainLoss 和 validLoss 的比较
等。
参数:
main_tag(string)- 该图的标签。
tag_scalar_dict(dict)- key 是变量的 tag, value 是变量的值。
global_step(int)- 曲线图的 x 坐标
walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()
writer.add_scalars('result', {'Train Loss':train_loss / len(train_data),'Train Acc':train_acc / len(train_data),'Valid Loss':valid_loss / len(valid_data),'Valid Acc':valid_acc / len(valid_data)}, global_step=epoch)
类似上面代码,其中result表示标题,train Loss等表示每条线名字,epoch表示x轴
(3)add_histogram(tag,values,global_step=None,bins='tensorflow',walltime=None)
功能:
绘制直方图和多分位数折线图,常用于监测权值及梯度的分布变化情况,便于诊断网
络更新方向是否正确。
参数:
tag(string)- 该图的标签,类似于 polt.title。
values(torch.Tensor, numpy.array or string/blobname)- 用于绘制直方图的值
global_step(int)- 曲线图的 y 坐标
bins(string)- 决定如何取 bins,默认为‘tensorflow’ ,可选: ’auto’, ‘fd’ 等
walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()
(4)add_image(tag,img_tensor,global_step=None,walltime=None)
功能:
绘制图片,可用于检查模型的输入,监测 feature map 的变化,或是观察 weight。
参数:
tag(string)- 该图的标签,类似于 polt.title。
img_tensor(torch.Tensor,numpy.array, or string/blobname)- 需要可视化的图片数
据, shape = [C,H,W]。
global_step(int)- x 坐标。
walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()。
通常会借助 torchvision.utils.make_grid() 将一组图片绘制到一个窗口
(5)torchvision.utils.make_grid(tensor,nrow=8,padding=2,normalize=False,ra
nge=None,scale_each=False,pad_value=0)
功能:
将一组图片拼接成一张图片,便于可视化。
参数:
tensor(Tensor or list)- 需可视化的数据, shape:(B x C x H x W) ,B 表示 batch 数,即
几张图片
nrow(int)- 一行显示几张图,默认值为 8。
padding(int)- 每张图片之间的间隔,默认值为 2。
normalize(bool)- 是否进行归一化至(0,1)。
range(tuple)- 设置归一化的 min 和 max,若不设置,默认从 tensor 中找 min 和 max。
scale_each(bool)- 每张图片是否单独进行归一化,还是 min 和 max 的一个选择。
pad_value(float)- 填充部分的像素值,默认为 0,即黑色。
(6)add_graph(model,input_to_model=None,verbose=False,**kwargs)
功能:
绘制网络结构拓扑图。
参数:
model(torch.nn.Module)- 模型实例
inpjt_to_model(torch.autograd.Variable)- 模型的输入数据,可以生成一个随机数,只
要 shape 符合要求即可
运行以下代码:
import torchfromtorch import nn
import numpyasnpfromtorch.autograd import Variablefromtorchvision.datasets import CIFAR10fromdatetime import datetime
import osfromtorch.utils.tensorboard import SummaryWriter
import torchvision.modelsasmodels
import tensorflowastf
#定义网络架构classAlexNet(nn.Module):
def __init__(self):
super().__init__()
# 第一层是 5x5 的卷积, 输入的 channels 是3,输出的 channels 是 64, 步长是 1, 没有 padding
self.conv1=nn.Sequential(
nn.Conv2d(3, 64, 5),
nn.ReLU(True))
# 第二层是 3x3 的池化, 步长是2, 没有 padding
self.max_pool1= nn.MaxPool2d(3,2)
# 第三层是 5x5 的卷积, 输入的 channels 是64,输出的 channels 是 64, 步长是 1, 没有 padding
self.conv2=nn.Sequential(
nn.Conv2d(64, 64, 5, 1),
nn.ReLU(True))
# 第四层是 3x3 的池化,步长是2,没有 padding
self.max_pool2= nn.MaxPool2d(3, 2)
# 第五层是全连接层,输入是1204,输出是 384self.fc1=nn.Sequential(
nn.Linear(1024, 384),
nn.ReLU(True))
# 第六层是全连接层,输入是384,输出是 192self.fc2=nn.Sequential(
nn.Linear(384, 192),
nn.ReLU(True))
# 第七层是全连接层,输入是192,输出是 10self.fc3= nn.Linear(192, 10)
def forward(self, x):
x=self.conv1(x)
x=self.max_pool1(x)
x=self.conv2(x)
x=self.max_pool2(x)
# 将矩阵拉平
x= x.view(x.shape[0], -1)
x=self.fc1(x)
x=self.fc2(x)
x=self.fc3(x)returnx
alexnet=AlexNet()
writer= SummaryWriter('runs/exp1')
dummy_input= Variable(torch.zeros(1, 3, 32, 32))
with writer:
writer.add_graph(alexnet,dummy_input)
可在 GRAPHS 中看到 Resnet18 的网络拓扑
双击AlexNet
(7)add_embedding(mat,metadata=None,label_img=None,global_step=None,tag='de
fault',metadata_header=None)
功能:
在三维空间或二维空间展示数据分布,可选 T-SNE、 PCA 和 CUSTOM 方法。
参数
mat(torch.Tensor or numpy.array)- 需要绘制的数据,一个样本必须是一个向量形式。
shape = (N,D), N 是样本数, D 是特征维数。
metadata(list)- 数据的标签,是一个 list,长度为 N。
label_img(torch.Tensor)- 空间中展示的图片, shape = (N,C,H,W)。
global_step(int)- Global step value to record,不理解这里有何用处呢?知道的朋友补
充一下吧。
tag(string)- 标签
(8)add_text(tag,text_string,global_step=None,walltime=None)
功能: 记录文字(9)add_video(tag,vid_tensor,global_step=None,fps=4,walltime=None)
功能: 记录 video(10)add_figure(tag,figure,global_step=None,close=True,walltime=None)
功能: 添加 matplotlib 图片到图像中
(11)add_image_with_boxes(tag,img_tensor,box_tensor,global_step=None,walltime
=None,**kwargs)
功能: 图像中绘制 Box,目标检测中会用到
(12)add_pr_curve(tag,labels,predictions,global_step=None,num_thresholds=127,w
eights=None,walltime=None)
功能: 绘制 PR 曲线
(13)add_pr_curve_raw(tag,true_positive_counts,false_positive_counts,true_negati
ve_counts,false_negative_counts,precision,recall,global_step=None,num_thres
holds=127,weights=None,walltime=None)
功能: 从原始数据上绘制 PR 曲线
(14)export_scalars_to_json(path)
功能: 将 scalars 信息保存到 json 文件,便于后期使用
注意:没有验证或者验证有问题参考官方链接