0. 前言
按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。
本文介绍深度学习网络模型结构可视化工具——Netron。
以AlexNet为例,如果直接print输出为:
AlexNet( (features): Sequential( (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2)) (1): ReLU(inplace=True) (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False) (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (4): ReLU(inplace=True) (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False) (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (7): ReLU(inplace=True) (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (9): ReLU(inplace=True) (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (11): ReLU(inplace=True) (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False) ) (avgpool): AdaptiveAvgPool2d(output_size=(6, 6)) (classifier): Sequential( (0): Dropout(p=0.5, inplace=False) (1): Linear(in_features=9216, out_features=4096, bias=True) (2): ReLU(inplace=True) (3): Dropout(p=0.5, inplace=False) (4): Linear(in_features=4096, out_features=4096, bias=True) (5): ReLU(inplace=True) (6): Linear(in_features=4096, out_features=1000, bias=True) ) )
这样非常不直观,可读性非常差。如果使用Netron,就可以直观地看出模型的结构:
本文将详细介绍Netron的使用方法。
1. Netron介绍
Netron 是一个开源的深度学习和机器学习模型可视化工具,它能够以图形化的方式展示各种深度神经网络、机器学习模型及其内部结构。开发者可以使用 Netron 来直观地理解、调试和验证不同框架生成的模型文件。
以下是一些关于 Netron 的关键特点:
- 跨平台支持:Netron 可以在多种操作系统上运行,包括 Windows、macOS 和 Linux,并且有浏览器版本可以直接在线使用。本文将不安装其他软件,展示在浏览器上使用的方法。
- 广泛兼容性:Netron 支持多种深度学习框架产生的模型格式,如 ONNX (Open Neural Network Exchange)、TensorFlow、Keras、Caffe、Core ML、PyTorch、MXNet、PaddlePaddle 等。
- 可视化内容:通过 Netron,用户可以看到模型的层级结构(每一层的名称、类型、输入和输出维度等),以及模型参数的具体数值(如果模型文件中包含的话)。
- 交互式界面:提供了一个简洁易用的图形用户界面,用户可以通过点击和滚动来探索模型的细节,便于对复杂的模型架构进行快速解读。
- 实用功能:除了基本的可视化之外,Netron 还提供了诸如查看权重张量、导出模型为其他格式等功能,方便了模型迁移和部署阶段的工作。
2. Netron的使用方法
Netron有以下3种使用方法,本文最推荐第三种使用方法,也仅详细介绍这种方法。
2.1 本地安装使用
对于Windows、macOS和Linux系统,可以下载对应的可执行程序安装后运行。下载地址:GitHub - lutzroeder/netron: Visualizer for neural network, deep learning and machine learning models
2.2 通过网页版加载模型使用
Netron的网页版地址:Netron
点击Open Model,导入已保存的模型(.pth文件)就可以看到模型的可视化结构。
2.3 通过导入Netron库使用(推荐)
首先安装Netron库:pip install netron
对应还需要安装onnx库:pip install onnx
以AlexNet为例:通过torch.onnx.export()生成.onnx文件,再通过netron.start()打开.onnx文件就可以看到文章开头的网络模型可视化结构图了。
import torch from torchvision.models import AlexNet import netron model = AlexNet() input = torch.ones((1,3,224,224)) torch.onnx.export(model, input, f='AlexNet.onnx') #导出 .onnx 文件 netron.start('AlexNet.onnx') #展示结构图
3. Netron的功能介绍
除了提供基本的模型可视化方案外,Netron还有以下非常棒的功能:
3.1 层次结构展示
以图形化的方式呈现模型中的每一层及其连接关系,便于用户快速了解模型的整体架构。
例如查看第一个卷积层:
鼠标放在INPUTS的X name: input.1上,对应输入的箭头就会标红,标明输入来源:
对应输出output也有同样的效果:
这样就可以清晰地看到输入输出路径。
3.2 参数查看
对于支持的模型格式,Netron还允许用户查看模型中包含的具体权重和偏置参数。
还以第一个卷积层为例,点击W name: features.0.weight右边的“+”就可以直观地看到卷积核的参数,其他权重的查看也是同样方法。
3.3 导出图片格式
点击左侧的Show/Hide Attributes和Show/Hide Weights可以定义结构图的显示信息内容:
也可以转成水平显示:
调整好自己想要的结构图就可以点击左侧的Export导出图片了: