Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_const_fold_node_is_output(self):
# need multiple optimization run
shape = (6, 6)
const_tensor = helper.make_tensor(name='const_tensor', data_type=TensorProto.FLOAT, dims=shape,
vals=np.random.randn(*shape).flatten().astype(np.float32))
node1 = helper.make_node("Constant", [], ["const"], value=const_tensor)
node2 = helper.make_node("Transpose", ["const"], ["value1"])
node3 = helper.make_node("Transpose", ["value1"], ["res"])
graph = helper.make_graph(
[node1, node2, node3],
"test_const_fold_node_is_output",
[],
[helper.make_tensor_value_info("res", TensorProto.FLOAT, shape)],
)
model_proto = self.make_model(graph, producer_name="onnx-tests")
self.run_transpose_compare(["res"], {},
model_proto, remaining_transpose_num=0)
helper.make_node("Cast", ["Z0"], ["Z"], to=TensorProto.FLOAT),
helper.make_node("Mul", ["Z", "weight"], ["W"]),
helper.make_node("Tanh", ["W"], ["W1"]),
helper.make_node("Sigmoid", ["W1"], ["W2"])
],
name="test_initializer",
inputs=[
helper.make_tensor_value_info("X", TensorProto.FLOAT, (2, 2)),
helper.make_tensor_value_info("Y", TensorProto.FLOAT, (2, 2)),
helper.make_tensor_value_info("weight", TensorProto.FLOAT, (2, 2)),
],
outputs=[
helper.make_tensor_value_info("W2", TensorProto.FLOAT, (2, 2))
],
initializer=[
helper.make_tensor("weight", TensorProto.FLOAT, [2, 2],
weight.flatten().astype(float))
])
def sigmoid(x):
return 1 / (1 + np.exp(-x))
W_ref = sigmoid(np.tanh((X + Y) * weight))
tf_rep = prepare(helper.make_model(graph_def))
output = tf_rep.run({"X": X, "Y": Y})
np.testing.assert_almost_equal(output["W2"], W_ref)
def test_constant_of_shape(self):
if defs.onnx_opset_version() < 9:
raise unittest.SkipTest(
"ONNX version {} doesn't support ConstantOfShape.".format(
defs.onnx_opset_version()))
v = helper.make_tensor("value", TensorProto.FLOAT, [1], [1])
node_def = helper.make_node("ConstantOfShape", ["X"], ["Y"], value=v)
x = np.array([4, 3, 2])
output = run_node(node_def, inputs=[x])
np.testing.assert_almost_equal(output["Y"], np.ones(x, dtype=np.float32))
v = helper.make_tensor("value", TensorProto.INT32, [1], [0])
node_def = helper.make_node("ConstantOfShape", ["X"], ["Y"], value=v)
x = np.array([10, 6])
output = run_node(node_def, inputs=[x])
np.testing.assert_almost_equal(output["Y"], np.zeros(x, dtype=np.int32))
(1, ), (value, )))
inputs = [
helper.make_tensor_value_info("input", TensorProto.FLOAT, input_dim)
]
graph = helper.make_graph(
[fill_node],
"fill_test",
inputs,
outputs=[
helper.make_tensor_value_info("output", TensorProto.FLOAT,
list(out.shape))
],
initializer=[
helper.make_tensor("input", TensorProto.INT32, (len(input_dim), ),
input_dim)
])
model = helper.make_model(graph, producer_name='fill_test')
for target, ctx in ctx_list():
tvm_out = get_tvm_output(model, [], target, ctx, out.shape)
tvm.testing.assert_allclose(out, tvm_out, rtol=1e-5, atol=1e-5)
# add Transpose(0, 3, 1, 2) and Transpose(0, 2, 3, 1) before each non_nhwc_trans_consumers
shape_unknow = [input_id for input_id, _ in non_nhwc_trans_inputs if self._g.get_shape(input_id) is None]
if shape_unknow:
if self._g.opset <= 9:
msg = "%s 's shape is unknown, ConstantOfShape will be used which exists in version 9 or higher" \
"while graph's opset version is %s" % (shape_unknow, self._g.opset)
self.logger.warning(msg)
return False
for input_id, n in non_nhwc_trans_inputs:
shape = self._g.get_shape(input_id)
# if rank of n is not 4, then we need to insert a reshape op before inserting a transpose
# for example shape of n is [x, y], then output shape of reshape will be [1, 1, x, y]
if shape is None:
const_4 = self._g.make_const(utils.make_name("const_4"), np.array([4], np.int64)).output[0]
tensor_1 = onnx.helper.make_tensor("value", onnx.TensorProto.INT64, [1], [1])
shape_node = self._g.make_node("Shape", [input_id]).output[0]
rank_node = self._g.make_node("Shape", [shape_node]).output[0]
expand_rank = self._g.make_node("Sub", [const_4, rank_node]).output[0]
array_fill_1 = self._g.make_node("ConstantOfShape", [expand_rank], attr={"value": tensor_1}).output[0]
new_shape = self._g.make_node("Concat", [array_fill_1, shape_node], attr={"axis": 0}).output[0]
reshape = self._g.make_node("Reshape", [input_id, new_shape]).output[0]
input_of_new_trans = reshape
elif len(shape) == 4:
input_of_new_trans = input_id
else:
shape_4d = shape_after_expand(shape)
if shape_4d is None:
return False
const = self._g.make_const(utils.make_name("reshape_shape"), np.array(shape_4d, np.int64)).output[0]
reshape = self._g.make_node("Reshape", [input_id, const]).output[0]
input_of_new_trans = reshape
def _create_dummy(cls, op, op_t):
"""
get a onnx node from singa dummy (constant)
Args:
op: a given operator
Args:
op_t: the tensor of the operator
Returns:
the onnx node
"""
node = cls._common_singa_tensor_to_onnx_node(op, op_t)
node.attribute.extend([helper.make_attribute(
'value', helper.make_tensor(
name=op.name,
data_type=TensorProto.FLOAT,
dims=op_t.shape,
vals=tensor.to_numpy(op_t)
.flatten()
.astype(float),
)
)])
del node.input[:]
return node
def _add_initializer_if_not_present(graph, name, value, shape, type):
'''
Helper function to add an initializer if it is not present in the graph.
parameter graph: GraphProto.
parameter name: Initializer's name.
parameter value: Initializer's value.
parameter shape: Initializer's shape.
parameter type: Initializer's type.
'''
if _find_by_name(name, graph.initializer) is None:
initializer = onnx.helper.make_tensor(name, type, shape, value)
value_info = onnx.helper.make_tensor_value_info(name, type, shape)
graph.initializer.extend([initializer])
graph.input.extend([value_info])
'GivenTensorBoolFill': (TensorProto.BOOL, 'ints'),
'GivenTensorStringFill': (TensorProto.STRING, 'strings'),
}[op.type]
except KeyError:
raise RuntimeError(
"Can not translate init_net with operator '{}' "
"to initializer".format(op.type)
)
raw = (data_type != TensorProto.STRING)
args = {a.name: a for a in op.arg}
vals = getattr(args['values'], field_name)
if raw:
vals = np.asarray(
vals,
dtype=mapping.TENSOR_TYPE_TO_NP_TYPE[data_type]).tobytes()
initializer.append(make_tensor(
name=op.output[0],
data_type=data_type,
dims=args['shape'].ints,
vals=vals,
raw=raw,
))
return initializer
B = np.array([2.0]).astype(np.float32)
# Convolution with padding. "data" represents the input data,
# which will be provided by ONNX importer unittests.
node_def = onnx.helper.make_node(
"Conv",
inputs=["data", "W", "B"],
outputs=["y"],
kernel_shape=[2, 2],
strides=[1, 1],
pads=[1, 1, 1, 1],
name="conv1",
)
weight_tensor = helper.make_tensor(
name="W", data_type=TensorProto.FLOAT, dims=(
1, 1, 2, 2), vals=W.reshape(4).tolist())
bias_tensor = helper.make_tensor(
name="B", data_type=TensorProto.FLOAT, dims=(
1,), vals=B.reshape(1).tolist())
# Create the graph (GraphProto)
graph_def = helper.make_graph(
[node_def],
"test-model",
inputs=[
helper.make_tensor_value_info("data", TensorProto.FLOAT, [1, 1, 3, 3]),
helper.make_tensor_value_info("W", TensorProto.FLOAT, [1, 1, 2, 2]),
helper.make_tensor_value_info("B", TensorProto.FLOAT, [1]),
],
outputs=[
def generate_constant(output_name, tensor_name, data_type, dims, vals):
t = onnx.helper.make_tensor(tensor_name,
data_type=data_type,
dims=dims, vals=vals)
c = onnx.helper.make_node("Constant",
[],
[output_name],
value=t)
return c