pytorch 将pth(pt)文件转成oonx模型

前言
在深度学习领域,模型的保存和加载是一个重要的话题。我们经常需要保存训练好的模型,以便在将来使用或者进行迁移学习。在这里介绍将PyTorch中的.pth(pt)文件转换为O-N-X模型格式

模型转换

安装onnx模型:

pip install onnx

转换代码如下:

import torch
import torch.nn as nn
import torch.onnx
import onnx
import numpy as np

#要保存onnx模型的路径
onnx_model_save_path = "xx.onnx"
#待转换文件的路径
model_path = "xx.pth"

model = torch.load(model_path)
model.eval()

input_tensor = torch.randn(1, 3, 512, 512).cuda()
input_names = ['input']
output_names = ['output']
torch.onnx.export(model, input_tensor, onnx_model_save_path, verbose=True, input_names=input_names, output_names=output_names)

注:
1、model_path 这是指的是保存整个模型的pth文件 ,如果不是需要重新训练
2、torch.randn(1, 3, 512, 512) 3是通道数 512是训练时设置的图片大小

常见报错:
一、
![在这里插入图片描述](https://img-blog.csdnimg.cn/50138bf1ba0542b8b4028e15cd9561d4.pn

类型:A没有B属性
可能的错误原因以及对应的解决办法:

原因:我们的训练代码中只保存了权重参数,没有保存整个模型,一般不涉及模型转换我们也只要保存权重参数就行了。

解决办法:
在训练代码中找到:
在这里插入图片描述
加上或者替换,然后重新训练:
在这里插入图片描述
当然这边建议是加上去

二、解决第一个问题后可能遇上第二个问题:
在这里插入图片描述
这个错误是由于输入张量和权重张量的数据类型不匹配导致的。具体来说,输入张量的数据类型是torch.FloatTensor,而权重张量的数据类型是torch.cuda.FloatTensor。

要解决这个问题,可以尝试将输入张量转移到GPU上,使其与权重张量的数据类型保持一致。可以使用.to()方法将输入张量转移到GPU上哦

我原先输入
在这里插入图片描述
修改后:
在这里插入图片描述
当然后续遇到更多问题会持续更新
谢谢大家

参考链接:
1、https://blog.csdn.net/hutao1030813002/article/details/114984988
2、https://blog.csdn.net/Vertira/article/details/127601368

猜你喜欢

转载自blog.csdn.net/weixin_44598554/article/details/132447220