专栏名称: 机器学习算法与自然语言处理
一个有情怀的公众号。机器学习、自然语言处理、算法等知识集中营、期待与你相遇~
目录
相关文章推荐
生物制品圈  ·  从 “简单平板” 到 ... ·  昨天  
生信菜鸟团  ·  如何白嫖数据库进行基因组数据挖掘 ·  3 天前  
生物制品圈  ·  重磅!WHO发布2025-2026北半球流感 ... ·  3 天前  
生物学霸  ·  痛惜!又一博士因病逝世,年仅 32 ... ·  2 天前  
BioArt  ·  NAR丨黄国瑞/宁光团队揭示WBSCR16调 ... ·  3 天前  
51好读  ›  专栏  ›  机器学习算法与自然语言处理

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

机器学习算法与自然语言处理  · 公众号  ·  · 2018-08-14 00:00

正文

作者:盛源车

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

规范的做实验方法,记录训练时的损失数据,网络输出的图像,画高维空间用的t-SNE全部可以用tensorboad实现。开源库tensorboardX地址如下: https://github.com/lanpa/tensorboardX

可以把大部分的功能接入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)

复制 127.0.0.1:6006

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

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

  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查看即可


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

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

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(可能要等一会)

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

不同性别

不同口音

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

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








请到「今天看啥」查看全文