PyTorch下的可视化工具( 四 )


# 绘制2D和3D散点图 # 参数Y用来指定点的分布,win指定图像的窗口名称,env指定图像所在的环境,opts通过字典来指定一些样式 vis.scatter(iris_x[ : , 0 : 2], Y=iris_y+1, win="windows1", env="main") vis.scatter(iris_x[ : , 0 : 3], Y=iris_y+1, win="3D scatter", env="main", opts={ "markersize" : 4, # 点的大小 "xlabel" : "特征1", "ylabel" : "特征2" })
绘制茎叶图:
# 添加茎叶图 x = torch.linspace(-6, 6, 100).view([-1, 1]) y1 = torch.sin(x) y2 = torch.cos(x) # 连接张量 plot_x = torch.cat([x, x], dim=1) plot_y = torch.cat([y1, y2], dim=1) # 绘制茎叶图 vis.stem(X=plot_x, Y=plot_y, win="stem plot", env="main", opts={ "legend" : ["sin", "cos"], "title" : "茎叶图" })
绘制热力图:
# 计算鸢尾花数据集特征向量的相关系数矩阵 iris_corr = torch.from_numpy(np.corrcoef(iris_x, rowvar=False)) # 绘制热力图 vis.heatmap(iris_corr, win="heatmap", env="main", opts={ "rownames" : ["x1", "x2", "x3", "x4"], "columnnames" : ["x1", "x2", "x3", "x4"], "title" : "热力图" })
可视化图片,这里我们使用自定义的env名MyPlotEnv
# 可视化图片 img_Image = Image.open("./example.jpg") img_array = np.array(img_Image.convert("L"), dtype=np.float32) img_tensor = torch.from_numpy(img_array) print(img_tensor.shape) # 这次env自定义 vis.image(img_tensor, win="one image", env="MyPlotEnv", opts={ "title" : "一张图像" })
可视化文本,同样在MyPlotEnv中绘制:
# 可视化文本 text = "hello world" vis.text(text=text, win="text plot", env="MyPlotEnv", opts={ "title" : "可视化文本" })
运行上述代码,再通过在终端中输入python3 -m visdom.server启动服务器,然后根据终端返回的URL,在谷歌浏览器中访问这个URL,就可以看到图像了 。

PyTorch下的可视化工具

文章插图
 
PyTorch下的可视化工具

文章插图
 
 
在Environment中输入不同的env参数可以看到我们在不同环境下绘制的图片 。对于分类图集特别有用 。
 
在终端中按下Ctrl+C可以终止前端服务器 。
进一步
需要注意,如果你的前端服务器停掉了,那么所有的图片都会丢失,因为此时的图像的数据都是驻留在内存中,而并没有dump到本地磁盘 。那么如何保存当前visdom中的可视化结果,并在将来复用呢?其实很简单,比如我现在有一堆来之不易的Mel频谱图:
PyTorch下的可视化工具

文章插图
 
点击Manage Views
点击fork->save:(此处我只保存名为normal的env)
PyTorch下的可视化工具

文章插图
 
接着,在你的User目录下(Windows是C:Users账户.visdom文件夹,linux是在~.visdom文件夹下),可以看到保存好的env:
PyTorch下的可视化工具

文章插图
 
它是以json文件格式保存的,那么如果你保存完后再shut down当前的前端服务器,图像数据便不会丢失 。
好的,现在在保存完你珍贵的数据后,请关闭你的visdom前端服务器 。然后再启动它 。
如何查看保存的数据呢?很简答,下次打开visdom前端后,visdom会在.visdom文件夹下读取所有的保存数据完成初始化,这意味着,你直接启动visdom,其他什么也不用做就可以看到之前保存的数据啦!
那么如何服用保存的数据呢?既然你都知道了visdom保存的数据在哪里,那么直接通过python的json包来读取这个数据文件,然后做解析就可以了,这是方法一,演示如下:


推荐阅读