直接输出网络结果(以文本形式)

以以下博客为例:4.Deep Residual Network_马鹏森的博客-CSDN博客

The simplest way to visualize is to print the network directly:

# 实例化一个残差网络模型
model = ResNet(ResidualBlock, [2, 2, 2]).to(device)
print(model)

output result:

ResNet((conv): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(layer1): Sequential((0): ResidualBlock((conv1): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(conv2): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True))(1): ResidualBlock((conv1): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(conv2): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)))(layer2): Sequential((0): ResidualBlock((conv1): Conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(downsample): Sequential((0): Conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)))(1): ResidualBlock((conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)))(layer3): Sequential((0): ResidualBlock((conv1): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(downsample): Sequential((0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)))(1): ResidualBlock((conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu): ReLU(inplace)(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)))(avg_pool): AvgPool2d(kernel_size=8, stride=8, padding=0)(fc): Linear(in_features=64, out_features=10, bias=True)
)

我建议直接打印网络结果 + 1.3 使用Netron可视化,他俩结合着一起使用,这样可以更深刻的理解网络

use Netron to visualize:

保存为onnx:

# 实例化一个残差网络模型
model = ResNet(ResidualBlock, [2, 2, 2]).to(device)
print(model)# Pytorch 模型可视化
# 导出 ONNX 模型import torch.onnx# 按照输入格式,设计随机输入
dummy_input =torch.randn(1, 3, 32, 32).cuda()
# 导出模型
torch.onnx.export(model, dummy_input, 'resnet.onnx', verbose=True, training=2)# 模型可视化工具:NETRON
import netron
#打开服务
netron.start('resnet.onnx')

这里使用Netron的时候有一个坑,就是当你使用Netron可视化的时候发现BN不见了?

解决:torch.onnx.export 时添加参数 training=2,可以将conv和bn 分开显示,否则onnx默认将bn层融合到conv层。

output:

Stopping http://localhost:8080
Serving 'resnet.onnx' at http://localhost:8080

...


可视化网络总共有三个工具:

1.1 通过HiddenLayer可视化网络

1.2 通过PyTorchViz可视化网络

1.3 使用Netron可视化

1.1 + 1.2 的使用方法如下:PyTorch下的可视化工具 - 知乎

1.3的使用方法:使用pytorchviz和Netron可视化pytorch网络结构_-牧野-的博客-CSDN博客_netron pytorch

使用方法:

注意:一定要将model保存为onnx才可以正确的可视化,否则可视化效果很差,你可以同时保存两种模型,一个用于模型的使用(ckpt),另一个作为可视化使用(onnx)

保存为ckpt:

# Save the model checkpoint
torch.save(model.state_dict(), 'resnet.ckpt')

保存为onnx:

# 实例化一个残差网络模型
model = ResNet(ResidualBlock, [2, 2, 2]).to(device)
print(model)# Pytorch 模型可视化
# 导出 ONNX 模型import torch.onnx# 按照输入格式,设计随机输入
dummy_input =torch.randn(1, 3, 32, 32).cuda()
# 导出模型
torch.onnx.export(model, dummy_input, 'resnet.onnx', verbose=True, training=2)# 模型可视化工具:NETRON
import netron
#打开服务
netron.start('resnet.onnx')

这里使用Netron的时候有一个坑,就是当你使用Netron可视化的时候发现BN不见了?

解决:torch.onnx.export 时添加参数 training=2,可以将conv和bn 分开显示,否则onnx默认将bn层融合到conv层。


有一个问题就是:

解决 HiddenLayer 可视化不显示神经网络数据流维度大小?

找到 pytorch_builder.py 文件,修改 get_shape(torch_node) 函数如下:

* 找到 pytorch_builder.py 文件的方法是:直接在文件夹中打开“build_graph”文件,然后文件夹内就有pytorch_builder.py

def get_shape(torch_node):"""Return the output shape of the given Pytorch node."""# Extract node output shape from the node string representation# This is a hack because there doesn't seem to be an official way to do it.# See my quesiton in the PyTorch forum:# https://discuss.pytorch.org/t/node-output-shape-from-trace-graph/24351/2# TODO: find a better way to extract output shape# TODO: Assuming the node has one output. Update if we encounter a multi-output node.shape = torch_node.output().type().sizes()return shape


