PyTorch可视化利器Visdom

1.介绍

  在深度学习领域,模型训练是一个必须的过程,因此常常需要实时监听并可视化一些数据,如损失值Loss,正确率Acc等。在Tensorflow中,最常使用的工具非Tensorboard莫属;在Pytorch中,也有类似的TensorboardX,但据说其在张量数据加载的效率方面不如visdom。visdom是FaceBook开发的一款可视化工具github地址,其实质是一款在网页端的web服务器,对Pytorch的支持较好, 可以直接对Tensor进行操作。

在这里插入图片描述

2.安装与启动

2.1 安装

pip install visdom

在这里插入图片描述

2.2 启动

与TensorFlow的TensorBoard一样,如果要使用Visdom,就要先在终端开启监听命令

python -m visdom.server

Visdom成功启动后,会返回一个网址,根据显示的网址然后在浏览器里输入:http://localhost:8097 进行登录在这里插入图片描述
打开网址便可以看到

在这里插入图片描述

如果你想修改端口号

 visdom -port XXXX #改成你想要的端口号

3.相关概念

3.1 窗口

在这里插入图片描述用户界面以空白的形式开始 - 您可以用图表,图像和文本填充它。出现在窗口中的内容,您可以拖放,调整大小和销毁。窗口存在于envs中并且envs的状态通过sessions存储。你可以下载窗口中的内容 - 包括SVG中的图。

3.2 回调

python Visdom支持实现窗口上的回调。Demo以可编辑文本板的形式显示。这些回调函数允许Visdom对象接收并响应前端发生的事件。

您可以通过向事件处理程序代码添加一个函数来为事件订阅窗口,该函数用于通过调用viz.register_event_handler(handler, win_id)处理程序和窗口标识调用要订阅的窗口标识。多个处理程序可以注册到同一个窗口。您可以使用viz.clear_event_handlers(win_id)删除窗口中的所有事件处理程序。当在窗口发生一个事件时,你的回调将在包含以下内容的字典上被调用:

event_type:以下事件类型之一
pane_data:该窗口的所有存储内容包括布局和内容。
eid:当前的环境ID
target:调用事件的窗口ID
其他参数定义如下。

现在支持两个回调事件:

Close - 关闭窗口时触发。返回只有前述字段的字典。
KeyPress - 按下某个键时触发。包含其他参数:
key - 按下的键的字符串表示形式(应用SHIFT等状态修饰符)
key_code - 按下键的javascript事件键码(无修饰符)

4.可视化实战

4.1 加载相关库

from visdom import Visdom
import numpy as np
import time

4.2 可视化步骤

Visdom可视化神经网络的训练过程大致分为3步:

  1. 实例化一个窗口
  2. 初始化窗口的信息
  3. 更新监听的信息

4.3 可视化单一数据

只可视化train_loss的变化

# 实例化一个窗口
wind = Visdom()
# 初始化窗口信息
wind.line([0.], # Y的第一个点的坐标
		  [0.], # X的第一个点的坐标
		  win = 'train_loss', # 窗口的名称
		  opts = dict(title = 'train_loss') # 图像的标例
)
# 更新数据
for step in range(10):
	# 随机获取loss,这里只是模拟实现
	loss = np.random.randn() * 0.5 + 2
	wind.line([loss],[step],win = 'train_loss',update = 'append')
	time.sleep(0.5)

结果
在这里插入图片描述

4.4 可视化多类数据

可视化train_loss和acc

# 实例化窗口
wind = Visdom()
# 初始化窗口参数
wind.line([{0.,0.]],[0.],win = 'train',opts = dict(title = 'loss&acc',legend = ['loss','acc']))
# 更新窗口数据
for step in range(10):
	loss = 0.2 * np.random.randn() + 1
	acc = 0.1 * np.random.randn() + 0.5
	wind.line([[loss, acc]],[step],win = 'train',update = 'append')
	time.sleep(0.5)

在这里插入图片描述

4.5 可视化图像

viz = Visdom()
# data是一个tensor,直接在x这个标识的窗口中显示出来
viz.images(data.view(-1,1,28,28),win = 'x')
# str(pred.detach().cpu().numpy())直接将数据转换成字符串打印出来,表示为pred,并且赋予了title = 'pred'可见名字
viz.text(str(pred.detach().cpu().numpy()),win = 'pred',opts = dict(title = 'pred'))

在这里插入图片描述

5. Visdom API

Visdom支持下列API。由Plotly提供可视化支持。

vis.scatter : 2D 或 3D 散点图
vis.line : 线图
vis.stem : 茎叶图
vis.heatmap : 热力图
vis.bar : 条形图
vis.histogram: 直方图
vis.boxplot : 箱型图
vis.surf : 表面图
vis.contour : 轮廓图
vis.quiver : 绘出二维矢量场
vis.image : 图片
vis.text : 文本
vis.mesh : 网格图
vis.save : 序列化状态
vis.close :通过ID关闭一个窗口
vis.win_exists :通过id检查一个窗口是否已经存在
vis.check_connection:检查服务器是否连接
关于上述API更详尽的解释将在下面给出。

