onnx推理报错unhashable type: 'list'
时间: 2023-10-21 20:33:42 浏览: 51
这个报错通常是由于在使用 ONNX 进行推理时,传入了一个不可哈希的列表类型。这个错误可能会出现在多个地方,比如模型输入数据的类型不正确、模型输出数据的类型不正确等等。
如果你遇到了这个问题,可以试着检查以下几个方面:
1. 检查输入数据的类型是否正确。如果输入数据是一个列表类型,那么需要确保它的元素都是可哈希的类型。如果列表中包含了不可哈希的元素,可以试着将其转换为可哈希的类型,比如将列表转换为元组。
2. 检查输出数据的类型是否正确。如果模型的输出是一个列表类型,那么需要确保它的元素都是可哈希的类型。如果列表中包含了不可哈希的元素,可以试着将其转换为可哈希的类型,比如将列表转换为元组。
3. 检查代码中是否有使用到了不可哈希的数据结构。比如字典类型就是不可哈希的类型,如果在代码中使用了字典类型,就有可能会出现这个问题。
4. 如果以上方法都无法解决问题,可以尝试升级 ONNX 的版本,或者更换其他的推理引擎进行测试。有时候这个问题可能是由 ONNX 引擎本身的 bug 导致的。
相关问题
使用onnx转换pth报错AttributeError: 'ModelProto' object has no attribute 'training'
这个错误可能是因为在转换过程中使用了不兼容的ONNX版本。在某些较旧的ONNX版本中,可能没有“training”属性。
解决方法是使用最新版本的ONNX转换器。您可以使用以下命令安装ONNX转换器的最新版本:
```
pip install onnxruntime
```
然后,使用以下命令将模型从PyTorch转换为ONNX:
```
import torch
import onnxruntime
model = YourModel()
dummy_input = torch.randn(batch_size, channels, height, width)
torch.onnx.export(model, dummy_input, "model.onnx", verbose=True)
```
最后,使用以下代码加载ONNX模型并执行推理:
```
sess = onnxruntime.InferenceSession("model.onnx")
input_name = sess.get_inputs()[0].name
output_name = sess.get_outputs()[0].name
outputs = sess.run([output_name], {input_name: input_data})[0]
```
请注意,可能需要根据您的模型进行一些调整,以便将其转换为ONNX格式。
onnx推理代码
下面是一个使用ONNX Runtime进行ONNX推理的示例代码:
```python
import onnxruntime as ort
import numpy as np
# 加载ONNX模型
model = ort.InferenceSession('model.onnx')
# 准备输入数据
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
# 进行推理
output = model.run(None, {'input': input_data})
# 输出预测结果
print(output)
```
在上面的代码中,我们首先使用 `onnxruntime.InferenceSession` 加载已经导出为 ONNX 格式的模型。然后我们准备输入数据,这里我们随机生成了一个大小为 `(1, 3, 224, 224)` 的浮点数输入数据。最后我们调用模型的 `run` 方法进行推理,并输出预测结果。需要注意的是,输入数据的格式和维度应该与模型的输入相匹配,否则会导致推理出错。