二、训练过程可视化

2.1 通过tensorboardX可视化训练过程

【Pytorch】tensorboardX==》数据可视化_马鹏森的博客-CSDN博客

三、使用Visdom进行可视化

PyTorch下的可视化工具 - 知乎

PyTorch下的网络可视化方式和工具相关推荐

  1. 无tensorflow,在pytorch下使用tensorboard可视化工具报错:Could not load dynamic library ‘cudart64_110.dll‘; dlerror

    文章目录 报错信息: 真实原因 解决方案 tensorboard完整demo代码: 在pycharm终端下输入命令 (如果是在cmd中输入命令的话,记得一定要把cmd中的目录切换成本项目的路径,博客最 ...

  2. pytorch下搭建网络训练并保存模型

    最近在学习pytorch,使用mnist数据集,搭建AlexNet训练并保存模型,将代码做一记录. 建立数据集的方法见pytorch建立自己的数据集(以mnist为例) 搭建网络的方法见用pytorc ...

  3. 【深度学习】【caffe实用工具6】笔记28 windows下SSD网络中的convert_annoset工具的使用

    /*************************************************************************************************** ...

  4. PyTorch下的可视化工具(网络结构/训练过程可视化)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 锦恢@知乎 来源 | https://zhuanlan.z ...

  5. PyTorch深度学习训练可视化工具tensorboardX

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 之前笔者提到了PyTorch的专属可视化工具visdom,参看Py ...

  6. BrainNet Viewer:人类大脑连接的网络可视化工具

    BrainNet Viewer:人类大脑连接的网络可视化工具 1 方法 1.1 工具箱的开发 1.1.1 开发环境 1.1.2 可视化程序 1.1.3 文件定义 1.1.4 核心代码 1.2 实验数据 ...

  7. Pytorch的网络可视化

    概述 有时候想要绘制一个神经网络的网络结构,可以通过代码中层的定义去用第三方软件依次绘制,但是这样费时费力.因此需要一种快速绘制的办法. Netron netron可通过所保存的模型将其用网络的方式可 ...

  8. Netdata 是一款 Linux 性能实时监测工具,以web的可视化方式展示

    Netdata 是一款 Linux 性能实时监测工具..以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu.内存.硬盘输入/输出.网络等linux性能的数据). Netdata文档地址: ...

  9. 【深度学习】PyTorch深度学习训练可视化工具visdom

    PyTorch Author:louwill Machine Learning Lab 在进行深度学习实验时,能够可视化地对训练过程和结果进行展示是非常有必要的.除了Torch版本的TensorBoa ...

最新文章

  1. 使用GDAL将12bit量化图像转为16bit或者8bit
  2. Hexo搭建个人博客常用命令
  3. oracle job 与存储过程,应用oracle job和存储过程
  4. 【探索PowerShell 】【十二】筛选器 - Filters
  5. W3C-Web Service
  6. elasticsearch-head 集群健康值: 未连接
  7. 2019最新java实战项目资料
  8. 大学计算机系最努力的同学都是如何学习的?
  9. 随机过程及其在金融领域中的应用 第二章 习题 及 答案
  10. win11怎么看激活状态
  11. 编程运维的一些小Tips
  12. iOS - UIButton连续点击事件控制
  13. FTP服务器是什么意思?FTP服务器怎么搭建?
  14. ASP.NET显示农历时间
  15. 2022年武汉专精特新小巨人企业奖励补贴以及申报条件汇总
  16. Linux-磁盘分区,挂载
  17. 虚拟化及vmware产品介绍
  18. 不是有效的win32程序_【西门子PLC编程实例】S7200 PLC子程序指令及应用实例
  19. 安卓手机主题软件_安卓手机免费的小说软件
  20. Docker Ros melodic Error记录

热门文章

  1. odoo15 信息提示的又一点炫酷
  2. 【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )
  3. java容器类_走进Java中的持有对象(容器类)之一 容器分类
  4. 《软件安装》VMware Workstation 不注册 下载
  5. 黄油刀——ButterKnife
  6. php页面强制横屏,iOS强制横屏总结
  7. [Java 教程 01] Hello,Java!
  8. 如何星标「芋道源码」
  9. LED显示屏亮度不足原因分析
  10. android socket gprs 与 wifi 网络切换,Android应用开发Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址...