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.04 分钟前
C++现代模板编程核心技术精解:从类型分类、引用折叠、完美转发的内在原理,到可变模板参数的基本语法、包扩展机制及emplace接口的底层实现
开发语言·c++·人工智能·机器学习·完美转发·引用折叠·可变模板参数
java1234_小锋4 分钟前
Transformer 大语言模型(LLM)基石 - Transformer架构详解 - 掩码机制(Masked)原理介绍以及算法实现
深度学习·语言模型·transformer
Codebee42 分钟前
OODER图生代码框架:Java注解驱动的全栈实现与落地挑战
人工智能
中冕—霍格沃兹软件开发测试1 小时前
测试用例库建设与管理方案
数据库·人工智能·科技·开源·测试用例·bug
TextIn智能文档云平台1 小时前
什么是多模态信息抽取,它和传统OCR有什么区别?
大数据·人工智能
Linux后台开发狮1 小时前
DeepSeek-R1 技术剖析
人工智能·机器学习
拾荒的小海螺1 小时前
开源项目:AI-Writer 小说 AI 生成器
人工智能
Xiaoxiaoxiao02092 小时前
情感 AI:让机器真正理解人的下一代智能——以 GAEA 为例的情绪计算探索
人工智能
测试人社区-千羽2 小时前
边缘计算场景下的智能测试挑战
人工智能·python·安全·开源·智能合约·边缘计算·分布式账本
抽象带篮子2 小时前
Pytorch Lightning 框架运行顺序
人工智能·pytorch·python