.pth文件转化为onnx文件,并进行可视化

1、文件转化

import torch.onnx
from torchvision import models
from onnxsim import simplify
import onnx
torch_model = torch.load("D:\checkpoint-epoch40.pth",
                         map_location='cpu')  # pytorch模型加载
model = models.resnet50()
# model.load_state_dict(torch_model)
batch_size = 1  # 批处理大小
input_shape = (3, 48, 48)  # 输入数据,改成自己的输入shape

# #set the model to inference mode
model.eval()

x = torch.randn(batch_size, *input_shape)  # 生成张量
export_onnx_file = "fr-unet.onnx"  # 目的ONNX文件名
torch.onnx.export(model,
                  x,
                  export_onnx_file,
                  opset_version=10,
                  do_constant_folding=True,  # 是否执行常量折叠优化
                  input_names=["input"],  # 输入名
                  output_names=["output"])  # 输出名
#                   dynamic_axes={"input":{0:"batch_size"},  # 批处理变量
#                                  "output":{0:"batch_size"}})

2、如果想简化模型可添加如下代码


                
### PyTorch PTH 文件可视化方法 PTH 文件通常是用于存储 PyTorch 训练后的模型权重或整个模型的状态。为了更好地理解这些文件的内容以及其内部结构,可以采用多种方式对其进行可视化。 #### 方法一:通过 Python 脚本查看 PTH 文件内容 可以直接加载 `.pth` 文件打印其中的键值对来了解其结构。通常情况下,`.pth` 文件是一个字典对象,包含了模型的权重和其他元信息。 ```python import torch # 加载 .pth 文件 state_dict = torch.load("checkpoint_latest.pth", map_location=torch.device('cpu')) # 查看字典中的键 print(state_dict.keys()) # 如果想进一步查看具体层的权重 for key, value in state_dict.items(): print(f"{key}: {value.shape}") ``` 这种方法适用于快速检查 `.pth` 文件的具体内容及其层次结构[^1]。 --- #### 方法二:使用 `torchviz` 可视化计算图 如果希望更直观地看到模型的计算流程,可以通过 `torchviz` 工具生成可视化的计算图。 ```python from torch import nn from torchviz import make_dot # 定义一个简单的神经网络 model = nn.Sequential( nn.Linear(8, 16), nn.Tanh(), nn.Linear(16, 1) ) # 创建虚拟输入 x = torch.randn(1, 8) # 获取前向传播过程中的计算图 y = model(x) dot = make_dot(y, params=dict(list(model.named_parameters()))) dot.render("compute_graph.gv", format="png") # 保存为 PNG 图像 ``` 此方法能够清晰展示模型各层之间的连接关系和数据流动方向[^2]。 --- #### 方法三:将 PTH 文件转换为 ONNX 使用 Netron 进行可视化 对于复杂的深度学习模型,推荐将其导出为 ONNX 格式,利用 **Netron** 工具进行图形化展示。以下是具体的实现步骤: 1. 导出模型到 ONNX 格式: ```python import torch.onnx from torchvision import models # 加载预训练模型 torch_model = torch.load("path_to_your_pth_file.pth", map_location='cpu') model = models.resnet50() model.load_state_dict(torch_model['state_dict']) # 假设 pth 文件中有 'state_dict' 键 model.eval() # 设置输入形状 batch_size = 1 input_shape = (3, 224, 224) # ResNet 默认输入尺寸 dummy_input = torch.randn(batch_size, *input_shape) # 导出为 ONNX 文件 export_onnx_file = "resnet50.onnx" torch.onnx.export( model, dummy_input, export_onnx_file, opset_version=11, do_constant_folding=True, input_names=['input'], output_names=['output'] ) ``` 2. 使用 Netron 打开生成的 ONNX 文件: 下载安装 [Netron](https://github.com/lutzroeder/Netron),运行程序后拖拽生成的 `.onnx` 文件即可完成可视化操作[^3]。 --- #### 方法四:可视化特征图 除了整体架构外,还可以针对某些中间层的激活情况进行可视化分析。这有助于深入了解模型的工作机制。 ```python import torch import matplotlib.pyplot as plt def get_activation(name): activation = {} def hook(model, input, output): activation[name] = output.detach() return hook # 实例化模型加载权重 model = YourModelClass() # 替换为你实际使用的模型类 model.load_state_dict(torch.load("your_model.pth")) model.eval() # 注册钩子函数以捕获某一层的输出 layer_name = 'conv1' getattr(model, layer_name).register_forward_hook(get_activation(layer_name)) # 准备测试图像 image = ... # 加载一张图片作为输入 with torch.no_grad(): output = model(image.unsqueeze(0)) # 添加批次维度 # 提取该层的激活情况 activations = activations[layer_name] # 绘制部分通道的激活图 fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(8, 8)) for i, ax in enumerate(axes.flat): ax.imshow(activations[0][i].numpy(), cmap='viridis') plt.show() ``` 这种方式特别适合研究卷积神经网络中不同滤波器的作用效果[^4]。 --- ### 总结 以上介绍了四种不同的 PTH 文件可视化手段,分别对应于简单浏览、计算流图绘制、高级框架支持下的拓扑结构呈现以及局部特征响应观察等方面需求。每种技术都有各自适用场景,在实践过程中可根据具体情况灵活选用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值