【学习笔记】Pytorch深度学习—Tensorboard的使用(二)

上一节内容中学习了tensorboard中曲线绘制方法scalar和直方图统计方法histogram,本节内容仍然要学习tensorboard的其他方法,主要分为3个方面:(1)对图像进行可视化的方法add_image,和在对图像进行可视化时的1个实用工具torchvision.utils.make_grid:将图像进行网格化;(2)AlexNet模型中卷积核与特征图可视化;(3)可视化当前网络add_graph 和工具包torchsummary:打印整个网络的信息。

add_image and torchvision.utils.make_grid

4、add_image()
功能:记录图像
add_image(tag,img_tensor,global_step=None,
walltime=None,dataformats='CHW')
tag:图像的标签名,图的唯一标识
img_tensor:图像数据,注意尺度
global_step:x轴
dataformats:数据形式,CHW(默认形式),HWC,HW

解释
img_tensor:图像数据尺度
通常数据输入到网络中后就不再符合RGB的0-255区间了,会是一系列的浮点数即0—1或-1—1之间的小数,而无法对其可视化。这时,对img_tensor输入就有了规定:如果输入图像数据范围在[0,1],就乘以255即[0,1]*255→[0,255];如果检测到输入数据存在大于1的像素值如1.1,就会默认为输入数据范围是[0,255],该大于1的像素点就为0-255范围内的1.1。(见实例)
dataformats:输入数据img_tensor的形式,具体有3种形式可选,CHW为默认形式,HW为灰度图像。

实验

在这里插入图片描述
结果
在这里插入图片描述


由于add_image方法不能在同一界面下看到多幅图像的可视化结果,因此选择采用Pytorch提供的make_grid函数。

5、torchvision.utils.make_grid
功能:制作网格图像
make_grid(tensor,nrow=8,padding=2,normalize=False,
range=None,scale_each=False,pad_value=0)
tensor:图像数据,B*C*H*W 形式
nrow:行数(列数自动计算)
padding:图像间距(像素单位,默认为2)
normalize:是否将像素值标准化
range:标准化范围
scalge_each:是否单张图维度标准化
pad_value:padding的像素值

解释
tensor:tensor是要可视化的图像数据,可以根据1个Batch的形式输入,不需要手动划分,其中B为batch_size;
nrow:行数,其列数自动计算;比如想要可视化的批量数据为16张,设置行数为4,自动计算得到列数为4;
padding:可视化图像之间的像素间距,也就是分割线宽,通常默认设置为2;
pad_value:分割线的像素值。

实验

在这里插入图片描述

结果

在这里插入图片描述

AlexNet 卷积核与特征图可视化

实验
(1)AlexNet卷积核可视化
在这里插入图片描述
结果



(2)特征图可视化
在这里插入图片描述


add_graph and torchsummary

add_graph能够可视化模型的计算图,也就是数据流的方向,通常可以用来观察模型结构。

6、add_graph()
功能:可视化模型计算图
add_graph(model,input_to_model=None,verbose=False)
model:模型,必须是nn.Module
input_to_model:模型接收的数据
verbose:是否打印计算图结构信息

该方法必须在pytorch_1.3及以上版本使用,否则web端查看的计算图存在bug。

add_graph查看到的计算图还是相对复杂的,为了便于观察和调试,下面还有一种方法torchsummary。

7、torchsummary
功能:查看模型信息,便于调试
add_graph(model,input_size,batch_size=-1(默认),verbose=False)
model:pytorch模型
input_size:模型输入size
batch_size:batch size
device:‘cuda’ or 'cpu'

打印模型每一层的shape,以及模型的参数总量

实验

writer = SummaryWriter(comment='test_your_comment', filename_suffix="_test_your_filename_suffix")

    # 模型
    fake_img = torch.randn(1, 3, 32, 32)

    lenet = LeNet(classes=2)

    writer.add_graph(lenet, fake_img)

    writer.close()
    # torchsummary
    from torchsummary import summary
    print(summary(lenet, (3, 32, 32), device="cpu"))

结果
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又青。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值