未验证 提交 62c6e875 编写于 作者: J Jason 提交者: GitHub

Merge pull request #485 from SunAhong1993/tf

更新tf Pad相关op
...@@ -642,27 +642,6 @@ class TFOpMapper(OpMapper): ...@@ -642,27 +642,6 @@ class TFOpMapper(OpMapper):
assert paddings.layer_type == "Const", "Padding should be Const" assert paddings.layer_type == "Const", "Padding should be Const"
paddings = paddings.value.flatten().tolist() paddings = paddings.value.flatten().tolist()
if len(input.out_shapes[0]) == 4:
if paddings[0] + paddings[1] + paddings[6] + paddings[7] == 0:
new_padding = paddings[2:6]
transpose_name = gen_name("pad", "transpose")
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": input.name},
outputs=[transpose_name],
perm=[0, 3, 1, 2])
self.paddle_graph.add_layer(
kernel="paddle.nn.functional.pad",
inputs={"x": transpose_name},
outputs=[node.name],
pad=new_padding)
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": node.name},
outputs=[node.name],
perm=[0, 2, 3, 1])
return
self.paddle_graph.add_layer( self.paddle_graph.add_layer(
kernel="paddle.nn.functional.pad", kernel="paddle.nn.functional.pad",
inputs={"x": input.name}, inputs={"x": input.name},
...@@ -670,31 +649,11 @@ class TFOpMapper(OpMapper): ...@@ -670,31 +649,11 @@ class TFOpMapper(OpMapper):
pad=paddings) pad=paddings)
def MirrorPad(self, node): def MirrorPad(self, node):
op_name = name_generator("pad", self.nn_name2id) self.Pad(node)
output_name = node.name
layer_outputs = [op_name, output_name]
input = self.graph.get_input_node(node, 0)
paddings = self.graph.get_input_node(node, 1)
assert paddings.layer_type == "Const", "Padding should be Const"
new_paddings = numpy.flip(paddings.value, 0).flatten().tolist()
dim = int(len(new_paddings) / 2)
transpose_name = gen_name("pad", "transpose")
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": input.name},
outputs=[transpose_name],
perm=[0, 3, 1, 2])
self.paddle_graph.add_layer(
kernel="paddle.nn.Pad{}D".format(dim),
inputs={"x": transpose_name},
outputs=layer_outputs,
pad=new_paddings)
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": node.name},
outputs=[node.name],
perm=[0, 2, 3, 1])
def PadV2(self, node):
self.Pad(node)
def Squeeze(self, node): def Squeeze(self, node):
input = self.graph.get_input_node(node, 0) input = self.graph.get_input_node(node, 0)
......
...@@ -625,32 +625,11 @@ class TFOpMapper(OpMapper): ...@@ -625,32 +625,11 @@ class TFOpMapper(OpMapper):
shape=out_shape.tolist()) shape=out_shape.tolist())
def Pad(self, node): def Pad(self, node):
input = self.graph.get_node(node.layer.input[0]) input = self.graph.get_input_node(node, 0)
paddings = self.graph.get_node(node.layer.input[1]) paddings = self.graph.get_input_node(node, 1)
assert paddings.layer_type == "Const", "Padding should be Const" assert paddings.layer_type == "Const", "Padding should be Const"
paddings = paddings.value.flatten().tolist() paddings = paddings.value.flatten().tolist()
if len(input.out_shapes[0]) == 4:
if paddings[0] + paddings[1] + paddings[6] + paddings[7] == 0:
new_padding = paddings[2:6]
transpose_name = gen_name("pad", "transpose")
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": input.name},
outputs=[transpose_name],
perm=[0, 3, 1, 2])
self.paddle_graph.add_layer(
kernel="paddle.nn.functional.pad",
inputs={"x": transpose_name},
outputs=[node.name],
pad=new_padding)
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": node.name},
outputs=[node.name],
perm=[0, 2, 3, 1])
return
self.paddle_graph.add_layer( self.paddle_graph.add_layer(
kernel="paddle.nn.functional.pad", kernel="paddle.nn.functional.pad",
inputs={"x": input.name}, inputs={"x": input.name},
...@@ -658,26 +637,11 @@ class TFOpMapper(OpMapper): ...@@ -658,26 +637,11 @@ class TFOpMapper(OpMapper):
pad=paddings) pad=paddings)
def MirrorPad(self, node): def MirrorPad(self, node):
input = self.graph.get_input_node(node, 0) self.Pad(node)
paddings = self.graph.get_input_node(node, 1)
assert paddings.layer_type == "Const", "Padding should be Const"
new_paddings = numpy.flip(paddings.value, 0).flatten().tolist() def PadV2(self, node):
transpose_name = gen_name("pad", "transpose") self.Pad(node)
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": input.name},
outputs=[transpose_name],
perm=[0, 3, 1, 2])
self.paddle_graph.add_layer(
kernel="paddle.nn.functional.pad".format(dim),
inputs={"x": transpose_name},
outputs=[node.name],
pad=new_paddings)
self.paddle_graph.add_layer(
kernel="paddle.transpose",
inputs={"x": node.name},
outputs=[node.name],
perm=[0, 2, 3, 1])
def Squeeze(self, node): def Squeeze(self, node):
input = self.graph.get_input_node(node, 0) input = self.graph.get_input_node(node, 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册