PyTorch转ONNX后ONNXRuntime加载提示LeakyRelu未实现问题咨询
问题原因
你遇到的报错本质不是ONNXRuntime不支持LeakyRelu算子,而是不支持双精度(DOUBLE/float64)类型输入的LeakyRelu算子实现。从你打印的计算图可以看到,所有张量、权重的类型都是DOUBLE,而ONNXRuntime官方默认提供的LeakyRelu算子内核仅支持float32、float16等常用推理精度,没有覆盖float64的场景。
解决方案
- 方案1:移除代码中的
torch.set_default_dtype(torch.float64)配置,使用默认的float32精度导出模型。绝大多数深度学习推理场景下float32的精度完全满足需求,也可以完美适配ONNXRuntime的算子支持,改完后重新导出ONNX即可正常加载运行。 - 方案2:如果业务确实必须使用float64精度,可以在导出ONNX前手动替换模型中的LeakyRelu层,用基础运算组合实现等价逻辑:
替换后再导出ONNX,生成的计算图会用通用的四则运算和比较算子代替LeakyRelu,这些算子都有float64的实现。class CustomLeakyRelu(torch.nn.Module): def __init__(self, alpha=0.01): super().__init__() self.alpha = alpha def forward(self, x): return torch.max(x, torch.zeros_like(x)) + self.alpha * torch.min(x, torch.zeros_like(x)) - 方案3:导出ONNX时指定稳定的Opset版本,比如在
torch.onnx.export中添加参数opset_version=13,避免高版本Opset的兼容问题。
内容的提问来源于stack exchange,提问作者ywan459
相关产品推荐
相关产品推荐

