随着区块链技术的发展和加密货币投资者的增多,以太坊、Polkadot等区块链生态中涌现出一批与Web3.0相关的项目。因此,区块链技术奠定了Web3.0发展的基础。
就整个区块链行业而言,多链并存的格局还会持续很长时间。在这种情况下,不同区块链生态的Web3.0用户有进行交互的需求,跨链技术会在这个过程中发挥重要作用
将PyTorch模型转换为ONNX模型,通常是使用torch.onnx.export()函数来转换的,基本的思路是:
加载PyTorch模型,可以选择只加载模型结构;也可以选择加载模型结构和权重。
最后使用torch.onnx.export()函数来转换,生产xxx.onnx模型。
下面有一个简单的例子:
import torch
import torch.onnx
#加载PyTorch模型
model=...
#设置模型输入,包括:通道数,分辨率等
dummy_input=torch.randn(1,3,224,224,device='cpu')
#转换为ONNX模型
torch.onnx.export(model,dummy_input,"model.onnx",export_params=True)
1.1转换为ONNX模型且加载权重
这里举一个resnet18的例子,基本思路是:
首先加载了一个预训练的ResNet18模型;
然后将其设置为评估模式。接下来定义一个与模型输入张量形状相同的输入张量,并使用torch.randn()函数生成了一个随机张量。
最后,使用onnx.export()函数将PyTorch模型转换为ONNX格式,并将其保存到指定的输出文件中。
import torch
import torchvision.models as models
#加载预训练的ResNet18模型
model=models.resnet18(pretrained=True)
#将模型设置为评估模式
model.eval()
#定义输入张量,需要与模型的输入张量形状相同
input_shape=(1,3,224,224)
x=torch.randn(input_shape)
#需要指定输入张量,输出文件路径和运行设备
#默认情况下,输出张量的名称将基于模型中的名称自动分配
device=torch.device("cuda"if torch.cuda.is_available()else"cpu")
#将PyTorch模型转换为ONNX格式
output_file="resnet18.onnx"
torch.onnx.export(model,x.to(device),output_file,export_params=True)
class Model(torch.nn.Module):
def __init__(self):
super().__init__()
def forward(self,x):
x=x*x[0].item()
return x,torch.Tensor([i for i in x])
model=Model()
dummy_input=torch.rand(10)
torch.onnx.export(model,dummy_input,'a.onnx')