From 38322c012935b399553e5667b8bf0871292ea5e4 Mon Sep 17 00:00:00 2001 From: Tom Wildenhain Date: Mon, 14 Jun 2021 13:20:03 -0400 Subject: [PATCH] Misc fixes for adding keras2onnx tests Signed-off-by: Tom Wildenhain --- tf2onnx/onnx_opset/reduction.py | 3 +++ tf2onnx/onnx_opset/tensor.py | 3 ++- tf2onnx/rewriter/dropout_rewriter.py | 10 +++++----- tf2onnx/rewriter/random_uniform.py | 3 ++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/tf2onnx/onnx_opset/reduction.py b/tf2onnx/onnx_opset/reduction.py index 3ccae3f36..060371afc 100644 --- a/tf2onnx/onnx_opset/reduction.py +++ b/tf2onnx/onnx_opset/reduction.py @@ -120,6 +120,9 @@ def version_6(cls, ctx, node, **kwargs): reduce_dim = [reduce_dim] if ctx.opset < 11: + inp_rank = ctx.get_rank(node.input[0]) + if inp_rank is not None: + reduce_dim = [d + inp_rank if d < 0 else d for d in reduce_dim] utils.make_sure(all(i >= 0 for i in reduce_dim), "negative reduce axis is not supported in onnx for now") cast = ctx.make_node(op_type="Cast", inputs=[node.input[0]], attr={"to": onnx_pb.TensorProto.FLOAT}) diff --git a/tf2onnx/onnx_opset/tensor.py b/tf2onnx/onnx_opset/tensor.py index d17fd10d5..648fb0107 100644 --- a/tf2onnx/onnx_opset/tensor.py +++ b/tf2onnx/onnx_opset/tensor.py @@ -856,7 +856,8 @@ def version_1(cls, ctx, node, **kwargs): node = GraphBuilder(ctx).make_slice( kwargs, name=node.name, dtypes=out_dtypes, shapes=out_shapes, return_node=True) else: - node = ctx.make_node("Identity", [node.input[0]], name=node.name, dtypes=out_dtypes, shapes=out_shapes) + node = ctx.make_node("Identity", [node.input[0]], name=node.name, outputs=node.output, + dtypes=out_dtypes, shapes=out_shapes) nodes = [node] if needs_squeeze: # insert_new_node_on_output(self, op_type, output_name=None, name=None, inputs=None, domain=None, **kwargs) diff --git a/tf2onnx/rewriter/dropout_rewriter.py b/tf2onnx/rewriter/dropout_rewriter.py index 71d606430..596a9b045 100644 --- a/tf2onnx/rewriter/dropout_rewriter.py +++ b/tf2onnx/rewriter/dropout_rewriter.py @@ -62,10 +62,10 @@ def rewrite_dropout(g, ops): ratio = input3.get_tensor_value() if input2.inputs[0].is_scalar(): - data = input2.inputs[1] + data_output = input2.input[1] scaling_constant = input2.inputs[0].get_tensor_value() elif input2.inputs[1].is_scalar(): - data = input2.inputs[0] + data_output = input2.input[0] scaling_constant = input2.inputs[1].get_tensor_value() else: logger.warning("Could not find scaling constant for dropout pattern rooted at %s. " @@ -89,12 +89,12 @@ def rewrite_dropout(g, ops): out_name = utils.port_name(op_name) new_node = g.make_node( "Dropout", - inputs=[data.output[0]], + inputs=[data_output], outputs=[out_name], name=op_name, attr={"ratio": ratio}, - shapes=[g.get_shape(data.output[0])], - dtypes=[g.get_dtype(data.output[0])] + shapes=[g.get_shape(data_output)], + dtypes=[g.get_dtype(data_output)] ) g.replace_all_inputs(outputs.output[0], new_node.output[0], ops=ops) for n in nodes_to_remove: diff --git a/tf2onnx/rewriter/random_uniform.py b/tf2onnx/rewriter/random_uniform.py index 763dbfad5..335654f12 100644 --- a/tf2onnx/rewriter/random_uniform.py +++ b/tf2onnx/rewriter/random_uniform.py @@ -72,6 +72,7 @@ def create_onnx_random_uniform_op(g, tmax, tmin, ru_op, output, to_delete): dtype = g.get_dtype(output.output[0]) op_name = utils.make_name("RandomUniform") shape_node = ru_op.inputs[0] + shape_node_output = ru_op.input[0] shape = g.get_shape(output.output[0]) if shape_node.is_const(): # if the tensorflow input (aka the shape) is const we can use the RandomUniform op @@ -103,7 +104,7 @@ def create_onnx_random_uniform_op(g, tmax, tmin, ru_op, output, to_delete): to_delete.remove(shape_node) # create a fill op with the shape of the value of the input tensor zero = g.make_const(utils.make_name("zero"), np.zeros((), dtype=np.float32)) - fill_node = g.make_node("Fill", inputs=[shape_node.output[0], zero.name], + fill_node = g.make_node("Fill", inputs=[shape_node_output, zero.name], shapes=[shape], dtypes=[dtype]) func, _ = handler.tf_op.find_effective_op("Fill") func(g, fill_node)