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 在线教程

相关推荐
深兰科技44 分钟前
廊坊市市长刘媛率队到访深兰科技,推动机器人制造基地与产业投资落地
人工智能·科技·机器人·scala·symfony·深兰科技·廊坊市市长刘媛
沫儿笙1 小时前
发那科机器人在氩弧焊中搭配节气装置的优势
人工智能·机器人
m0_650108245 小时前
【论文精读】CMD:迈向高效视频生成的新范式
人工智能·论文精读·视频扩散模型·高效生成·内容 - 运动分解·latent 空间
电鱼智能的电小鱼5 小时前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频
年年测试5 小时前
AI驱动的测试:用Dify工作流实现智能缺陷分析与分类
人工智能·分类·数据挖掘
唐兴通个人6 小时前
人工智能Deepseek医药AI培训师培训讲师唐兴通讲课课程纲要
大数据·人工智能
WGS.6 小时前
llama factory 扩充词表训练
深度学习
共绩算力6 小时前
Llama 4 Maverick Scout 多模态MoE新里程碑
人工智能·llama·共绩算力
DashVector7 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
AI纪元故事会7 小时前
【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
人工智能·算法·目标检测·计算机视觉