可视化工具:Visdom
使用pytorch进行模型训练时,仅仅通过观察print的输出是不够的,有时候需要通过一些专业的工具来将损失值,训练过程中产生的图像等数据展示出来,这个时候就可以借助Visdom来实现数据的可视化。
参考链接:
安装
pip install visdom
启动服务
python -m visdom.server
如果运行完出现
Downloading scripts, this may take a little while
等很久都没有反应的话可以参考这里,或者直接FQ。
通过浏览器查看可视化数据:http://localhost:8097/
静态展示数据(入门)
通过如下代码可以画一条曲线和一张图片
from visdom import Visdom import torch vis = Visdom(env='main') x = torch.linspace(0, 10, 1000) y = x + 5 vis.line(X=x, Y=y) vis.image(torch.ones((3, 100, 100)) * 127)
效果图

动态展示数据
损失值等数据肯定是动态展示的,所以需要在每次出新的损失值时,动态的添加到指定窗口中去
from visdom import Visdom import torch class Logger(): def __init__(self): self.vis = Visdom() self.cur_iter = 0 def log(self, loss): self.vis.line(X=[self.cur_iter], Y=[loss], win='loss', update='append') self.cur_iter += 1 logger = Logger() for i in range(50000): loss = torch.rand([1]) logger.log(loss)
效果图

封装后直接拿来用的代码
代码
from visdom import Visdom import torch import sys class Logger(): def __init__(self): self.vis = Visdom() self.cur_iter = 0 self.losses = {} self.images = {} def log_loss(self, losses=None): for loss_name in losses.keys(): if loss_name not in self.losses: self.losses[loss_name] = losses[loss_name] else: self.losses[loss_name] += losses[loss_name] self.vis.line(X=[self.cur_iter], Y=[losses[loss_name]], win=loss_name, update='append') sys.stdout.write('%s: %.4f -- ' % (loss_name, self.losses[loss_name])) print(self.cur_iter) self.cur_iter += 1 def log_image(self, images=None): for image_name, tensor in images.items(): self.vis.image(tensor, win=image_name, opts={'title': image_name}) logger = Logger() for i in range(5000): logger.log_loss({ 'loss1': torch.rand([1]), 'loss2': torch.rand([1]), 'loss3': torch.rand([1]), }) logger.log_image({ 'image1': torch.rand([3, 128, 128]), 'image2': torch.rand([3, 128, 128]), 'image3': torch.rand([3, 128, 128]), })
效果图

进阶
如果后续还需要定制自己用来展示数据的方式,可以参考官方教程,在原来的基础上,添加新的代码。

浙公网安备 33010602011771号