学术福利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
然后打开浏览器输入网址就会看到
这里会有几个坑,大家碰到了可以参考:
-host=127.0.0.1是我自己添加的,不加的话也可以。但我自己电脑不加的话显示不出
tensorboard要更新到最新版本,不然有些功能没有
数据量大的时候耐心等一等,可能要读取一会才出现
我用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查看即可
要获得的数据是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的图,
至于画模型的计算图,有些功能不太完善,我一些复杂的模型就画不出。还有语音文件由于频率关系我也没用,所以就不记录了。
大家觉得有帮助的话,讨个赞 以上是关于学术福利Pytorch的tensorboard食谱帮你可视化误差结果的主要内容,如果未能解决你的问题,请参考以下文章 如何在 pytorch 中使用 tensorboard 调试器?