kneron_model_converter/libs/kneronnxopt/UnitTest/gen_opset11_update_test.py
2026-01-28 06:16:04 +00:00

242 lines
4.4 KiB
Python

import onnx
import onnx.helper
import numpy as np
# Make inputs and outputs
input_value = onnx.helper.make_tensor_value_info(
'input',
onnx.TensorProto.FLOAT,
(1, 8, 32, 32)
)
output_value = onnx.helper.make_tensor_value_info(
'output',
onnx.TensorProto.FLOAT,
(1, 8, 30, 30)
)
nodes = []
# Make a MaxPool node.
MP_node = onnx.helper.make_node(
'MaxPool',
['input'],
['output'],
name='MP0',
kernel_shape = [3, 3]
)
nodes.append(MP_node)
# Make an ArgMax node.
ArgMax_node = onnx.helper.make_node(
'ArgMax',
['input'],
['AM0'],
name='argMax0'
)
nodes.append(ArgMax_node)
# Make a Dropout node.
Dropout_node = onnx.helper.make_node(
'Dropout',
['input'],
['Dropout0'],
name='Dropout0',
ratio=0.1
)
nodes.append(Dropout_node)
# Make an GatherND node.
indices_node0 = onnx.helper.make_node(
'Constant',
[],
['indices0'],
name='indices0',
value=onnx.helper.make_tensor(
name='indices0',
data_type=onnx.TensorProto.INT64,
dims=[4, 3],
vals=np.array([[0, 1, 2],[0, 2, 3],[0, 1, 4],[0, 2, 5]])
)
)
nodes.append(indices_node0)
GND_node = onnx.helper.make_node(
'GatherND',
['Dropout0', 'indices0'],
['GND0'],
name='GND0'
)
nodes.append(GND_node)
# Make a Cast node.
Cast_node0 = onnx.helper.make_node(
'Cast',
['GND0'],
['cast0'],
name='Cast0',
to=onnx.TensorProto.INT32
)
nodes.append(Cast_node0)
# Make an DequantizeLinear node.
scale_node0 = onnx.helper.make_node(
'Constant',
[],
['scale0'],
name='scale0',
value=onnx.helper.make_tensor(
name='scale0',
data_type=onnx.TensorProto.FLOAT,
dims=[1],
vals=[1]
)
)
nodes.append(scale_node0)
DL_node = onnx.helper.make_node(
'DequantizeLinear',
['cast0', 'scale0'],
['DL0'],
name='DL0'
)
nodes.append(DL_node)
# Make a LogSoftmax node.
LSM_node0 = onnx.helper.make_node(
'LogSoftmax',
['Dropout0'],
['LSM0'],
name='LSM0'
)
nodes.append(LSM_node0)
# Make a QuantizeLinear node.
scale_node1 = onnx.helper.make_node(
'Constant',
[],
['scale1'],
name='scale1',
value=onnx.helper.make_tensor(
name='scale1',
data_type=onnx.TensorProto.FLOAT,
dims=[1],
vals=[2]
)
)
nodes.append(scale_node1)
QL_node0 = onnx.helper.make_node(
'QuantizeLinear',
['LSM0', 'scale1'],
['QL0'],
name='QL0'
)
nodes.append(QL_node0)
# Make a ReduceSum node.
RS_node0 = onnx.helper.make_node(
'ReduceSum',
['LSM0'],
['RS0'],
name='RS0',
axes=[1]
)
nodes.append(RS_node0)
# Make a Softmax node.
SM_node0 = onnx.helper.make_node(
'Softmax',
['RS0'],
['SM0'],
name='SM0'
)
nodes.append(SM_node0)
# Make a Split node.
Split_node0 = onnx.helper.make_node(
'Split',
['SM0'],
['Split00', 'Split01'],
name='Split0',
axis=2
)
nodes.append(Split_node0)
# Make a Squeeze node.
Squeeze_node0 = onnx.helper.make_node(
'Squeeze',
['Split00'],
['Squeeze0'],
name='Squeeze0',
axes=[1]
)
nodes.append(Squeeze_node0)
# Make a Squeeze node.
Squeeze_node1 = onnx.helper.make_node(
'Squeeze',
['Split01'],
['Squeeze1'],
name='Squeeze1'
)
nodes.append(Squeeze_node1)
# Make a Squeeze node.
Unsqueeze_node1 = onnx.helper.make_node(
'Unsqueeze',
['Squeeze0'],
['Unsqueeze1'],
name='Unsqueeze1',
axes=[1]
)
nodes.append(Unsqueeze_node1)
# Make a Resize node.
scale_node2 = onnx.helper.make_node(
'Constant',
[],
['scale2'],
name='scale2',
value=onnx.helper.make_tensor(
name='scale2',
data_type=onnx.TensorProto.FLOAT,
dims=[4],
vals=[2, 1, 1, 1]
)
)
nodes.append(scale_node2)
roi_node0 = onnx.helper.make_node(
'Constant',
[],
['roi0'],
name='roi0',
value=onnx.helper.make_tensor(
name='roi0',
data_type=onnx.TensorProto.FLOAT,
dims=[8],
vals=[0, 0, 0, 0, 1, 1, 1, 1]
)
)
nodes.append(roi_node0)
Resize_node0 = onnx.helper.make_node(
'Resize',
['QL0', 'roi0', 'scale2'],
['Resize0'],
name='Resize0',
coordinate_transformation_mode="tf_half_pixel_for_nn"
)
nodes.append(Resize_node0)
# Make model.
graph_def = onnx.helper.make_graph(
nodes,
'test-model',
[input_value],
[output_value]
)
model_def = onnx.helper.make_model(graph_def, producer_name='onnx-example', opset_imports=[onnx.helper.make_opsetid("", 11)])
onnx.save(model_def, 'update_test.onnx')