Hi all,

I’m getting the following error while parsing the onnx model. Do I have to implement those operators, or is there something I’m missing?

# [Error] [ONNX] Relay.frontend.from_onnx

Some operators you mention is not implemented currently, and you can check the current supported operators from frontend/onnx.py

Hi @cchung100m

Can you suggest what should I do? I should write all those operators in that frontend/onnx.py which are not present?

You could read the frontend/onnx.py and try to understand how the other contributors implement ops, after this, you could start to implement.

Hi @zacario-li

I’ve added your code in the file and build the TVM, but again I’m still getting the same error.

I add the implementation of ‘Not’ operator for frontend/onnx.py, would you please help to verify the patch?(still under reviewed)

many thanks,

Hi, @cchung100m I’ve copied your code to frontend/onnx.py and build it again. I’m still getting the same error. Can you tell how did you test?

It is normal that you will still get the OpNotImplemented error because I only make a patch for ‘Not’ operator.

Hi @cchung100m , @zacario-li ,

I just implemented a patch for the ConstantOfShape operator. How do we check if it is working or not?

refer this:

`tests/python/frontend/onnx/test_forward.py`

Please help add the test cases for ConstantOfShape operator in `tests/python/frontend/onnx/test_forward.py`

and submit a PR, thanks.

@cchung100m @zacario-li, I tried for ConstantOfShape operator and the model looks like this

and when I execute it using the test_forward.py code, I’m getting the following error:

.

What should I do?

From your error, your input data ‘x’ may have some mistake.

Hi, I am also thinking of the same thing,

def test_ConstantOfShape():

```
x = np.array([4, 3, 2]).astype(np.int64)
tensor_value = onnx.helper.make_tensor("value", onnx.TensorProto.FLOAT,
[1], [1])
y = np.ones(x, dtype=np.int64)
ref_node = onnx.helper.make_node(
'ConstantOfShape',
inputs=['x'],
outputs=['y'],
value=tensor_value,
)
graph = helper.make_graph([ref_node],
"ConstantOfShape_test",
inputs =[helper.make_tensor_value_info("x",TensorProto.FLOAT, list(x.shape))],
outputs =[helper.make_tensor_value_info("y",TensorProto.FLOAT, list(y.shape))])
model = helper.make_model(graph, producer_name='ConstantOfShape_test')
for target, ctx in ctx_list():
x = np.random.uniform(size=[4, 3, 2]).astype('float32')
tvm_out = get_tvm_output(model, x, target, ctx,[4, 3, 2], 'float32')
tvm.testing.assert_allclose(y.shape, tvm_out.shape)
```

Can you tell what the error in the input is?

Your first input x is x = np.array([4, 3, 2]).astype(np.int64), it is a array([4, 3, 2]) ; your second input x = np.random.uniform(size=[4, 3, 2]).astype(‘float32’)，x.shape = (4, 3, 2). You can have a check.

```
x = np.array([4, 3, 2]).astype(np.int64)
tensor_value = onnx.helper.make_tensor("value", onnx.TensorProto.FLOAT,
[1], [1])
y = np.ones(x, dtype=np.int64)
ref_node = onnx.helper.make_node(
'ConstantOfShape',
inputs=['x'],
outputs=['y'],
value=tensor_value,
)
graph = helper.make_graph([ref_node],
"ConstantOfShape_test",
inputs =[helper.make_tensor_value_info("x",TensorProto.FLOAT, list(x.shape))],
outputs =[helper.make_tensor_value_info("y",TensorProto.FLOAT, list(y.shape))])
model = helper.make_model(graph, producer_name='ConstantOfShape_test')
for target, ctx in ctx_list():
tvm_out = get_tvm_output(model, x, target, ctx,[4, 3, 2], 'float32')
tvm.testing.assert_allclose(y.shape, tvm_out.shape)
```

and

inputs=[‘x’], the ‘x’ may change to ‘T1’ , there is a code like:

```
graph = helper.make_graph([y],
'squeeze_test',
inputs = [helper.make_tensor_value_info("in",
TensorProto.FLOAT, list(in_shape))],
outputs = [helper.make_tensor_value_info("out",
TensorProto.FLOAT, list(out_shape))])
```

the ‘in’ and ‘out’ are the same to your op registered input and output name.

You can have a try.

Good luck!