vis.image

这个函数绘制一个img。它将 包含图像的CxHxW张量作为输入img。

以下opts是支持的:

opts.jpgquality:JPG质量(number0-100;默认= 100)
opts.caption:图像的标题
vis.images:这个函数绘制一个列表images。它需要一个输入B x C x H x W张量或list of images全部相同的大小。它使大小的图像(B / Nrow,Nrow)的网格。

以下参数和opts支持:

nrow:连续的图像数量
padding:在图像周围填充,四边均匀填充
opts.jpgquality:JPG质量(number0-100;默认= 100)
opts.caption:图像的标题

vis.text

这个功能在一个盒子里打印文本。你可以使用它来嵌入任意的HTML。它需要输入一个text字符串。opts目前没有具体的支持。

vis.video

此功能播放视频。它输入视频的文件名videofile或一个LxCxHxW尺度的tensor(在Lua)或或LxHxWxC尺度的tensor包含视频作为输入的所有帧(在Python)。该功能不支持任何情节特定opts。

以下opts是支持的:

opts.fps:视频的FPS(integer>0;默认= 25)
注意:使用tensor输入需要安装并运行ffmpeg。您播放视频的能力可能取决于您使用的浏览器:您的浏览器必须支持OGG容器中的Theano编解码器(Chrome支持此功能)。

vis.svg

这个函数绘制一个SVG对象。它将SVG字符串svgstr或SVG文件的名称作为输入svgfile。该功能不支持任何特定的 opts。

vis.save

这个功能保存envs在visdom服务器上的活动。它需要输入一个列表(在Python中)或表(在lua中)env id被保存。

vis.scatter

此功能绘制2D或3D散点图。它需要输入一个Nx2或 一个Nx3张量X来指定N散点图中点的位置。一个可选的N张量,Y其中包含离散的标签,范围介于1和K可以指定 - 标签将反映在标记的颜色。以下opts是支持的:

opts.colormap :colormap(string; default = ‘Viridis’)
opts.markersymbol:标志符号(string;默认= ‘dot’)
opts.markersize :标记大小(number;默认= ‘10’)
opts.markercolor:每个标记的颜色。(torch.*Tensor; default = nil)
opts.legend :table包含图例名称
opts.markercolor:是一个整数值的张量。张量可以是大小N或N x 3或K或K x 3。

尺寸张量N:每个数据点的单一强度值。0 =黑色,255 =红色
尺寸张量N x 3:每个数据点的红色,绿色和蓝色强度。0,0,0 =黑色,255,255,255 =白色
尺寸K和张量K x 3:与每个数据点具有唯一的颜色不同,对于特定标签的所有点共享相同的颜色。

vis.line

这个函数绘制一个线条图。它需要输入一个N或NxM张量 Y来指定要绘制的M线(连接N点)的值。它还采用可选的X张量来指定相应的x轴值; X可以是一个N张量(在这种情况下,所有的线将共享相同的x轴值)或具有相同的大小Y。

以下opts是支持的:

opts.fillarea :填充行(boolean)以下的区域
opts.colormap :colormap(string; default = ‘Viridis’)
opts.markers :show markers(boolean; default = false)
opts.markersymbol:标志符号(string;默认= ‘dot’)
opts.markersize :标记大小(number;默认= ‘10’)
opts.legend :table包含图例名称

vis.updateTrace

此功能允许更新现存的线或散点图的数据。

用户可以指定name一个现有的轨迹,如果他们想要添加到它的话,还可以指定一个新name的轨迹。默认情况下,如果在首次创建时没有指定图例,那么图例name中的行的索引是。

如果没有name指定,所有的痕迹应该被更新。跟踪更新数据全部NaN被忽略; 这可以用于掩蔽更新。

该append参数确定更新数据是否应附加到或替换现有数据。

没有,opts因为他们被假定为从指定的情节继承。

vis.stem

这个函数绘制一个干图。它需要输入一个N或NxM张量 X来指定时间序列中的N点的值M。包含时间戳的可选N或NxM张量Y也可以被指定; 如果Y是N张量,则M假定所有时间序列具有相同的时间戳。

以下opts是支持的:

opts.colormap:colormap(string; default = ‘Viridis’)
opts.legend :table包含图例名称

vis.heatmap

这个函数绘制一个热图。它需要输入NxM张量X来指定热图中每个位置的值。

以下opts是支持的:

opts.colormap :colormap(string; default = ‘Viridis’)
opts.xmin :剪辑最小值(number;默认= X:min())
opts.xmax :剪辑最大值(number;默认= X:max())
opts.columnnames:table包含x轴标签
opts.rownames :table包含y轴标签

vis.bar

