[ONNXRuntimeError] :6 : RUNTIME_EXCEPTION : Non-zero status code returned while running Reshape node

onnx模型运行时遇到Reshape节点报错如下:

很明显这个是reshape操作的错误,在pytorch中转成onnx对应是Reshape节点的是view()、transpose()等方法,用Netron可视化onnx模型定位到问题节点,然后找到问题节点在源代码中的位置,复现这个报错代码如下:

1
2
3
4
5
import torch

a=torch.randn(250, 1, 1) # a.size=(250, 1, 1)
b=a.transpose(0,2).view(1,1,10, 25)  # 把a维度变换成1,1,250,然后view成四维的1,1,10,25
b.size()=1,1,10,25

就是在变换维度的时候导致onnx模型报错,解决方法是不要用view()将tensor直接扩展为4维tensor,还是保持三维的然后使用unsqueeze(),代码修改如下:

1
2
3
4
5
6
import torch

a=torch.randn(250, 1, 1) # a.size=(250, 1, 1)
b=a.transpose(0,2).view(1,10,25).unsqueeze(0)
#把a维度变换成1,1,250,然后view成四维的1,1,10,25
b.size()=1,1,10,25