<<小白学PyTorch>>

小白学PyTorch | 13 EfficientNet详解及PyTorch实现

小白学PyTorch | 12 SENet详解及PyTorch实现

小白学PyTorch | 11 MobileNet详解及PyTorch实现

小白学PyTorch | 10 pytorch常见运算详解

小白学PyTorch | 9 tensor数据结构与存储结构

小白学PyTorch | 8 实战之MNIST小试牛刀

小白学PyTorch | 7 最新版本torchvision.transforms常用API翻译与讲解

小白学PyTorch | 6 模型的构建访问遍历存储(附代码)

小白学PyTorch | 5 torchvision预训练模型与数据集全览

小白学PyTorch | 4 构建模型三要素与权重初始化

小白学PyTorch | 3 浅谈Dataset和Dataloader

小白学PyTorch | 2 浅谈训练集验证集和测试集

小白学PyTorch | 1 搭建一个超简单的网络

小白学PyTorch | 动态图与静态图的浅显理解

参考目录:

  • 1 安装

  • 2 标量可视化

  • 3 权重直方图

  • 4 特征图可视化

  • 5 模型图的可视化

  • 6 卷积核的可视化

本章节来初次使用tensorboard来可视化pytorch深度学习中的一些内容,主要可视化的内容包括:标量变化(模型损失、准确率等);权重值的直方图;特征图的可视化;模型图的可视化;卷积核的可视化。

其实tensorboard一开始是给tensorflow使用的可视化工具,PyTorch框架自己的可视化工具是Visdom,但是这个API需要设置的参数过于复杂,而且功能不太方便也不强大,所以有人写了一个库函数TensorboardX来让PyTorch也可以使用tensorboard。

1 安装

安装非常的简单,直接需要安装tensorboardX,tensorboardtensorflow三个库函数:

# 控制台运行
pip install tensorboardX
pip install tensorboard
pip install tensorflow

这时候我们就已经安装完成了。

2 标量可视化

这里我是用的是第8课的MNIST作为基本代码,然后在其中增加可视化的功能。

先导入库函数

# 导入可视化模块
from tensorboardX import SummaryWriter
writer = SummaryWriter('../result_tensorboard')

这里面的writer就是我们要记录的一个写入tensorboard的一个接口。这个../result_tensorboard就是数据保存的具体位置。

    for batch_idx, (data, target) in enumerate(train_loader):#...省略一些代码...if (batch_idx + 1) % 50 == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, (batch_idx + 1) * len(data), len(train_loader.dataset),100. * (batch_idx + 1) / len(train_loader), loss.item()))writer.add_scalar('loss',loss.item(),tensorboard_ind)tensorboard_ind += 1

关键就是writer.add_scalar(),其中有三个关键的参数:

def add_scalar(self, tag, scalar_value, global_step):

  • tag就是一个字符串吧,在上面的代码中,我是每50个batch记录一次loss的值,所以这个tag就是'loss':

  • scalar_value就是这一次记录的标量了,上面记录的就是loss.item()。这个loss的变化应该会输出一个折线图的吧,这个scalar_value就是y轴的值;

  • global_step其实就是折线图的x轴的值,所以我每记录一个点就把tensorboard_ind加一。

运行上面的代码,会生成这样的一个文件:这个events.out.巴拉巴拉这个文件就是代码中保存的标量,我们需要在控制台启动tensorboard来可视化:

tensorboard --logdir==D:\Kaggle\result_tensorboard

这个--logdir=后面跟上之前writer定义的时候的那个地址,也就是../result_tensorboard,然后运行。

运行结果为:点击上图中的蓝色字体,会弹出一个网页,这个网页就是tensorboald的可视化面板。

从图中可以看到一个标量的折线图,就是我们的loss。

3 权重直方图

增加部分代码,目的是在每一个epoch训练完成之后,记录一次模型每一层的参数直方图。

n_epochs = 5
for epoch in range(n_epochs):train(epoch,epoch * len(train_loader))# 每一个epoch之后输出网络中每一层的权重值的直方图for i, (name, param) in enumerate(model.named_parameters()):if 'bn' not in name:writer.add_histogram(name, param, epoch)

运行结束之后依然是一个名字很长的数据文件,我们在tensorboard中运行这个文件,展示出直方图变化,上面的代码是记录了一个网络中所有层的权重值直方图,在具体任务中,可以只需要输出某一些层的权重直方图即可。

4 特征图可视化

在代码中的train函数内,增加了这样一段代码:

# 第一个batch记录数据
if batch_idx == 0:out1 = model.features1(data[0:1,:,:,:])out2 = model.features(out1)grid1 = make_grid(out1.view(-1,1,out1.shape[2],out1.shape[3]), nrow=8)grid2 = make_grid(out2.view(-1,1,out1.shape[2],out1.shape[3]), nrow=8)writer.add_image('features1', grid1, global_step=epoch)writer.add_image('features', grid2, global_step=epoch)

就是让第一个batch的第一个样本放到模型中,然后把卷积输出的特征图输出成out1和out2,然后使用torchvision.utils.make_grid函数把特征图变成网格的形式。然后写道writer里面,标签是'features1'和'features'。

运行tensorboard结果:

