ONNX(Open Neural Network Exchange)
ONNX 是一种用于表示深度学习模型的开放格式,使得不同深度学习框架(如 PyTorch、TensorFlow、Caffe2 等)之间的模型能够相互交换。
需安装:
bash
pip install --upgrade onnx onnxscript onnxruntime
Pytorch张量
可使用torch.rand()方法创建0~1均匀分布的随机数,使用torch.randn()方法创建标准正态分布随机数,使用torch.zeros()和torch.ones()方法创建全0和全1的张量。
在构造张量时使用dtype明确其类型。
PyTorch针对torch.float32和torch.int64类型有专门这样的简写形式是因为,这两种类型特别重要,模型的输入类型一般都是torch.float32,而模型分类问题的标签类型一般为torch.int64。
torch.onnx.export 是 PyTorch 自带的把模型转换成 ONNX 格式的函数。前三个参数分别是要转换的模型 、模型的任意一组输入 、导出的 ONNX 文件的文件名。
简单示例
python
import torch
import torchvision.models as models
# 加载一个预训练的 PyTorch 模型
model = models.resnet18(pretrained=True)
model.eval()
# 创建一个虚拟输入张量(这里使用随机数据)
dummy_input = torch.randn(1, 3, 224, 224) # 假设输入是一张 224x224 的 RGB 图像
# 导出模型为 ONNX 格式
torch.onnx.export(model, dummy_input, "resnet18.onnx", verbose=True, input_names=["input_0"], output_names=["output_0"])
注意点:
确保你的 PyTorch 模型在导出之前已经处于评估模式(
model.eval()
)示例输入(dummy input)应该与你的模型训练时使用的输入具有相同的形状和数据类型。
在将输入数据传递给 ONNX Runtime 之前,请确保它们已经转换为 NumPy 数组,并且位于 CPU 上