黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述详解Tensorboard及使用教程相关的知识,希望能为你提供帮助。
@TOC
一、什么是TensorboardTensorboard原本是Google TensorFlow的可视化工具,可以用于记录训练数据、评估数据、网络结构、图像等,并且可以在web上展示,对于观察神经网络的过程非常有帮助。PyTorch也推出了自己的可视化工具,一个是tensorboardX包,一个是torch.utils.tensorboard,二者的使用相差不大,这里介绍后者
二、配置Tensorboard
环境要求
- 操作系统:Windows
- python3
- PyTorch >
= 1.0.0 &
&
torchvision >
= 0.2.1 &
&
tensorboard >
= 1.12.0 1
安装
注: 虽说PyTorch中直接有tensorboard的包,但是有时用的时候还是会报错,所以安装TensorFlow之后torch.utils.tensorboard就可以直接使用且稳定,所以这里介绍安装TensorFlow的方法。
- pip环境(相对麻烦需要下载依赖项)
使用各种add方法记录数据 单条曲线(scalar)
参数:
- tag ( string ) – 数据标识符
- scalar_value ( float或string/blobname ) – 要保存的值
- global_step ( int ) – 要记录的全局步长值
- walltime ( float ) – 记录训练的时间,默认 walltime (time.time()) 秒
- new_style ( boolean ) – 是使用新样式(张量字段)还是旧样式(simple_value 字段)。新样式可能会导致更快的数据加载。
例子:from torch.utils.tensorboard import SummaryWriter import numpy as np
for x in range(1, 101) :
writer.add_scalar(y = 2x, x, 2 * x)
writer.close()
效果
![在这里插入图片描述](https://s4.51cto.com/images/blog/202203/01082851_621d68c37105432333.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 多条曲线(scalars)
>
add_scalars( main_tag , tag_scalar_dict , global_step = None , walltime = None)**参数** - main_tag ( string ) – 标签的父名称
- tag_scalar_dict ( dict ) – 存储标签和对应值的键值对
- global_step ( int ) – 要记录的全局步长值
- walltime ( float ) – 记录训练的时间,默认 walltime (time.time()) 秒
例子:```python
from torch.utils.tensorboard import SummaryWriter
import numpy as npwriter = SummaryWriter()
r = 5
for x in range(1, 101) :
writer.add_scalars(run_14h, xsinx : x * np.sin(x / r),
xcosx : x * np.cos(x / r),
xtanx : x * np.tan(x / r), x)
writer.close()
效果:
文章图片
直方图(histogram)
参数:
- tag ( string ) – 数据标识符
- 值(torch.Tensor、numpy.array或string/blobname)– 构建直方图的值
- global_step ( int ) – 要记录的全局步长值
- bins ( string ) – tensorflow,auto, fd, ... 之一。这决定了柱的制作方式。
- walltime ( float ) – 记录训练的时间,默认 walltime (time.time()) 秒
例子:from torch.utils.tensorboard import SummaryWriter import numpy as np
for step in range(10) :
x = np.random.randn(1000)
writer.add_histogram(distribution of gaussion, x, step)
writer.close()
效果:
![在这里插入图片描述](https://s4.51cto.com/images/blog/202203/01082853_621d68c50444f18450.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 图片(image)
>
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats = CHW)**参数:**
- tag ( string ) – 数据标识符
- img_tensor ( torch.Tensor , numpy.array , or string/blobname ) – 图像数据
- global_step ( int ) – 要记录的全局步长值
- walltime ( float ) – 记录训练的时间,默认 walltime (time.time()) 秒
例子:
```python
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import cv2 as cv
import torchimg = cv.imread(zhou.jpg, cv.IMREAD_COLOR)#输入图像要是3通道的,所以读取彩色图像
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img = torch.tensor(img.transpose(2, 0, 1))#cv读取为numpy图像为(H * W * C),所以要进行轴转换
writer.add_image(zhou_ge, img, 0)writer.close()
效果:
文章图片
渲染(figure)
参数:
- tag ( string ) – 数据标识符
- image( matplotlib.pyplot.figure ) – 图或图列表
- global_step ( int ) – 要记录的全局步长值
- close ( bool ) – 自动关闭图形的标志
- walltime ( float ) – 记录训练的时间,默认 walltime (time.time()) 秒
例子:
from torch.utils.tensorboard import SummaryWriter import numpy as np import matplotlib.pyplot as plt %matplotlib
x = np.linspace(0, 10, 1000)
y = np.sin(x)
figure1 = plt.figure()
plt.plot(x, y, r-)
writer.add_figure(my_figure, figure1, 0)
writer.close()
效果:
![在这里插入图片描述](https://s4.51cto.com/images/blog/202203/01082851_621d68c3a1cbb98811.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 网络(graph)
>
add_graph(model, input_to_model=None, verbose=False, use_strict_trace = True)**参数:** - model( torch.nn.Module ) – 要绘制的模型。
- input_to_model ( torch.Tensor or list of torch.Tensor ) – 要输入的变量或变量元组
- verbose(bool)– 是否在控制台中打印图形结构。
- use_strict_trace ( bool ) – 是否将关键字参数严格传递给 torch.jit.trace。当您希望跟踪器记录您的可变容器类型(列表、字典)时传递 False.例子:
```python
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import torch
import torch.nn as nnwriter = SummaryWriter()
class MLP(nn.Module) :
def __init__(self):
super(MLP, self).__init__()
self.Net = nn.Sequential(
nn.Linear(784, 512),
nn.ReLU(),nn.Linear(512, 128),
nn.ReLU(),nn.Linear(128, 10)
)
def forward(self, input):
input = input.view(-1, 28 * 28)
return self.Net(input)
model = MLP()
input = torch.FloatTensor(np.random.rand(32, 1, 28, 28))
writer.add_graph(model, input)writer.close()
效果:
文章图片
文章图片
其他
嵌入:
参数:
- mat ( torch.Tensor or numpy.array ) – 一个矩阵,每一行都是数据点的特征向量
- metadata ( list ) – 标签列表,每个元素都将转换为字符串
- label_img ( torch.Tensor ) – 图像对应每个数据点
- global_step ( int ) – 要记录的全局步长值
- tag ( string ) – 嵌入的名称
推荐阅读
- Prometheus+Grafana监控系统配合Cadvisor监控Docker容器 #yyds干货盘点#
- #yyds干货盘点#MySQL学习-为啥有时候事务的隔离没有生效
- Android技术分享| Android 自定义View多人视频通话控件
- vivo全球商城全球化演进之路——多语言解决方案
- HarmonyOS-基于canvas绘制复古钟表
- #yyds干货盘点# 基于STM32+ESP8266+华为云设计的智能家居控制系统
- #yyds干货盘点# 超全面Git知识总结!
- XtraBackup实现MySQL数据库全量+增量+Binlog恢复库
- MyCAT实现MySQL数据库读写分离