Netron可视化深度学习的模型框架,大大降低了大模型的学习门槛

深度学习是机器学习的一个子领域,灵感来源于人脑的神经网络。深度学习通过多层神经网络自动提取数据中的高级特征,能够处理复杂和大量的数据,尤其在图像、语音、自然语言处理等任务中表现出色。常见的深度学习模型:

  • 卷积神经网络(CNN):专注于处理图像数据的深度学习模型,广泛应用于计算机视觉任务,如图像分类、目标检测等。

卷积神经网络模型

  • 循环神经网络(RNN)和长短期记忆网络(LSTM):用于处理序列数据(如文本、语音),擅长学习时间序列中的依赖关系。

RNN 循环神经网络模型

  • Transformer:通过自注意力机制和并行计算,在自然语言处理等任务中取得了显著突破(如 BERT、GPT 等模型)。

transformer 模型框架

学习人工智能技术依然是当下的热点,无论是谁,都需要学习人工智能技术,就像当年的电脑时代一样,每个人都需要学习了解人工智能技术。但是学习技术的门槛比较高,特别是大模型的代码让人看起来,简直就是天书一样,本来代码就长,还堆叠了 N 个模型框架,且每个输入,输出的数据形状,简直让人头疼。

好在Netron把大模型的框架都使用可视化的方式呈现了出来,从输入,到输出,数据的每个步骤的流动,以及每个节点的数据维度与当前时间节点的计算名称都详细的罗列了出来,类似卷积的操作,从输入到输出,都是一条直线下来,光看代码也比较容易清晰。

但是碰到类似的大模型,其输入,输出节点如此之多,若只看代码的话,估计整个人都懵了。若下图展现出来,再配合着代码与模型框架,再去理解模型,是不是就容易轻松了。

Netron的官网也很简洁,只需要把自己的模型训练完成的模型,上传到Netron的网站,模型框架就会自动展现出来。目前支持ONNX, TensorFlow Lite, Core ML, Keras, Caffe, Darknet, MXNet, PaddlePaddle, ncnn, MNN, TensorFlow.js, Safetensors and NumPy.

这里我们编写一段 CNN 的代码,试试Netron可视化模型的魅力,运行以下代码,然后把模型保存成 onnx格式,得到模型文件后,就可以上传到Netron网站。

复制代码
import torch
import torch.nn as nn
import torch.onnx
import torch.nn.functional as F 
# 假设我们有一个简单的卷积神经网络
class SimpleCNN(nn.Module):
   def __init__(self):
       super(SimpleCNN, self).__init__()
       self.conv1 = nn.Conv2d(1, 6, 5)
       self.pool = nn.MaxPool2d(2, 2)
       self.conv2 = nn.Conv2d(6, 16, 5)
       self.fc1 = nn.Linear(16 * 5 * 5, 120)  # 调整全连接层的输入维度
       self.fc2 = nn.Linear(120, 84)
       self.fc3 = nn.Linear(84, 10)
 
   def forward(self, x):
       x = self.pool(F.relu(self.conv1(x)))
       x = self.pool(F.relu(self.conv2(x)))
       x = x.view(-1, 16 * 5 * 5)  # 调整 view 的参数
       x = F.relu(self.fc1(x))
       x = F.relu(self.fc2(x))
       x = self.fc3(x)
       return x
# 创建模型实例
model = SimpleCNN()
# 设置模型为评估模式
model.eval()
# 创建一个示例输入张量
dummy_input = torch.randn(1, 1, 32, 32)  # 示例输入尺寸 (batch_size, channels, height, width)
# 导出模型
torch.onnx.export(model,               # 要导出的模型
                 dummy_input,         # 模型的示例输入
                 "simple_cnn.onnx",   # 输出文件名
                 export_params=True,  # 是否导出参数
                 opset_version=11,    # ONNX 的版本
                 do_constant_folding=True,  # 是否执行常量折叠优化
                 input_names=['input'],    # 输入节点名称
                 output_names=['output'],  # 输出节点名称
                 dynamic_axes={'input': {0: 'batch_size'},  # 动态轴
                               'output': {0: 'batch_size'}})
 
print("模型已成功导出为 ONNX 格式!")
'''
SimpleCNN 类继承自 nn.Module,这是所有 PyTorch 网络模型的基础类。
__init__ 方法中定义了网络的结构:
self.conv1:第一个卷积层,输入通道数为 1,输出通道数为 6,卷积核大小为 5x5。
self.pool:最大池化层,池化窗口大小为 2x2,步长为 2。
self.conv2:第二个卷积层,输入通道数为 6,输出通道数为 16,卷积核大小为 5x5。
self.fc1:第一个全连接层,输入维度为 16 * 5 * 5,输出维度为 120。
self.fc2:第二个全连接层,输入维度为 120,输出维度为 84。
self.fc3:输出层,输入维度为 84,输出维度为 10(假设是 10 类分类任务)。
 
forward 方法定义了数据在模型中的流动方式:
x = self.pool(F.relu(self.conv1(x))):对输入 x 进行第一层卷积操作,然后应用 ReLU 激活函数,再进行最大池化。
x = self.pool(F.relu(self.conv2(x))):对上一步的结果进行第二层卷积操作,同样应用 ReLU 激活函数,再进行最大池化。
x = x.view(-1, 16 * 5 * 5):将多维张量展平成一维张量,以便可以输入到全连接层。这里 -1 表示自动计算批量大小,16 * 5 * 5 是展平后的特征数量。
x = F.relu(self.fc1(x)):通过第一个全连接层,并应用 ReLU 激活函数。
x = F.relu(self.fc2(x)):通过第二个全连接层,并应用 ReLU 激活函数。
x = self.fc3(x):通过输出层,得到最终的输出。
'''

Netron展示了每个节点的计算过程以及名称,当然模型的每个步骤的数据维度,也清晰的展示了出来,这样我们学习大模型时,可以根据模型框架以及可视化过程来解析代码的执行过程,也可以通过可视化的模型框架,来学习数据的流向,以及 debug 模型。

复制代码
https://github.com/lutzroeder/netron
https://netron.app/


更多transformer,VIT,swin tranformer
参考头条号:人工智能研究所
V:启示AI科技

动画详解transformer 在线教程

相关推荐
看到我,请让我去学习1 小时前
OpenCV 与深度学习:从图像分类到目标检测技术
深度学习·opencv·分类
jndingxin1 小时前
OpenCV 图像哈希类cv::img_hash::AverageHash
人工智能·opencv·哈希算法
加油加油的大力1 小时前
入门基于深度学习(以yolov8和unet为例)的计算机视觉领域的学习路线
深度学习·yolo·计算机视觉
Jamence1 小时前
多模态大语言模型arxiv论文略读(153)
论文阅读·人工智能·语言模型·自然语言处理·论文笔记
晨曦5432101 小时前
量子计算突破:8比特扩散模型实现指数级加速
人工智能
Albert_Lsk1 小时前
【2025/07/11】GitHub 今日热门项目
人工智能·开源·github·开源协议
莫彩1 小时前
【大模型推理论文阅读】Enhancing Latent Computation in Transformerswith Latent Tokens
论文阅读·人工智能·语言模型
康斯坦丁师傅1 小时前
全球最强模型Grok4,国内已可免费使用!(附教程)
人工智能·grok
崔高杰1 小时前
微调性能赶不上提示工程怎么办?Can Gradient Descent Simulate Prompting?——论文阅读笔记
论文阅读·人工智能·笔记·语言模型
元气小嘉2 小时前
前端技术小结
开发语言·前端·javascript·vue.js·人工智能