diff --git a/x2paddle/decoder/tf_decoder.py b/x2paddle/decoder/tf_decoder.py index b00c8a71218d4abc7df93f8dc43ba7550d487b4c..dc64b43691f300c1b22e8af448cf1601b5c9058e 100644 --- a/x2paddle/decoder/tf_decoder.py +++ b/x2paddle/decoder/tf_decoder.py @@ -58,7 +58,7 @@ class TFGraphNode(GraphNode): @property def dtype(self): - keys = ['dtype', 'T', 'DstT'] + keys = ['dtype', 'T', 'DstT', 'Tparams'] for k in keys: dtype = self.layer.attr[k].type if dtype > 0: @@ -109,6 +109,8 @@ class TFGraphNode(GraphNode): attr = self.layer.attr[name] field = attr.WhichOneof('value') value = getattr(attr, field) if field else None + if name == "squeeze_dims" and not value.ListFields(): + return None if isinstance(value, attr_value_pb2.AttrValue.ListValue): result = list(value.ListFields()[0][1]) @@ -466,7 +468,10 @@ class TFDecoder(object): ":0") if shape.count(-1) > 0: shape[shape.index(-1)] = b - feed[input_tensor] = numpy.random.random_sample(shape) + if dtype == 3: + feed[input_tensor] = numpy.random.randint(1, 10, size=shape) + else: + feed[input_tensor] = numpy.random.random_sample(shape) output_tensor = self.sess.graph.get_tensor_by_name(tensor_name) if use_diff_inputs: results.append( diff --git a/x2paddle/op_mapper/tf2paddle/tf_op_mapper.py b/x2paddle/op_mapper/tf2paddle/tf_op_mapper.py index f89c2201c33e41d2326b7d82fe750f1d7c5cc1c9..819c5e5457e93f9daf0807823a48cf7666077962 100644 --- a/x2paddle/op_mapper/tf2paddle/tf_op_mapper.py +++ b/x2paddle/op_mapper/tf2paddle/tf_op_mapper.py @@ -680,11 +680,14 @@ class TFOpMapper(): def Squeeze(self, node): input = self.graph.get_input_node(node, 0) squeeze_dims = node.get_attr('squeeze_dims') + axis = node.get_attr('axis') + if squeeze_dims != None and axis == None: + axis = squeeze_dims self.paddle_graph.add_layer( kernel="paddle.squeeze", inputs={"x": input.name}, outputs=[node.name], - axis=squeeze_dims) + axis=axis) def Shape(self, node): input = self.graph.get_input_node(node, 0) @@ -1519,8 +1522,18 @@ class TFOpMapper(): attr['axis'] = dim else: inputs['axis'] = y.name - self.paddle_graph.add_layer( - "paddle.unsqueeze", inputs=inputs, outputs=[node.name], **attr) + if len(x.out_shapes[0]) == 0: + value = self.decoder.infer_tensor(x, use_diff_inputs=False).tolist() + self.paddle_graph.add_layer( + "paddle.full", + inputs={}, + outputs=[node.name], + dtype=string(x.dtype), + shape=[1], + fill_value=value) + else: + self.paddle_graph.add_layer( + "paddle.unsqueeze", inputs=inputs, outputs=[node.name], **attr) def ReverseV2(self, node): x = self.graph.get_input_node(node, 0) @@ -1646,3 +1659,26 @@ class TFOpMapper(): inputs={"x": transpose_name}, outputs=[node.name], shape=shape) + + def Sign(self, node): + x = self.graph.get_input_node(node, 0) + support_list = ["float16", "float32", "float64"] + if x.dtype not in support_list: + self.paddle_graph.add_layer( + "paddle.cast", + inputs={"x": x.name}, + outputs=[node.name], + dtype=string("float32")) + self.paddle_graph.add_layer( + kernel="paddle.sign", + inputs={"x": node.name}, + outputs=[node.name]) + self.paddle_graph.add_layer( + "paddle.cast", + inputs={"x": node.name}, + outputs=[node.name], + dtype=string(x.dtype)) + else: + self.paddle_graph.add_layer( + kernel="paddle.sign", inputs={"x": x.name}, + outputs=[node.name])