keras - 加载 onnx 模型时,ONNX 运行时抛出 TypeError
问题描述
我已将 savedModel 格式转换为 onnx 模型,但是通过 onnxruntime 加载它时
import onnxruntime as rt
sess = rt.InferenceSession('model.onnx')
它向我抛出以下错误:
onnxruntime.capi.onnxruntime_pybind11_state.InvalidGraph: [ONNXRuntimeError] : 10 : INVALID_GRAPH : Load model from /mnt/model/io_files/convert/1606801475/model.onnx failed:This is an invalid model. Type Error: Type 'tensor(float)' of input parameter (const_fold_opt__342) of operator (Slice) in node (StatefulPartitionedCall/mobilenet_1.00_224/reshape_1/strided_slice) is invalid.
我使用的 savedModel 是来自 tensorflow 网站的 Keras 预训练 MobileNet:https ://www.tensorflow.org/guide/saved_model 。
我看到 netron 中的参数是浮动的,但我无法解决和理解这个问题。
解决方案
看起来像 Keras->ONNX 转换器中的错误。
starts
Slice 的输入必须是 int32 或 int64:https ://github.com/onnx/onnx/blob/master/docs/Operators.md#Slice
您可以尝试使用onnx
Python 接口对模型进行修补:加载模型、查找节点、更改输入类型。但如果模型有这个问题,Keras->ONNX 转换器可能没有经过很好的测试,可能还有其他问题。
你能找到一个等效的 PyTorch 模型吗?PyTorch->ONNX 转换器应该会好很多。
推荐阅读
- java - java内部私有类中的getter setter
- javascript - jQuery:查找 div 中的所有表并重置类和属性
- vb.net - 返回错误值的简单 if 语句逻辑
- sql - 如何插入一行并附加在行号上以强制唯一性?
- typescript - 如何使用 Jest 和 TypeScript 模拟第三方 nodejs 模块功能?
- hibernate - Spring Data JPA 多对多,带有额外的用户和角色列
- highcharts - 根据数据更改国家/地区的背景颜色
- angular - 单击图标/按钮时如何从表中删除单行
- r - 根据变量的属性替换所有负值,与类型无关
- python - 字典中每个键、值的调用函数