这个函数绘制一个规则的,堆积的或分组的条形图。它需要输入一个N或NxM张量X来指定每个条的高度。如果X包含M列,则对应于每行的值将被堆叠或分组(取决于如何opts.stacked设置)。除此之外X,还可以指定一个(可选的)N张量Y,其中包含相应的x轴值。

opts目前支持以下特定于图表的功能:

opts.rownames:table包含x轴标签
opts.stacked :堆栈中的多个列 X
opts.legend :table包含图例标签

vis.histogram

该功能绘制指定数据的直方图。它需要输入一个N张量X来指定构建直方图的数据。

opts目前支持以下特定于图表的功能:

opts.numbins:垃圾箱数量(number;默认= 30)

vis.boxplot

此函数绘制指定数据的箱形图。它需要输入一个N或一个NxM张量X来指定N构造M箱形图的数据值。

opts目前支持以下特定于图表的功能:

opts.legend:中的每一列的标签 X

vis.surf

这个函数绘制一个曲面图。它需要输入NxM张量X 来指定曲面图中每个位置的值。

以下opts是支持的:

opts.colormap:colormap(string; default = ‘Viridis’)
opts.xmin :剪辑最小值(number;默认= X:min())
opts.xmax :剪辑最大值(number;默认= X:max())

vis.contour

这个函数绘制一个等高线图。它需要输入一个NxM张量X 来指定轮廓图中每个位置的值。

以下opts是支持的:

opts.colormap:colormap(string; default = ‘Viridis’)
opts.xmin :剪辑最小值(number;默认= X:min())
opts.xmax :剪辑最大值(number;默认= X:max())

vis.quiver

此函数绘制,其中的箭头的方向和长度由所确定的颤动情节NxM张量X和Y。两个可选的NxM 张量gridX,gridY可以提供指定箭头的偏移量; 默认情况下,箭头将在常规网格上完成。

以下opts是支持的:

opts.normalize:最长箭头的长度(number)
opts.arrowheads:显示箭头(boolean;默认= true)

vis.mesh

此函数从一个Nx2或一个Nx3矩阵中定义的一组顶点绘制一个网格图 X,以及在一个可选Mx2或 Mx3矩阵中定义的多边形Y。

以下opts是支持的:

opts.color:color(string)
opts.opacity:多边形不透明度(number介于0和1之间)

通用opts

绘图功能采用可选opts表格作为输入,可用于更改绘图属性(通用或特定于绘图)的属性。所有输入参数都在一个表中指定; 输入参数是基于它们在输入表中具有的键的匹配。

以下opts是通用的,它们对于所有可视化(除了plot.image和plot.text)是相同的:

opts.title :图标题
opts.width :图宽度
opts.height :身高
opts.showlegend :显示图例(true或false)
opts.xtype :x轴的类型(‘linear’或’log’)
opts.xlabel :x轴的标签
opts.xtick :在x轴上显示刻度(boolean)
opts.xtickmin :先在x轴上打勾(number)
opts.xtickmax :在x轴上的最后一个勾号(number)
opts.xtickvals :在x轴(蜱位置table的number多个)
opts.xticklabels:蜱上x轴(标签table的string多个)
opts.xtickstep :x轴上的滴答声之间的距离(number)
opts.ytype :y轴的类型(‘linear’或’log’)
opts.ylabel :y轴的标签
opts.ytick :在y轴上显示刻度(boolean)
opts.ytickmin :首先在y轴上打勾(number)
opts.ytickmax :最后在y轴上打勾(number)
opts.ytickvals :在y轴的刻度位置(table的number多个)
opts.yticklabels:蜱上y轴标签(table的string多个)
opts.ytickstep :Y轴上的刻度之间的距离(number)
opts.marginleft :左边距(以像素为单位)
opts.marginright :右边距(以像素为单位)
opts.margintop :顶部边距(以像素为单位)
opts.marginbottom:底部边距(以像素为单位)

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch中,可以使用不同的方法来可模型和训练过程。引用\[1\]中的代码展示了如何查看卷积层的参数,并将其可。首先,通过导入所需的库和模型,可以初始一个预训练的模型,如vgg11。然后,可以使用字典的形式获取模型中的任意一层,如conv1。通过将该层的参数单独提取出来,并保持其不发生变,可以获取卷积核的参数。最后,可以使用循环将该卷积层的所有卷积核绘制出来。 另外,引用\[2\]和\[3\]中的代码展示了如何在训练过程中添加想要可的内容。首先,可以设置优器和损失函数。然后,在每个epoch和每个batch中,可以计算损失并进行反向传播和优。在每个print_step个batch之后,可以记录训练集损失值、测试集准确率和训练数据的可图像。此外,还可以使用直方图可网络参数的分布情况。 总结起来,PyTorch提供了丰富的可工具和方法,可以帮助我们更好地理解模型和训练过程。 #### 引用[.reference_title] - *1* [pytorch](https://blog.csdn.net/weixin_45456178/article/details/127452897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [PyTorch【8】PyTorch工具](https://blog.csdn.net/m0_63462829/article/details/127153454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AiCharm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值