在features1中可以比较明显的看到32个‘6’的图片,这个是一个样本的特征图的32个通道的展示,上面的那个feature在检查代码之后,虽然看起来是4个图片,但是其实是64个通道,只是每个特征图都很小所以看起来比较模糊和迷惑。这也是因为MNIST数据集中是28尺寸的输入图片,对于Imagenet的大图片一般都蚕蛹224或者448像素的输入,就会好一些。

总之这是特征图的展示。我专门录了一个这个tensorboard的GIF展示。

5 模型图的可视化

这个非常的简单:

model = Net().to(device)
writer.add_graph(model, torch.rand([1,3,28,28]))

这里呢有一个问题,就是自己定义的模型结构会显示不出来。目前在网上搜索过但是没有比较好的解决方案,所以这里就不作模型的可视化了。对于部分官方提供的模型是可以可视化的,下面展示的是官方可视化的效果:

其实个人感觉,这个模型结构可视化的结果也不是非常的好看。而且对于模型可视化的结果还有其他的办法,所以不用tensorboard也罢。tensorboard来可视化loss,特征图等的功能也足够了。

6 卷积核的可视化

# 卷积核的可视化
for idx, (name, m) in enumerate(model.named_modules()):if name == 'features1':print(m.weight.shape)in_channels = m.weight.shape[1]out_channels = m.weight.shape[0]k_w,k_h = m.weight.shape[3],m.weight.shape[2]kernel_all = m.weight.view(-1, 1, k_w, k_h)  # 每个通道的卷积核kernel_grid = make_grid(kernel_all,  nrow=in_channels)writer.add_image(f'{name}_kernel', kernel_grid, global_step=epoch)

这个个也比较好理解,之前的关于卷积的基础知识,模型的遍历都讲过了,所以这里相信大家都没有什么比较难理解的地方了。

运行结果:

这里就非常的好奇,怎么设置才可以让这个图像不那么的糊

今天的讲解到此为止。代码已经在后台更新。

- END -

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群704220115。加入微信群请扫码进群(如果是博士或者准备读博士请说明):

【小白学PyTorch】14.tensorboardX可视化教程相关推荐

  1. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization

    <<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...

  2. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积、激活、初始化、正则...

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 20 TF2的eager模式与求导 扩展之Tensorflow2.0 | ...

  3. 【小白学PyTorch】扩展之Tensorflow2.0 | 20 TF2的eager模式与求导

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 19 TF2模型的存储与载入 扩展之Tensorflow2.0 | 18 ...

  4. 【小白学PyTorch】18.TF2构建自定义模型

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 17 TFrec文件的创建与读取 扩展之Tensorflow2.0 | 1 ...

  5. 【小白学PyTorch】17.TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分 ...

  6. 【小白学PyTorch】16.TF2读取图片的方法

    <<小白学PyTorch>> 扩展之tensorflow2.0 | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 tensorboardX可视化教程 ...

  7. 【小白学PyTorch】15.TF2实现一个简单的服装分类任务

    <<小白学PyTorch>> 小白学PyTorch | 14 tensorboardX可视化教程 小白学PyTorch | 13 EfficientNet详解及PyTorch实 ...

  8. pytorch dataset_【小白学PyTorch】16.TF2读取图片的方法

    <> 扩展之tensorflow2.0 | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 tensorboardX可视化教程 小白学PyTorch | 13 Ef ...

  9. data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 ...

最新文章

  1. oracle12c racpdb,Oracle 12C R2的CDB与PDB简单管理操作
  2. 中国移动如何开具并下载打印电子发票?
  3. JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
  4. C# 调Win32 API SendMessage简单用法及wMsg常量
  5. 多平台引擎使游戏业步入创作繁荣时代
  6. android Arrays.fill()的使用
  7. jq获取input选取的文件名_tushare获取交易数据并可视化分析
  8. 共享两个有用的网页布局表格 【有用】
  9. STM32学习——中断方式下的发送数据
  10. SpringBoot @SpringBootApplication
  11. SQLServer · 特性分析 · SQL Server 2012的分析函数未必都理解透了(2)
  12. php7安装详解、,php7安装详解(windows环境)
  13. istio入门(01)istio的优势在哪里?
  14. 图像处理——基于纹理分类的LBP算法及matlab+python算法实现
  15. 利用Java发送邮件(含附件)的例子
  16. 苹果4s怎么越狱教程_苹果手机:使用Rollectra工具清除iOS11.3~11.4beta3越狱教程
  17. netperf测试内网网络性能
  18. 开源棋牌框架creator+skynet:牛牛+五子棋
  19. Xen、OpenVZ、KVM、Hyper-V、VMWare虚拟化技术介绍
  20. MapReduce的核心资料索引 [转]

热门文章

  1. 心得---字节流、文件操作、对象序列化
  2. ERP 我最看重什么?
  3. 对《构建之法》的一点认识
  4. Excel找出两列相同部分
  5. 8年javascript总结
  6. 标准配置的UBUNTU 11.10 RUBY VMWARE 镜像,手工MOD(ZSH_RVM_RAILS_VIM)
  7. python长度为n的list_python “list*n”的坑你得注意
  8. 映射递归循环-约瑟夫环问题递归解法的一点理解
  9. 问题小结(二)——maven的核心功能、面向对象编程和面向接口编程的区别、抽象类和接口的区别等
  10. activex for chrome扩展程序 下载”_提升前端开发效率:你应该知道的10个Chrome扩展程序...