学术福利Pytorch的tensorboard食谱帮你可视化误差结果

Posted 机器学习算法与自然语言处理

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学术福利Pytorch的tensorboard食谱帮你可视化误差结果相关的知识,希望对你有一定的参考价值。

知乎专栏:魔法抓的学习笔记

可以把大部分的功能接入pytorch,不过有些例子不详细,我自己记录一下。

1、记录损失数据

2、画图

3、画t-SNE


需要安装的包

1.tensorboard

2.tensorbaordX

应用一:记录损失函数

假如我们现在用pytorch写一个VAE的模型

from tensorboardX import SummaryWriter

writer = SummaryWriter() # 建立一个保存数据用的东西

for epoch in range(EPOCHS):
recon_loss = L2_loss() # 某L2 loss
   
KL_loss = XXX_loss() # 反正就是求出一个loss
   
total_loss = recon_loss + KL_loss

''' ===== 更新优化器 ===== '''

   
optimizer.zero_grad()
total_loss.backward()
optimizer.step()

# 写入vae模型的损失值,可以在一张图上显示出来。
    # 注意 pytorch0.4 要在这个tensor后面加 .item(),这样存的数值不是计算图
    # epoch是图的x轴

   
writer.add_scalars('data/train_loss', {'Total Loss': total_loss.item(),
                                           
'Reconstruction Loss': recon_loss.item(),
                                           
'KL divergence': KL_loss.item()},
                       
epoch)

之后打开terminal,cd到运行模型的代码文件,输入:

tensorboard --logdir=runs -host=127.0.0.1

TensorBoard 1.8.0 at http://127.0.0.1:6006 (Press CTRL+C to quit)

复制h127.0.0.1:6006

然后打开浏览器输入网址就会看到

【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果

这里会有几个坑,大家碰到了可以参考:

  1. -host=127.0.0.1是我自己添加的,不加的话也可以。但我自己电脑不加的话显示不出

  2. tensorboard要更新到最新版本,不然有些功能没有

  3. 数据量大的时候耐心等一等,可能要读取一会才出现

  4. 我用safari打开才能看到数据,google chrome浏览器打开反而看不到..

应用二:记录输出的图像

如果要记录模型生成的图像

import torchvision.utils as vutils
from tensorboardX import SummaryWriter

writer = SummaryWriter()

sample_z = torch.rand((batch_size, z_dim)) # 设定一个固定的噪声,大小符合模型即可
for epoch in range(EPOCH):
# 转为evaluation 模式
   
model.eval()
# 得到输出
   
x = model(sample_z)
# 转为图像
   
x = vutils.make_grid(x, normalize=True, scale_each=True)
# 写入writer
   
writer.add_image('Image', x, epoch)

之后去tensorboard里的images查看即可

【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果
【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果


应用三:观察高维数据,t-SNE

要获得的数据是tensor list(数据)和meta data(标签),外加meta header(标签的标题):

【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果
from tensorboardX import SummaryWriter

writer = SummaryWriter()

tensor_list = [] # 存放数据tensor
meta_data = [] # 存放标签
meta_header = ['Gender\tDR'] # 标签的标题,要用\t隔开 e.g., [‘性别\t口音‘]
for x in data_male_db:
latent = Encoder(x) # 输入某input x到模型encoder里得到隐向量

   
tensor_list.append(latent.item()) # 记录数据
   
gender = '男'
   
dr = '东北'
   
label = [str(gender) + '\t' + str(dr)] # 这一块实际应用的时候得自己想办法定义标签信息
   
meta_data.append(label) # 记录标签

for x in data_female_gd:
latent = Encoder(x) # 输入某input x

   
tensor_list.append(latent.item()) # 记录数据
   
gender = '女'
   
dr = '广东'
   
label = [str(gender) + '\t' + str(dr)]
meta_data.append(label) # 记录标签

# 放入writer,tensor_list的长度与meta_data相同,再加入标题
writer.add_embedding(torch.Tensor(tensor_list), metadata=meta_data, metadata_header=meta_header)

之后再打开tensorboard,会看到projector(可能要等一会)

【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果

如果标签只是单个的性别(男女),其实没必要加标题和metadata,直接写入即可。但对于单个数据多个标签的情况需要加入标题。之后就可以通过调整标签来观察t-SNE的图,

【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果
不同性别
【学术福利】Pytorch的tensorboard食谱帮你可视化误差结果

不同口音

至于画模型的计算图,有些功能不太完善,我一些复杂的模型就画不出。还有语音文件由于频率关系我也没用,所以就不记录了。

大家觉得有帮助的话,讨个赞

以上是关于学术福利Pytorch的tensorboard食谱帮你可视化误差结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pytorch 中使用 tensorboard 调试器?

pytorch中的tensorboard使用

pytorch中的tensorboard使用

pytorch中的tensorboard使用

无法让 pytorch 与 tensorboard 一起工作

在 MESS 中使用 pytorch 的 Tensorboard