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

相关推荐
程序员老刘3 分钟前
MCP:新时代的API,每个程序员都应该掌握
人工智能·flutter·mcp
Humbunklung7 分钟前
全连接层和卷积层
人工智能·python·深度学习·神经网络·机器学习·cnn
广州山泉婚姻18 分钟前
解锁高效开发:Spring Boot 3和MyBatis-Flex在智慧零工平台后端的应用实战
人工智能·spring boot·spring
三花AI18 分钟前
Higgsfield AI 整合 Flux.1 Kontext:一站式创意工作流解决方案
人工智能
vokxchh33 分钟前
RootSIFT的目标定位,opencvsharp。
人工智能·opencv·计算机视觉
神经星星35 分钟前
基于8.6万蛋白质结构数据,融合量子力学计算的机器学习方法挖掘69个全新氮-氧-硫键
人工智能·深度学习·机器学习
执笔论英雄36 分钟前
【大模型训练】中短序列attention 和MOE层并行方式(二)
人工智能
位东风37 分钟前
【凌智视觉模块】rv1106 部署 ppocrv4 检测模型 rknn 推理
c++·人工智能·嵌入式硬件
LLM大模型1 小时前
LangChain篇-自定义Callback组件
人工智能·程序员·llm
玩转AGI1 小时前
Deepseek篇--开源技术DualPipe 与 EPLB详解
人工智能·程序员·llm