提交 52c6ea75 编写于 作者: S SunAhong1993

modify optimizer

上级 c5f36434
...@@ -128,10 +128,30 @@ class PaddleGraph(object): ...@@ -128,10 +128,30 @@ class PaddleGraph(object):
for output in layer.outputs: for output in layer.outputs:
outputs_from_nodes[output] = layer_id outputs_from_nodes[output] = layer_id
# 将block的输出用于父图
if inputs is not None and outputs is not None and set(
layer.outputs).issubset(outputs):
if layer_id not in self.edges_out:
self.edges_out[layer_id] = list()
self.edges_out[layer_id].append(-1)
# 处理子图
if len(layer.blocks) > 0: if len(layer.blocks) > 0:
for block in layer.blocks: for block in layer.blocks:
block.build(layer.inputs, layer.outputs) block.build(layer.inputs, layer.outputs)
# 删除不必要的节点
invalid_list = list()
for layer_id, layer in self.layers.items():
if len(self.layers) > 1:
if self.edges_in.get(layer_id, 0) == 0 and self.edges_out.get(
layer_id, 0) == 0 and layer.kernel != "prim.assert" \
and layer.kernel != "prim.exception" \
and layer.kernel != "prim.warnings":
invalid_list.append(layer_id)
for layer_id in invalid_list:
self.layers.pop(layer_id)
if self.graph_type == "dygraph": if self.graph_type == "dygraph":
self.get_dygraph_inputs() self.get_dygraph_inputs()
if len(self.outputs) == 0: if len(self.outputs) == 0:
...@@ -244,7 +264,8 @@ class PaddleGraph(object): ...@@ -244,7 +264,8 @@ class PaddleGraph(object):
else: else:
self.gen_dygraph_code(save_dir) self.gen_dygraph_code(save_dir)
self.dump_dygraph_parameter(save_dir) self.dump_dygraph_parameter(save_dir)
self.dygraph2static(save_dir, input_shapes) #[[None, 3, 224, 224]]
# self.dygraph2static(save_dir, input_shapes) #[[None, 3, 224, 224]]
def dump_parameter(self, param_name, param, save_dir): def dump_parameter(self, param_name, param, save_dir):
if not os.path.exists(save_dir): if not os.path.exists(save_dir):
...@@ -367,13 +388,8 @@ class PaddleGraph(object): ...@@ -367,13 +388,8 @@ class PaddleGraph(object):
gen_head() gen_head()
for layer_id, layer in self.layers.items(): for layer_id, layer in self.layers.items():
if len(self.layers) > 1: if ("paddle.nn" in layer.kernel and "functional" not in layer.kernel
if self.edges_in.get(layer_id, 0) == 0 and self.edges_out.get( ) or layer.kernel == "fluid.dygraph.base.to_variable":
layer_id, 0) == 0 and layer.kernel != "prim.assert" \
and layer.kernel != "prim.exception" \
and layer.kernel != "prim.warnings":
continue
if "paddle.nn" in layer.kernel or layer.kernel == "fluid.dygraph.base.to_variable":
line = "{}".format( line = "{}".format(
layer.outputs[0] layer.outputs[0]
) if layer.kernel == "fluid.dygraph.base.to_variable" and not layer.attrs[ ) if layer.kernel == "fluid.dygraph.base.to_variable" and not layer.attrs[
......
...@@ -3229,17 +3229,35 @@ def aten_upsample_bilinear2d(mapper, graph, node): ...@@ -3229,17 +3229,35 @@ def aten_upsample_bilinear2d(mapper, graph, node):
current_outputs = [output_name] current_outputs = [output_name]
# 处理输入0,即%x.13 # 处理输入0,即%x.13
mapper._check_input(graph, inputs_node[0], inputs_name[0], current_outputs) mapper._check_input(graph, inputs_node[0], inputs_name[0], current_outputs)
layer_inputs["input"] = inputs_name[0] layer_inputs["x"] = inputs_name[0]
# 获取当前节点输入的list # 获取当前节点输入的list
current_inputs = list(layer_inputs.values()) current_inputs = list(layer_inputs.values())
# 处理输入1,即%4963 # 处理输入1,即%4963
if inputs_name[1] in mapper.attrs: if inputs_name[1] in mapper.attrs:
layer_attrs["out_shape"] = mapper.attrs[inputs_name[1]] layer_attrs["size"] = mapper.attrs[inputs_name[1]]
else: else:
mapper._check_input(graph, inputs_node[1], inputs_name[1], mapper._check_input(graph, inputs_node[1], inputs_name[1],
current_outputs) current_outputs)
layer_inputs["out_shape"] = inputs_name[1] layer_inputs["size"] = inputs_name[1]
current_inputs.append(inputs_name[1]) current_inputs.append(inputs_name[1])
graph.add_layer(
"prim.isinstance",
inputs={"input": inputs_name[1]},
outputs=[inputs_name[1] + "_isinstance"],
cls="paddle.fluid.Variable")
graph.add_layer(
"prim.if", {"input": inputs_name[1] + "_isinstance"},
outputs=[inputs_name[0] + "_if1"])
if_layer = graph.layers[list(graph.layers.keys())[-1]]
block = PaddleGraph(if_layer, graph_type="dygraph")
block.add_layer(
"prim.var2list",
inputs={"input": inputs_name[1]},
outputs=[inputs_name[1]])
if_layer.add_block(block)
block = PaddleGraph(if_layer, graph_type="dygraph")
if_layer.add_block(block)
if_layer.inputs["input-0"] = inputs_name[1]
# 处理输入2,即%5421 # 处理输入2,即%5421
if inputs_name[2] in mapper.attrs: if inputs_name[2] in mapper.attrs:
layer_attrs["align_corners"] = mapper.attrs[inputs_name[2]] layer_attrs["align_corners"] = mapper.attrs[inputs_name[2]]
...@@ -3261,10 +3279,10 @@ def aten_upsample_bilinear2d(mapper, graph, node): ...@@ -3261,10 +3279,10 @@ def aten_upsample_bilinear2d(mapper, graph, node):
inputs=list_layer_inputs, inputs=list_layer_inputs,
outputs=[output_name + "_assert"], outputs=[output_name + "_assert"],
type="eq") type="eq")
layer_inputs["scale"] = inputs_name[3] layer_inputs["scale_factor"] = inputs_name[3]
layer_attrs["align_mode"] = 0 layer_attrs["align_mode"] = 0
graph.add_layer( graph.add_layer(
"fluid.layers.interpolate", "paddle.nn.functional.interpolate",
inputs=layer_inputs, inputs=layer_inputs,
outputs=layer_outputs, outputs=layer_outputs,
**layer_attrs) **layer_attrs)
......
...@@ -442,7 +442,8 @@ def prim_shape(mapper, graph, node): ...@@ -442,7 +442,8 @@ def prim_shape(mapper, graph, node):
# 获取当前节点输入的list # 获取当前节点输入的list
current_inputs = list(layer_inputs.values()) current_inputs = list(layer_inputs.values())
graph.add_layer("prim.shape", inputs=layer_inputs, outputs=layer_outputs) graph.add_layer(
"fluid.layers.shape", inputs=layer_inputs, outputs=layer_outputs)
return current_inputs, current_outputs return current_inputs, current_outputs
......
...@@ -172,10 +172,11 @@ def prim_if(layer, indent=1, init_func=[], forward_func=[]): ...@@ -172,10 +172,11 @@ def prim_if(layer, indent=1, init_func=[], forward_func=[]):
forward_func.extend(b_forward_lines) forward_func.extend(b_forward_lines)
block = layer.blocks[1] block = layer.blocks[1]
if len(block.layers) > 0: if len(block.layers) > 0:
line = "else:"
forward_func.extend(gen_codes([line], indent=indent))
b_init_lines, b_forward_lines = block.gen_dygraph_code( b_init_lines, b_forward_lines = block.gen_dygraph_code(
indent=indent + 1) indent=indent + 1)
if len(b_forward_lines) != 0:
line = "else:"
forward_func.extend(gen_codes([line], indent=indent))
init_func.extend(b_init_lines) init_func.extend(b_init_lines)
forward_func.extend(b_forward_lines) forward_func.extend(b_forward_lines)
...@@ -191,6 +192,13 @@ def prim_is(layer, indent=1, init_func=[], forward_func=[]): ...@@ -191,6 +192,13 @@ def prim_is(layer, indent=1, init_func=[], forward_func=[]):
forward_func.extend(gen_codes([line], indent=indent)) forward_func.extend(gen_codes([line], indent=indent))
def prim_isinstance(layer, indent=1, init_func=[], forward_func=[]):
line = "{} = isinstance({}, {})".format(layer.outputs[0],
get_value(layer, "input"),
layer.attrs["cls"])
forward_func.extend(gen_codes([line], indent=indent))
def prim_isnot(layer, indent=1, init_func=[], forward_func=[]): def prim_isnot(layer, indent=1, init_func=[], forward_func=[]):
line = "{} = {} is not {}".format(layer.outputs[0], line = "{} = {} is not {}".format(layer.outputs[0],
get_value(layer, "x"), get_value(layer, "x"),
...@@ -370,6 +378,12 @@ def prim_type(layer, indent=1, init_func=[], forward_func=[]): ...@@ -370,6 +378,12 @@ def prim_type(layer, indent=1, init_func=[], forward_func=[]):
forward_func.extend(gen_codes([line], indent=indent)) forward_func.extend(gen_codes([line], indent=indent))
def prim_var2list(layer, indent=1, init_func=[], forward_func=[]):
line = "{} = {}.numpy().tolist()".format(layer.outputs[0],
get_value(layer, "input"))
forward_func.extend(gen_codes([line], indent=indent))
def prim_warnings(layer, indent=1, init_func=[], forward_func=[]): def prim_warnings(layer, indent=1, init_func=[], forward_func=[]):
lines = ["import warnings"] lines = ["import warnings"]
line = "warnings.warn({}, stacklevel={})".format( line = "warnings.warn({}, stacklevel={})".format(
......
...@@ -81,6 +81,7 @@ class PyTorchOpMapper(OpMapper): ...@@ -81,6 +81,7 @@ class PyTorchOpMapper(OpMapper):
node = ivalue.node() node = ivalue.node()
if str(ivalue.type()) != "Tensor": if str(ivalue.type()) != "Tensor":
graph.set_name(str(ivalue.type()).split(".")[-1]) graph.set_name(str(ivalue.type()).split(".")[-1])
continue
inputs, outputs = self.data(graph, node, ivalue.unique()) inputs, outputs = self.data(graph, node, ivalue.unique())
# 转换中间节点 # 转换中间节点
for node in script_graph.nodes(): for node in script_graph.nodes():
......
...@@ -25,215 +25,122 @@ class BatchNorm2dFuser(FuseBase): ...@@ -25,215 +25,122 @@ class BatchNorm2dFuser(FuseBase):
def build_pattern(self): def build_pattern(self):
""" 描述需要替换的batchnorm2d图结构。 """ 描述需要替换的batchnorm2d图结构。
batchnorm2d层模式python实现代码示例: batchnorm2d层模式python实现代码示例:
x2214 = fluid.layers.shape(x2207) x336 = fluid.layers.shape(input=x334)
x2214 = len(x2214) x336 = len(x336)
x2215 = x2214 != x2213 x337 = x336 != 4
if x2215 : if x337 :
raise RaiseException(x2212) raise RaiseException('Exception')
if x2218 : if False :
x2220 = self.x2220 x351 = fluid.layers.shape(input=x334)
x2221 = x2220 + x2209 x352 = x351[0]
self.x2220 = x2221 x353 = len(x351)
x2227 = False x354 = x353 - 2
if x2227 : x357 = x352
x2230 = fluid.layers.shape(x2207.shape) for _x356 in range(x354):
x2231 = 'Exception' x358 = _x356 + 2
x2236 = x2230[x2233] x359 = x351[x358]
x2237 = len(x2230) x360 = x357 * x359
x2238 = x2237 - x2234 x355 = x360
x2241 = x2236 x361 = x355 == 1
for _x2240 in range(x2238): if x361 :
x2242 = _x2240 + x2234 raise RaiseException('Exception')
x2243 = x2230[x2242] x364 = self.batchnorm7(x334)
x2244 = x2241 * x2243
x2239 = x2244
x2245 = x2239 == x2235
if x2245 :
raise RaiseException(x2231)
x2248 = self.batchnorm41(x2207)
""" """
def gen_name(id): def gen_name(id):
return "x" + str(id) return "x" + str(id)
# self.pattern.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(0)], value=1)
# self.pattern.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(1)], value=0.1)
# self.pattern.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(2)], value=0.001)
# self.pattern.add_layer(
# "prim.constant",
# inputs={},
# outputs=[gen_name(3)],
# value="Exception")
# self.pattern.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(4)], value=4)
self.pattern.add_layer( self.pattern.add_layer(
"fluid.layers.shape", "fluid.layers.shape",
inputs={'input': "bn-input-0"}, inputs={'input': "bn-input-0"},
outputs=[gen_name(5)]) outputs=[gen_name(0)])
self.pattern.add_layer( self.pattern.add_layer(
"prim.len", inputs={'input': gen_name(5)}, outputs=[gen_name(5)]) "prim.len", inputs={'input': gen_name(0)}, outputs=[gen_name(0)])
self.pattern.add_layer( self.pattern.add_layer(
"prim.ne", "prim.ne", inputs={"x": gen_name(0)}, outputs=[gen_name(1)], y=4)
inputs={"x": gen_name(5), self.pattern.add_layer("prim.if", {'input': gen_name(1)}, [gen_name(2)])
"y": "bn-input-9"},
outputs=[gen_name(6)])
self.pattern.add_layer("prim.if", {'input': gen_name(6)}, [gen_name(7)])
if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[-1]] if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[-1]]
pattern_block0 = PaddleGraph(if_layer1, graph_type="dygraph") pattern_block0 = PaddleGraph(if_layer1, graph_type="dygraph")
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.exception", "prim.exception",
inputs={"input": "bn-input-1"}, inputs={},
outputs=[gen_name(8)]) outputs=[gen_name(3)],
if_layer1.inputs["input-0"] = "bn-input-1" input="Exception")
if_layer1.add_block(pattern_block0) if_layer1.add_block(pattern_block0)
pattern_block1 = PaddleGraph(if_layer1, graph_type="dygraph") pattern_block1 = PaddleGraph(if_layer1, graph_type="dygraph")
if_layer1.add_block(pattern_block1) if_layer1.add_block(pattern_block1)
# self.pattern.add_layer( self.pattern.add_layer("prim.if", {}, [gen_name(4)], input=False)
# "prim.constant", inputs={}, outputs=[gen_name(9)], value=False)
self.pattern.add_layer("prim.if", {'input': "bn-input-2"},
[gen_name(10)])
if_layer2 = self.pattern.layers[list(self.pattern.layers.keys())[-1]] if_layer2 = self.pattern.layers[list(self.pattern.layers.keys())[-1]]
pattern_block0 = PaddleGraph(if_layer2, graph_type="dygraph") pattern_block0 = PaddleGraph(if_layer2, graph_type="dygraph")
pattern_block0.add_layer(
"fluid.dygraph.base.to_variable",
inputs={},
outputs=[gen_name(11)],
value="params[{}]".format(string(gen_name(11))))
pattern_block0.add_layer(
"prim.add",
inputs={"x": gen_name(11),
"y": "bn-input-3"},
outputs=[gen_name(12)])
pattern_block0.add_layer(
"prim.set_attr",
inputs={"input": gen_name(12)},
outputs=["self." + gen_name(11)])
if_layer2.inputs["input-0"] = "bn-input-3"
if_layer2.add_block(pattern_block0)
pattern_block1 = PaddleGraph(if_layer2, graph_type="dygraph")
if_layer2.add_block(pattern_block1)
# self.pattern.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(13)], value=True)
# self.pattern.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(14)], value=False)
self.pattern.add_layer("prim.if", {'input': "bn-input-4"},
[gen_name(15)])
if_layer3 = self.pattern.layers[list(self.pattern.layers.keys())[-1]]
pattern_block0 = PaddleGraph(if_layer3, graph_type="dygraph")
pattern_block0.add_layer( pattern_block0.add_layer(
"fluid.layers.shape", "fluid.layers.shape",
inputs={'input': "bn-input-0"}, inputs={'input': "bn-input-0"},
outputs=[gen_name(16)]) outputs=[gen_name(5)])
# pattern_block0.add_layer(
# "prim.constant",
# inputs={},
# outputs=[gen_name(17)],
# value="Exception")
# pattern_block0.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(18)], value=True)
# pattern_block0.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(19)], value=0)
# pattern_block0.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(20)], value=2)
# pattern_block0.add_layer(
# "prim.constant", inputs={}, outputs=[gen_name(21)], value=1)
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.getitem", "prim.getitem",
inputs={"list": gen_name(16), inputs={"list": gen_name(5)},
"index": "bn-input-6"}, outputs=[gen_name(6)],
outputs=[gen_name(22)]) index=0)
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.len", inputs={"input": gen_name(16)}, outputs=[gen_name(23)]) "prim.len", inputs={"input": gen_name(5)}, outputs=[gen_name(7)])
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.sub", "prim.sub", inputs={"x": gen_name(7)}, outputs=[gen_name(8)], y=2)
inputs={"x": gen_name(23),
"y": "bn-input-7"},
outputs=[gen_name(24)])
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.equal", "prim.equal", inputs={"input": gen_name(6)}, outputs=[gen_name(9)])
inputs={"input": gen_name(22)},
outputs=[gen_name(25)])
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.loop", "prim.loop",
inputs={"input": gen_name(24)}, inputs={"input": gen_name(8)},
outputs=[gen_name(26), gen_name(27)]) outputs=[gen_name(8.1), gen_name(10)])
loop_layer = pattern_block0.layers[list(pattern_block0.layers.keys())[ loop_layer = pattern_block0.layers[list(pattern_block0.layers.keys())[
-1]] -1]]
pattern_block0_block0 = PaddleGraph(loop_layer, graph_type="dygraph") pattern_block0_block0 = PaddleGraph(loop_layer, graph_type="dygraph")
pattern_block0_block0.add_layer( pattern_block0_block0.add_layer(
"prim.add", "prim.add", inputs={"x": gen_name(10)}, outputs=[gen_name(11)], y=2)
inputs={"x": gen_name(27),
"y": "bn-input-7"},
outputs=[gen_name(28)])
pattern_block0_block0.add_layer( pattern_block0_block0.add_layer(
"prim.getitem", "prim.getitem",
inputs={"list": gen_name(16), inputs={"list": gen_name(5),
"index": gen_name(28)}, "index": gen_name(11)},
outputs=[gen_name(29)]) outputs=[gen_name(12)])
pattern_block0_block0.add_layer( pattern_block0_block0.add_layer(
"prim.mul", "prim.mul",
inputs={"x": gen_name(25), inputs={"x": gen_name(9),
"y": gen_name(29)}, "y": gen_name(12)},
outputs=[gen_name(30)]) outputs=[gen_name(13)])
pattern_block0_block0.add_layer( pattern_block0_block0.add_layer(
"prim.equal", "prim.equal",
inputs={"input": gen_name(30)}, inputs={"input": gen_name(13)},
outputs=[gen_name(26)]) outputs=[gen_name(8.1)])
loop_layer.inputs["input-1"] = "bn-input-7" loop_layer.inputs["input-1"] = gen_name(5)
loop_layer.inputs["input-2"] = gen_name(16) loop_layer.inputs["input-2"] = gen_name(9)
loop_layer.inputs["input-3"] = gen_name(25)
loop_layer.add_block(pattern_block0_block0) loop_layer.add_block(pattern_block0_block0)
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.eq", "prim.eq", inputs={"x": gen_name(8.1)}, outputs=[gen_name(14)], y=1)
inputs={"x": gen_name(26),
"y": "bn-input-8"},
outputs=[gen_name(31)])
pattern_block0.add_layer( pattern_block0.add_layer(
"prim.if", inputs={"input": gen_name(31)}, outputs=[gen_name(32)]) "prim.if", inputs={"input": gen_name(14)}, outputs=[gen_name(15)])
if_layer31 = pattern_block0.layers[list(pattern_block0.layers.keys())[ if_layer21 = pattern_block0.layers[list(pattern_block0.layers.keys())[
-1]] -1]]
pattern_block0_block0 = PaddleGraph(if_layer31, graph_type="dygraph") pattern_block0_block0 = PaddleGraph(if_layer21, graph_type="dygraph")
pattern_block0_block0.add_layer( pattern_block0_block0.add_layer(
"prim.exception", "prim.exception",
inputs={"input": "bn-input-5"}, inputs={},
outputs=[gen_name(33)]) outputs=[gen_name(15)],
if_layer31.inputs["input-0"] = "bn-input-5" input="Exception")
if_layer31.add_block(pattern_block0_block0) if_layer21.add_block(pattern_block0_block0)
pattern_block0_block1 = PaddleGraph(if_layer31, graph_type="dygraph") pattern_block0_block1 = PaddleGraph(if_layer21, graph_type="dygraph")
if_layer31.add_block(pattern_block0_block1) if_layer21.add_block(pattern_block0_block1)
if_layer3.add_block(pattern_block0) if_layer2.add_block(pattern_block0)
pattern_block1 = PaddleGraph(if_layer3, graph_type="dygraph") pattern_block1 = PaddleGraph(if_layer2, graph_type="dygraph")
if_layer3.add_block(pattern_block1) if_layer2.add_block(pattern_block1)
if_layer3.inputs["input-0"] = "bn-input-5" if_layer2.inputs["input-0"] = "bn-input-0"
if_layer3.inputs["input-1"] = "bn-input-6"
if_layer3.inputs["input-2"] = "bn-input-7"
if_layer3.inputs["input-3"] = "bn-input-7"
if_layer3.inputs["input-4"] = "bn-input-8"
if_layer3.inputs["input-5"] = "bn-input-0"
self.pattern.add_layer( self.pattern.add_layer(
"paddle.nn.BatchNorm", "paddle.nn.BatchNorm",
inputs={"input": "bn-input-0"}, inputs={"input": "bn-input-0"},
outputs=[gen_name(34), gen_name(35)], outputs=[gen_name(16), gen_name(17)],
is_test=True, is_test=True,
num_channels=160, num_channels=160,
momentum=0.1, momentum=0.1,
epsilon=0.001) epsilon=0.001)
self.pattern.build(inputs={ self.pattern.build(inputs={"input-0": "bn-input-0"})
"input-0": "bn-input-0",
"input-1": "bn-input-1",
"input-2": "bn-input-2",
"input-3": "bn-input-3",
"input-4": "bn-input-4",
"input-5": "bn-input-5",
"input-6": "bn-input-6",
"input-7": "bn-input-7",
"input-8": "bn-input-8",
"input-9": "bn-input-9"
})
def insert_new_layer(self, graph, parameters, matches): def insert_new_layer(self, graph, parameters, matches):
new_layer = self.gen_new_layer(parameters, matches) new_layer = self.gen_new_layer(parameters, matches)
...@@ -241,6 +148,10 @@ class BatchNorm2dFuser(FuseBase): ...@@ -241,6 +148,10 @@ class BatchNorm2dFuser(FuseBase):
graph.layers[new_layer_id] = new_layer graph.layers[new_layer_id] = new_layer
matches.pop(new_layer_id) matches.pop(new_layer_id)
# for layer in matches.values():
# print(layer.outputs)
# print("-------")
def gen_new_layer(self, parameters, matches): def gen_new_layer(self, parameters, matches):
layers_id = list(matches.keys()) layers_id = list(matches.keys())
layer = matches[layers_id[-1]] layer = matches[layers_id[-1]]
......
...@@ -28,7 +28,7 @@ class FcFuser(FuseBase): ...@@ -28,7 +28,7 @@ class FcFuser(FuseBase):
fc层模式python实现代码示例: fc层模式python实现代码示例:
x133 = x128.shape x133 = x128.shape
x133 = len(x133) x133 = len(x133)
x134 = x133 == x131 x134 = x133 == 2
if x134 : if x134 :
classifier_6_weight = self.classifier_6_weight classifier_6_weight = self.classifier_6_weight
x136 = fluid.layers.transpose(x=classifier_6_weight, perm=[1, 0]) x136 = fluid.layers.transpose(x=classifier_6_weight, perm=[1, 0])
...@@ -55,9 +55,9 @@ class FcFuser(FuseBase): ...@@ -55,9 +55,9 @@ class FcFuser(FuseBase):
"prim.len", inputs={'input': gen_name(2)}, outputs=[gen_name(2)]) "prim.len", inputs={'input': gen_name(2)}, outputs=[gen_name(2)])
self.pattern.add_layer( self.pattern.add_layer(
"prim.eq", "prim.eq",
inputs={"eq0": gen_name(2), inputs={"eq0": gen_name(2)},
"eq1": "fc-input-1"}, outputs=[gen_name(3)],
outputs=[gen_name(3)]) eq1=2)
self.pattern.add_layer("prim.if", {'input': gen_name(3)}, [gen_name(4)]) self.pattern.add_layer("prim.if", {'input': gen_name(3)}, [gen_name(4)])
self.pattern.outputs.append(gen_name(4)) self.pattern.outputs.append(gen_name(4))
if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[-1]] if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[-1]]
...@@ -122,9 +122,7 @@ class FcFuser(FuseBase): ...@@ -122,9 +122,7 @@ class FcFuser(FuseBase):
"prim.equal", inputs={'input': gen_name(13)}, "prim.equal", inputs={'input': gen_name(13)},
outputs=[gen_name(4)]) outputs=[gen_name(4)])
if_layer1.add_block(pattern_block1) if_layer1.add_block(pattern_block1)
self.pattern.build( self.pattern.build(inputs={"input-0": "fc-input-0"})
inputs={"input-0": "fc-input-0",
"input-1": "fc-input-1"})
def insert_new_layer(self, graph, parameters, matches): def insert_new_layer(self, graph, parameters, matches):
new_layer = self.gen_new_layer(parameters, matches) new_layer = self.gen_new_layer(parameters, matches)
......
...@@ -21,958 +21,1532 @@ from x2paddle.core.util import * ...@@ -21,958 +21,1532 @@ from x2paddle.core.util import *
class InterpolateBilinearFuser(FuseBase): class InterpolateBilinearFuser(FuseBase):
def __init__(self): def __init__(self):
super(InterpolateBilinearFuser, self).__init__(graph_type="dygraph") super(InterpolateBilinearFuser, self).__init__(graph_type="dygraph")
import torch
torch_version = torch.__version__
torch_version_part = torch_version.split(".")
if int(torch_version_part[0]) == 1 and int(torch_version_part[1]) > 5:
self.version_gt_150 = True
else:
self.version_gt_150 = False
def build_pattern(self): def build_pattern(self):
""" 描述需要替换的双线性插值图结构。 """ 描述需要替换的双线性插值图结构。
interpolate_bilinear层模式python实现代码示例: interpolate_bilinear层模式python实现代码示例:
x2834 = 'Exception' x3016 = fluid.layers.shape(input=x3005)
x2835 = None x3016 = len(x3016)
x2836 = 2 x3017 = x3016 - 2
x2837 = 3 x3018 = []
x2838 = 1 for _x3020 in range(x3017):
x2839 = 0 x3018.append(None)
x2840 = 4 x3021 = (x3005, x8, None, None)
x2841 = 5 x3022 = fluid.layers.shape(input=x3005)
x2842 = None x3022 = len(x3022)
x2843 = x2832.shape x3023 = x3022 == 3
x2843 = len(x2843) if x3023 :
x2844 = x2843 - x2836 raise RaiseException('Exception')
x2845 = [] x3024 = None
for _x2847 in range(x2844):
x2845.append(x2835)
x2848 = (x2832, x9, x3, x3)
x2849 = x2832.shape
x2849 = len(x2849)
x2850 = x2849 == x2837
if x2850 :
raise RaiseException(x2834)
x2851 = x2842
else: else:
x2853 = x2832.shape x3026 = fluid.layers.shape(input=x3005)
x2853 = len(x2853) x3026 = len(x3026)
x2854 = x2853 == x2840 x3027 = x3026 == 4
if x2854 : if x3027 :
x2857 = True x3044, x3045, x3046, x3047 = x3021
x2858 = 'Exception' x3048 = x3045 is None
x2859 = False if x3048 :
x2860 = None x3051 = x3046 is None
x2861 = 'The default behavior for interpolate/upsample with float scale_factor will change in 1.6.0 to align with other frameworks/libraries, and use scale_factor directly, instead of relying on the computed output size. If you wish to keep the old behavior, please set recompute_scale_factor=True. See the documentation of nn.Upsample for details. ' x3049 = x3051
x2862 = 0 x3050 = x3045
x2863 = 9223372036854775807
x2864 = 1
x2865 = 2
x2866 = None
x2867 = None
x2868 = None
x2869 = None
x2870 = None
x2871, x2872, x2873, x2874 = x2848
x2875 = x2872 is x2860
if x2875 :
x2878 = x2873 is x2860
x2876 = x2878
x2877 = x2872
else: else:
x2879 = x2872 x3052 = x3045
x2876 = x2859 x3049 = False
x2877 = x2879 x3050 = x3052
if x2876 : if x3049 :
raise RaiseException(x2858) raise RaiseException('Exception')
x2882 = x2877 is not x2860 x3055 = x3050 is not None
if x2882 : if x3055 :
x2885 = x2877 x3058 = x3050
x2886 = x2873 is not x2860 x3059 = x3046 is not None
x2883 = x2886 x3056 = x3059
x2884 = x2885 x3057 = x3058
else: else:
x2883 = x2859 x3056 = False
x2884 = x2877 x3057 = x3050
if x2883 : if x3056 :
raise RaiseException(x2858) raise RaiseException('Exception')
x2887 = x2868 x3060 = None
x2888 = x2869 x3061 = None
else: else:
x2887 = x2873 x3060 = x3046
x2888 = x2884 x3061 = x3057
x2890 = x2887 is not x2860 x3063 = x3060 is not None
if x2890 : if x3063 :
x2892 = x2887 x3065 = x3060
x2893 = len(x2892) x3066 = len(x3065)
x2894 = x2893 != x2836 x3067 = x3066 != 2
if x2894 : if x3067 :
raise RaiseException(x2858) raise RaiseException('Exception')
x2891 = x2892 x3064 = x3065
else: else:
x2891 = x2887 x3064 = x3060
x2897 = x2888 is not x2860 x3070 = x3061 is not None
if x2897 : if x3070 :
x2899 = x2888 x3072 = x3061
x2898 = x2899 x3071 = x3072
else: else:
x2898 = x2866 x3071 = None
if x2897 : if x3070 :
x2900 = x2898 x3073 = x3071
else: else:
x2901 = x2891 is not x2860 x3074 = x3064 is not None
if x2901 : if x3074 :
x2903 = x2891 x3076 = x3064
x2902 = x2903 x3075 = x3076
else: else:
raise RaiseException(x2858) raise RaiseException('Exception')
x2902 = x2867 x3075 = None
x2905 = x2874 is x2860 x3078 = x3047 is None
if x2905 : if x3078 :
x2907 = len(x2902) x3080 = len(x3075)
x2908 = x2907 > x2862 x3081 = x3080 > 0
x2912 = x2859 x3086 = 0
x2913 = x2862 for x3083 in range(2147483647):
for x2910 in range(x2863): x3087 = x3075[x3086]
x2914 = x2902[x2913] x3088 = math.floor(x3087)
x2915 = math.floor(x2914) x3089 = x3088 != x3087
x2916 = x2915 != x2914 if x3089 :
if x2916 : x3090 = False
x2917 = x2859 x3091 = x3089
x2918 = x2916
else: else:
x2917 = x2870 x3090 = None
x2918 = x2870 x3091 = None
if x2916 : if x3089 :
x2919 = x2917 x3092 = x3090
x2920 = x2918 x3093 = x3091
else: else:
x2919 = x2857 x3092 = True
x2920 = x2916 x3093 = x3089
x2921 = x2913 + x2864 x3094 = x3086 + 1
x2922 = x2921 < x2907 x3095 = x3094 < x3080
x2923 = x2922 and x2919 x3096 = x3095 and x3092
x2909 = x2920 x3082 = x3093
x2910 = x2921 x3083 = x3094
if x2909 : if x3082 :
import warnings import warnings
warnings.warn(x2861, stacklevel=2) warnings.warn('The default behavior for interpolate/upsample with float scale_factor will change in 1.6.0 to align with other frameworks/libraries, and use scale_factor directly, instead of relying on the computed output size. If you wish to keep the old behavior, please set recompute_scale_factor=True. See the documentation of nn.Upsample for details. ', stacklevel=2)
x2926 = [] x3099 = []
for _x2928 in range(x2836): for _x3101 in range(2):
x2929 = _x2928 + x2865 x3102 = _x3101 + 2
x2930 = x2871.shape x3103 = fluid.layers.shape(x3044)[x3102]
x2931 = float(x2930) x3104 = float(x3103)
x2932 = x2902[_x2928] x3105 = x3075[_x3101]
x2933 = x2931 * x2932 x3106 = x3104 * x3105
x2934 = math.floor(x2933) x3107 = math.floor(x3106)
x2926.append(x2934) x3099.append(x3107)
x2900 = x2926 x3073 = x3099
x2935 = x2845[x2839] x3108 = x3018[0]
x2936 = x2845[x2838] x3109 = x3018[1]
assert x2935 == x2936, 'The x2935 must be x2936!' x3073_isinstance = isinstance(x3073, paddle.fluid.Variable)
x2937 = fluid.layers.interpolate( if x3073_isinstance :
input=x2832, out_shape=x2900, scale=x2935, align_corners=False, align_mode=0) x3073 = x3073.numpy().tolist()
x2855 = x2937 assert x3108 == x3109, 'The x3108 must be x3109!'
x3110 = paddle.nn.functional.interpolate(x=x3005, size=x3073, scale_factor=x3108, align_corners=False, align_mode=0)
x3028 = x3110
else: else:
x2938 = x2832.shape x3111 = fluid.layers.shape(input=x3005)
x2938 = len(x2938) x3111 = len(x3111)
x2939 = x2938 == x2841 x3112 = x3111 == 5
if x2939 : if x3112 :
raise RaiseException(x2834) raise RaiseException('Exception')
else: else:
raise RaiseException(x2834) raise RaiseException('Exception')
x2855 = x2842 x3028 = None
x2851 = x2855 x3024 = x3028
""" """
def gen_name(id): def gen_name(id):
return "x" + str(id) return "x" + str(id)
self.pattern.add_layer( if self.version_gt_150:
"prim.constant", self.pattern.add_layer(
inputs={}, "fluid.layers.shape",
outputs=[gen_name(0)], inputs={"input": "interpolate-input-0"},
value="Exception") outputs=[gen_name(9)])
self.pattern.add_layer( self.pattern.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(1)], value=None) "prim.len",
self.pattern.add_layer( inputs={"input": gen_name(9)},
"prim.constant", inputs={}, outputs=[gen_name(2)], value=2) outputs=[gen_name(9)])
self.pattern.add_layer( self.pattern.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(3)], value=3) "prim.sub",
self.pattern.add_layer( inputs={"x": gen_name(9)},
"prim.constant", inputs={}, outputs=[gen_name(4)], value=1) outputs=[gen_name(10)],
self.pattern.add_layer( y=2)
"prim.constant", inputs={}, outputs=[gen_name(5)], value=0) self.pattern.add_layer(
self.pattern.add_layer( "prim.list", inputs={}, outputs=[gen_name(11)])
"prim.constant", inputs={}, outputs=[gen_name(6)], value=4) self.pattern.add_layer(
self.pattern.add_layer( "prim.loop",
"prim.constant", inputs={}, outputs=[gen_name(7)], value=5) inputs={"input": gen_name(10)},
self.pattern.add_layer( outputs=[gen_name(12.1), gen_name(12.2)])
"prim.constant", inputs={}, outputs=[gen_name(8)], value=None) loop_layer = self.pattern.layers[list(self.pattern.layers.keys())[
self.pattern.add_layer( -1]]
"prim.shape", pattern_block = PaddleGraph(loop_layer, graph_type="dygraph")
inputs={"input": "interpolate-input-0"}, pattern_block.add_layer(
outputs=[gen_name(9)]) "prim.append",
self.pattern.add_layer( inputs={"list": gen_name(11)},
"prim.len", inputs={"input": gen_name(9)}, outputs=[gen_name(9)]) outputs=[],
self.pattern.add_layer( element=None)
"prim.sub", loop_layer.inputs["input-0"] = gen_name(11)
inputs={"x": gen_name(9), loop_layer.add_block(pattern_block)
"y": gen_name(2)}, self.pattern.add_layer(
outputs=[gen_name(10)]) "prim.tuple",
self.pattern.add_layer("prim.list", inputs={}, outputs=[gen_name(11)]) inputs={
self.pattern.add_layer( "input0": "interpolate-input-0",
"prim.loop", "input1": "interpolate-input-1",
inputs={"input": gen_name(10)}, },
outputs=[gen_name(12.1), gen_name(12.2)]) outputs=[gen_name(13)],
loop_layer = self.pattern.layers[list(self.pattern.layers.keys())[-1]] input2=None,
pattern_block = PaddleGraph(loop_layer, graph_type="dygraph") input3=None)
pattern_block.add_layer( self.pattern.add_layer(
"prim.append", "fluid.layers.shape",
inputs={"list": gen_name(11), inputs={"input": "interpolate-input-0"},
"element": gen_name(1)}, outputs=[gen_name(14)])
outputs=[]) self.pattern.add_layer(
loop_layer.inputs["input-0"] = gen_name(11) "prim.len",
loop_layer.inputs["input-1"] = gen_name(1) inputs={"input": gen_name(14)},
loop_layer.add_block(pattern_block) outputs=[gen_name(14)])
self.pattern.add_layer( self.pattern.add_layer(
"prim.tuple", "prim.eq",
inputs={ inputs={"x": gen_name(14)},
"input0": "interpolate-input-0", outputs=[gen_name(15)],
"input1": "interpolate-input-1", y=3)
"input2": "interpolate-input-2", self.pattern.add_layer(
"input3": "interpolate-input-2" "prim.if",
}, inputs={"input": gen_name(15)},
outputs=[gen_name(13)]) outputs=[gen_name(16)])
self.pattern.add_layer( if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[
"prim.shape", -1]]
inputs={"input": "interpolate-input-0"}, pattern_block = PaddleGraph(if_layer1, graph_type="dygraph")
outputs=[gen_name(14)]) pattern_block.add_layer(
self.pattern.add_layer( "prim.exception",
"prim.len", inputs={"input": gen_name(14)}, outputs=[gen_name(14)]) inputs={},
self.pattern.add_layer( outputs=[gen_name(17)],
"prim.eq", input="Exception")
inputs={"x": gen_name(14), pattern_block.add_layer(
"y": gen_name(3)}, "prim.equal", inputs={}, outputs=[gen_name(16)], input=None)
outputs=[gen_name(15)]) if_layer1.add_block(pattern_block)
self.pattern.add_layer( pattern_block = PaddleGraph(if_layer1, graph_type="dygraph")
"prim.if", inputs={"input": gen_name(15)}, outputs=[gen_name(16)]) pattern_block.add_layer(
if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[-1]] "fluid.layers.shape",
pattern_block = PaddleGraph(if_layer1, graph_type="dygraph") inputs={"input": "interpolate-input-0"},
pattern_block.add_layer( outputs=[gen_name(18)])
"prim.exception", pattern_block.add_layer(
inputs={"input": gen_name(0)}, "prim.len",
outputs=[gen_name(17)]) inputs={"input": gen_name(18)},
pattern_block.add_layer( outputs=[gen_name(18)])
"prim.equal", inputs={"input": gen_name(8)}, pattern_block.add_layer(
outputs=[gen_name(16)]) "prim.eq",
if_layer1.inputs["input-0"] = gen_name(0) inputs={"x": gen_name(18)},
if_layer1.inputs["input-1"] = gen_name(8) outputs=[gen_name(19)],
if_layer1.add_block(pattern_block) y=4)
pattern_block = PaddleGraph(if_layer1, graph_type="dygraph") pattern_block.add_layer(
pattern_block.add_layer( "prim.if",
"prim.shape", inputs={"input": gen_name(19)},
inputs={"input": "interpolate-input-0"}, outputs=[gen_name(20)])
outputs=[gen_name(18)]) if_layer2 = pattern_block.layers[list(pattern_block.layers.keys())[
pattern_block.add_layer( -1]]
"prim.len", inputs={"input": gen_name(18)}, outputs=[gen_name(18)]) pattern_block_block = PaddleGraph(if_layer2, graph_type="dygraph")
pattern_block.add_layer( pattern_block_block.add_layer(
"prim.eq", "prim.tuple_unpack",
inputs={"x": gen_name(18), inputs={"input": gen_name(13)},
"y": gen_name(6)}, outputs=[
outputs=[gen_name(19)]) gen_name(34), gen_name(35), gen_name(36), gen_name(37)
pattern_block.add_layer( ])
"prim.if", inputs={"input": gen_name(19)}, outputs=[gen_name(20)]) pattern_block_block.add_layer(
if_layer2 = pattern_block.layers[list(pattern_block.layers.keys())[-1]] "prim.is",
pattern_block_block = PaddleGraph(if_layer2, graph_type="dygraph") inputs={"x": gen_name(35)},
pattern_block_block.add_layer( outputs=[gen_name(38)],
"prim.constant", inputs={}, outputs=[gen_name(21)], value=False) y=None)
pattern_block_block.add_layer( pattern_block_block.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(22)], value=True) "prim.if",
pattern_block_block.add_layer( inputs={"input": gen_name(38)},
"prim.constant", outputs=[gen_name(39), gen_name(40)])
inputs={}, if_layer3 = pattern_block_block.layers[list(
outputs=[gen_name(23)], pattern_block_block.layers.keys())[-1]]
value="Exception") pattern_block_block_block = PaddleGraph(
pattern_block_block.add_layer( if_layer3, graph_type="dygraph")
"prim.constant", inputs={}, outputs=[gen_name(24)], value=False) pattern_block_block_block.add_layer(
pattern_block_block.add_layer( "prim.is",
"prim.constant", inputs={}, outputs=[gen_name(25)], value=None) inputs={"x": gen_name(36)},
pattern_block_block.add_layer( outputs=[gen_name(41)],
"prim.constant", inputs={}, outputs=[gen_name(26)], value="") y=None)
pattern_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(26.1)], value=0) "prim.equal",
pattern_block_block.add_layer( inputs={"input": gen_name(41)},
"prim.constant", outputs=[gen_name(39)])
inputs={}, pattern_block_block_block.add_layer(
outputs=[gen_name(26.2)], "prim.equal",
value=9223372036854775807) inputs={"input": gen_name(35)},
pattern_block_block.add_layer( outputs=[gen_name(40)])
"prim.constant", inputs={}, outputs=[gen_name(27)], value=1) if_layer3.add_block(pattern_block_block_block)
pattern_block_block.add_layer( pattern_block_block_block = PaddleGraph(
"prim.constant", inputs={}, outputs=[gen_name(28)], value=2) if_layer3, graph_type="dygraph")
pattern_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(29)], value=None) "prim.equal",
pattern_block_block.add_layer( inputs={"input": gen_name(35)},
"prim.constant", inputs={}, outputs=[gen_name(30)], value=None) outputs=[gen_name(42)])
pattern_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(31)], value=None) "prim.equal", inputs={}, outputs=[gen_name(39)], input=False)
pattern_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.constant", inputs={}, outputs=[gen_name(32)], value=None) "prim.equal",
pattern_block_block.add_layer( inputs={"input": gen_name(35)},
"prim.constant", inputs={}, outputs=[gen_name(33)], value=None) outputs=[gen_name(40)])
pattern_block_block.add_layer( if_layer3.add_block(pattern_block_block_block)
"prim.tuple_unpack", if_layer3.inputs.update({
inputs={"input": gen_name(13)}, "input-0": gen_name(36),
outputs=[gen_name(34), gen_name(35), gen_name(36), gen_name(37)]) 'input-1': gen_name(35),
pattern_block_block.add_layer( 'input-2': gen_name(35),
"prim.is", })
inputs={"x": gen_name(35), pattern_block_block.add_layer(
"y": gen_name(25)}, "prim.if",
outputs=[gen_name(38)]) inputs={"input": gen_name(39)},
pattern_block_block.add_layer( outputs=[gen_name(43)])
"prim.if", if_layer4 = pattern_block_block.layers[list(
inputs={"input": gen_name(38)}, pattern_block_block.layers.keys())[-1]]
outputs=[gen_name(39), gen_name(40)]) pattern_block_block_block = PaddleGraph(
if_layer3 = pattern_block_block.layers[list( if_layer4, graph_type="dygraph")
pattern_block_block.layers.keys())[-1]] pattern_block_block_block.add_layer(
pattern_block_block_block = PaddleGraph(if_layer3, graph_type="dygraph") "prim.exception",
pattern_block_block_block.add_layer( inputs={},
"prim.is", outputs=[gen_name(44)],
inputs={"x": gen_name(36), input="Exception")
"y": gen_name(25)}, if_layer4.add_block(pattern_block_block_block)
outputs=[gen_name(41)]) pattern_block_block_block = PaddleGraph(
pattern_block_block_block.add_layer( if_layer4, graph_type="dygraph")
"prim.equal", if_layer4.add_block(pattern_block_block_block)
inputs={"input": gen_name(41)}, pattern_block_block.add_layer(
outputs=[gen_name(39)]) "prim.isnot",
pattern_block_block_block.add_layer( inputs={"x": gen_name(40)},
"prim.equal", outputs=[gen_name(45)],
inputs={"input": gen_name(35)}, y=None)
outputs=[gen_name(40)]) pattern_block_block.add_layer(
if_layer3.add_block(pattern_block_block_block) "prim.if",
pattern_block_block_block = PaddleGraph(if_layer3, graph_type="dygraph") inputs={"input": gen_name(45)},
pattern_block_block_block.add_layer( outputs=[gen_name(46), gen_name(47)])
"prim.equal", if_layer5 = pattern_block_block.layers[list(
inputs={"input": gen_name(35)}, pattern_block_block.layers.keys())[-1]]
outputs=[gen_name(42)]) pattern_block_block_block = PaddleGraph(
pattern_block_block_block.add_layer( if_layer5, graph_type="dygraph")
"prim.equal", pattern_block_block_block.add_layer(
inputs={"input": gen_name(24)}, "prim.equal",
outputs=[gen_name(39)]) inputs={"input": gen_name(40)},
pattern_block_block_block.add_layer( outputs=[gen_name(48)])
"prim.equal", pattern_block_block_block.add_layer(
inputs={"input": gen_name(35)}, "prim.isnot",
outputs=[gen_name(40)]) inputs={"x": gen_name(36)},
if_layer3.add_block(pattern_block_block_block) outputs=[gen_name(49)],
if_layer3.inputs.update({ y=None)
"input-0": gen_name(36), pattern_block_block_block.add_layer(
'input-1': gen_name(25), "prim.equal",
'input-2': gen_name(35), inputs={"input": gen_name(49)},
'input-3': gen_name(35), outputs=[gen_name(46)])
'input-4': gen_name(24) pattern_block_block_block.add_layer(
}) "prim.equal",
pattern_block_block.add_layer( inputs={"input": gen_name(48)},
"prim.if", inputs={"input": gen_name(39)}, outputs=[gen_name(43)]) outputs=[gen_name(47)])
if_layer4 = pattern_block_block.layers[list( if_layer5.add_block(pattern_block_block_block)
pattern_block_block.layers.keys())[-1]] pattern_block_block_block = PaddleGraph(
pattern_block_block_block = PaddleGraph(if_layer4, graph_type="dygraph") if_layer5, graph_type="dygraph")
pattern_block_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.exception", "prim.equal", inputs={}, outputs=[gen_name(46)], input=False)
inputs={"input": gen_name(23)}, pattern_block_block_block.add_layer(
outputs=[gen_name(44)]) "prim.equal",
if_layer4.add_block(pattern_block_block_block) inputs={"input": gen_name(40)},
pattern_block_block_block = PaddleGraph(if_layer4, graph_type="dygraph") outputs=[gen_name(47)])
if_layer4.add_block(pattern_block_block_block) if_layer5.add_block(pattern_block_block_block)
if_layer4.inputs["input-0"] = gen_name(23) if_layer5.inputs.update({
pattern_block_block.add_layer( "input-0": gen_name(40),
"prim.isnot", "input-1": gen_name(36),
inputs={"x": gen_name(40), "input-3": gen_name(40)
"y": gen_name(25)}, })
outputs=[gen_name(45)]) pattern_block_block.add_layer(
pattern_block_block.add_layer( "prim.if",
"prim.if", inputs={"input": gen_name(46)},
inputs={"input": gen_name(45)}, outputs=[gen_name(50), gen_name(51)])
outputs=[gen_name(46), gen_name(47)]) if_layer6 = pattern_block_block.layers[list(
if_layer5 = pattern_block_block.layers[list( pattern_block_block.layers.keys())[-1]]
pattern_block_block.layers.keys())[-1]] pattern_block_block_block = PaddleGraph(
pattern_block_block_block = PaddleGraph(if_layer5, graph_type="dygraph") if_layer6, graph_type="dygraph")
pattern_block_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.equal", "prim.exception",
inputs={"input": gen_name(40)}, inputs={},
outputs=[gen_name(48)]) outputs=[gen_name(52)],
pattern_block_block_block.add_layer( input="Exception")
"prim.isnot", pattern_block_block_block.add_layer(
inputs={"x": gen_name(36), "prim.equal", inputs={}, outputs=[gen_name(50)], input=None)
"y": gen_name(25)}, pattern_block_block_block.add_layer(
outputs=[gen_name(49)]) "prim.equal", inputs={}, outputs=[gen_name(51)], input=None)
pattern_block_block_block.add_layer( if_layer6.add_block(pattern_block_block_block)
"prim.equal", pattern_block_block_block = PaddleGraph(
inputs={"input": gen_name(49)}, if_layer6, graph_type="dygraph")
outputs=[gen_name(46)]) pattern_block_block_block.add_layer(
pattern_block_block_block.add_layer( "prim.equal",
"prim.equal", inputs={"input": gen_name(36)},
inputs={"input": gen_name(48)}, outputs=[gen_name(50)])
outputs=[gen_name(47)]) pattern_block_block_block.add_layer(
if_layer5.add_block(pattern_block_block_block) "prim.equal",
pattern_block_block_block = PaddleGraph(if_layer5, graph_type="dygraph") inputs={"input": gen_name(47)},
pattern_block_block_block.add_layer( outputs=[gen_name(51)])
"prim.equal", if_layer6.add_block(pattern_block_block_block)
inputs={"input": gen_name(24)}, if_layer6.inputs.update({
outputs=[gen_name(46)]) "input-0": gen_name(36),
pattern_block_block_block.add_layer( "input-1": gen_name(47)
"prim.equal", })
inputs={"input": gen_name(40)}, pattern_block_block.add_layer(
outputs=[gen_name(47)]) "prim.isnot",
if_layer5.add_block(pattern_block_block_block) inputs={"x": gen_name(50)},
if_layer5.inputs.update({ outputs=[gen_name(53)],
"input-0": gen_name(40), y=None)
"input-1": gen_name(36), pattern_block_block.add_layer(
"input-2": gen_name(25), "prim.if",
"input-3": gen_name(24), inputs={"input": gen_name(53)},
"input-4": gen_name(40) outputs=[gen_name(54)])
}) if_layer7 = pattern_block_block.layers[list(
pattern_block_block.add_layer( pattern_block_block.layers.keys())[-1]]
"prim.if", pattern_block_block_block = PaddleGraph(
inputs={"input": gen_name(46)}, if_layer7, graph_type="dygraph")
outputs=[gen_name(50), gen_name(51)]) pattern_block_block_block.add_layer(
if_layer6 = pattern_block_block.layers[list( "prim.equal",
pattern_block_block.layers.keys())[-1]] inputs={"input": gen_name(50)},
pattern_block_block_block = PaddleGraph(if_layer6, graph_type="dygraph") outputs=[gen_name(55)])
pattern_block_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.exception", "prim.len",
inputs={"input": gen_name(23)}, inputs={"input": gen_name(55)},
outputs=[gen_name(52)]) outputs=[gen_name(56)])
pattern_block_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.equal", "prim.ne",
inputs={"input": gen_name(31)}, inputs={"x": gen_name(56)},
outputs=[gen_name(50)]) outputs=[gen_name(57)],
pattern_block_block_block.add_layer( y=2)
"prim.equal", pattern_block_block_block.add_layer(
inputs={"input": gen_name(32)}, "prim.if",
outputs=[gen_name(51)]) inputs={"input": gen_name(57)},
if_layer6.add_block(pattern_block_block_block) outputs=[gen_name(58)])
pattern_block_block_block = PaddleGraph(if_layer6, graph_type="dygraph") if_layer8 = pattern_block_block_block.layers[list(
pattern_block_block_block.add_layer( pattern_block_block_block.layers.keys())[-1]]
"prim.equal", pattern_block_block_block_block = PaddleGraph(
inputs={"input": gen_name(36)}, if_layer8, graph_type="dygraph")
outputs=[gen_name(50)]) pattern_block_block_block_block.add_layer(
pattern_block_block_block.add_layer( "prim.exception",
"prim.equal", inputs={},
inputs={"input": gen_name(47)}, outputs=[gen_name(59)],
outputs=[gen_name(51)]) input="Exception")
if_layer6.add_block(pattern_block_block_block) if_layer8.add_block(pattern_block_block_block_block)
if_layer6.inputs.update({ pattern_block_block_block_block = PaddleGraph(
"input-0": gen_name(23), if_layer8, graph_type="dygraph")
"input-1": gen_name(31), if_layer8.add_block(pattern_block_block_block_block)
"input-2": gen_name(32), pattern_block_block_block.add_layer(
"input-3": gen_name(36), "prim.equal",
"input-4": gen_name(47) inputs={"input": gen_name(55)},
}) outputs=[gen_name(54)])
pattern_block_block.add_layer( if_layer7.add_block(pattern_block_block_block)
"prim.isnot", pattern_block_block_block = PaddleGraph(
inputs={"x": gen_name(50), if_layer7, graph_type="dygraph")
"y": gen_name(25)}, pattern_block_block_block.add_layer(
outputs=[gen_name(53)]) "prim.equal",
pattern_block_block.add_layer( inputs={"input": gen_name(50)},
"prim.if", inputs={"input": gen_name(53)}, outputs=[gen_name(54)]) outputs=[gen_name(54)])
if_layer7 = pattern_block_block.layers[list( if_layer7.add_block(pattern_block_block_block)
pattern_block_block.layers.keys())[-1]] if_layer7.inputs.update({
pattern_block_block_block = PaddleGraph(if_layer7, graph_type="dygraph") "input-0": gen_name(50),
pattern_block_block_block.add_layer( "input-1": gen_name(50)
"prim.equal", })
inputs={"input": gen_name(50)}, pattern_block_block.add_layer(
outputs=[gen_name(55)]) "prim.isnot",
pattern_block_block_block.add_layer( inputs={"x": gen_name(51)},
"prim.len", inputs={"input": gen_name(55)}, outputs=[gen_name(56)]) outputs=[gen_name(60)],
pattern_block_block_block.add_layer( y=None)
"prim.ne", pattern_block_block.add_layer(
inputs={"x": gen_name(56), "prim.if",
"y": gen_name(2)}, inputs={"input": gen_name(60)},
outputs=[gen_name(57)]) outputs=[gen_name(61)])
pattern_block_block_block.add_layer( if_layer9 = pattern_block_block.layers[list(
"prim.if", inputs={"input": gen_name(57)}, outputs=[gen_name(58)]) pattern_block_block.layers.keys())[-1]]
if_layer8 = pattern_block_block_block.layers[list( pattern_block_block_block = PaddleGraph(
pattern_block_block_block.layers.keys())[-1]] if_layer9, graph_type="dygraph")
pattern_block_block_block_block = PaddleGraph( pattern_block_block_block.add_layer(
if_layer8, graph_type="dygraph") "prim.equal",
pattern_block_block_block_block.add_layer( inputs={"input": gen_name(51)},
"prim.exception", outputs=[gen_name(62)])
inputs={"input": gen_name(23)}, pattern_block_block_block.add_layer(
outputs=[gen_name(59)]) "prim.equal",
if_layer8.add_block(pattern_block_block_block_block) inputs={"input": gen_name(62)},
pattern_block_block_block_block = PaddleGraph( outputs=[gen_name(61)])
if_layer8, graph_type="dygraph") if_layer9.add_block(pattern_block_block_block)
if_layer8.add_block(pattern_block_block_block_block) pattern_block_block_block = PaddleGraph(
if_layer8.inputs["input-0"] = gen_name(23) if_layer9, graph_type="dygraph")
pattern_block_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.equal", "prim.isnot",
inputs={"input": gen_name(55)}, inputs={"x": gen_name(54)},
outputs=[gen_name(54)]) outputs=[gen_name(64)],
if_layer7.add_block(pattern_block_block_block) y=None)
pattern_block_block_block = PaddleGraph(if_layer7, graph_type="dygraph") pattern_block_block_block.add_layer(
pattern_block_block_block.add_layer( "prim.if",
"prim.equal", inputs={"input": gen_name(64)},
inputs={"input": gen_name(50)}, outputs=[gen_name(65)])
outputs=[gen_name(54)]) if_layer11 = pattern_block_block_block.layers[list(
if_layer7.add_block(pattern_block_block_block) pattern_block_block_block.layers.keys())[-1]]
if_layer7.inputs.update({ pattern_block_block_block_block = PaddleGraph(
"input-0": gen_name(50), if_layer11, graph_type="dygraph")
"input-1": gen_name(2), pattern_block_block_block_block.add_layer(
"input-2": gen_name(23), "prim.equal",
"input-3": gen_name(50) inputs={"input": gen_name(54)},
}) outputs=[gen_name(66)])
pattern_block_block.add_layer( pattern_block_block_block_block.add_layer(
"prim.isnot", "prim.equal",
inputs={"x": gen_name(51), inputs={"input": gen_name(66)},
"y": gen_name(25)}, outputs=[gen_name(65)])
outputs=[gen_name(60)]) if_layer11.add_block(pattern_block_block_block_block)
pattern_block_block.add_layer( pattern_block_block_block_block = PaddleGraph(
"prim.if", inputs={"input": gen_name(60)}, outputs=[gen_name(61)]) if_layer11, graph_type="dygraph")
if_layer9 = pattern_block_block.layers[list( pattern_block_block_block_block.add_layer(
pattern_block_block.layers.keys())[-1]] "prim.exception",
pattern_block_block_block = PaddleGraph(if_layer9, graph_type="dygraph") inputs={},
pattern_block_block_block.add_layer( outputs=[gen_name(67)],
"prim.equal", input="Exception")
inputs={"input": gen_name(51)}, pattern_block_block_block_block.add_layer(
outputs=[gen_name(62)]) "prim.equal", inputs={}, outputs=[gen_name(65)], input=None)
pattern_block_block_block.add_layer( if_layer11.add_block(pattern_block_block_block_block)
"prim.equal", if_layer11.inputs.update({"input-0": gen_name(54), })
inputs={"input": gen_name(62)}, pattern_block_block_block.add_layer(
outputs=[gen_name(61)]) "prim.is",
if_layer9.add_block(pattern_block_block_block) inputs={"x": gen_name(37)},
pattern_block_block_block = PaddleGraph(if_layer9, graph_type="dygraph") outputs=[gen_name(68)],
pattern_block_block_block.add_layer( y=None)
"prim.equal", pattern_block_block_block.add_layer(
inputs={"input": gen_name(29)}, "prim.if",
outputs=[gen_name(61)]) inputs={"input": gen_name(68)},
if_layer9.add_block(pattern_block_block_block) outputs=[gen_name(69)])
if_layer9.inputs.update({ if_layer12 = pattern_block_block_block.layers[list(
"input-0": gen_name(51), pattern_block_block_block.layers.keys())[-1]]
"input-1": gen_name(29) pattern_block_block_block_block = PaddleGraph(
}) if_layer12, graph_type="dygraph")
pattern_block_block.add_layer( pattern_block_block_block_block.add_layer(
"prim.if", inputs={"input": gen_name(60)}, outputs=[gen_name(63)]) "prim.len",
if_layer10 = pattern_block_block.layers[list( inputs={"input": gen_name(65)},
pattern_block_block.layers.keys())[-1]] outputs=[gen_name(70)])
pattern_block_block_block = PaddleGraph( pattern_block_block_block_block.add_layer(
if_layer10, graph_type="dygraph") "prim.gt",
pattern_block_block_block.add_layer( inputs={"x": gen_name(70)},
"prim.equal", outputs=[gen_name(71)],
inputs={"input": gen_name(61)}, y=0)
outputs=[gen_name(63)]) pattern_block_block_block_block.add_layer(
if_layer10.add_block(pattern_block_block_block) "prim.equal", inputs={}, outputs=[gen_name(72)], input=0)
pattern_block_block_block = PaddleGraph( pattern_block_block_block_block.add_layer(
if_layer10, graph_type="dygraph") "prim.loop",
pattern_block_block_block.add_layer( inputs={},
"prim.isnot", outputs=[gen_name(74), gen_name(75), gen_name(76.1)],
inputs={"x": gen_name(54), input=2147483647)
"y": gen_name(25)}, loop_layer = pattern_block_block_block_block.layers[list(
outputs=[gen_name(64)]) pattern_block_block_block_block.layers.keys())[-1]]
pattern_block_block_block.add_layer( pattern_loop_block = PaddleGraph(loop_layer, graph_type="dygraph")
"prim.if", inputs={"input": gen_name(64)}, outputs=[gen_name(65)]) pattern_loop_block.add_layer(
if_layer11 = pattern_block_block_block.layers[list( "prim.getitem",
pattern_block_block_block.layers.keys())[-1]] inputs={"list": gen_name(65),
pattern_block_block_block_block = PaddleGraph( "element": gen_name(72)},
if_layer11, graph_type="dygraph") outputs=[gen_name(74.1)])
pattern_block_block_block_block.add_layer( pattern_loop_block.add_layer(
"prim.equal", "prim.floor",
inputs={"input": gen_name(54)}, inputs={"input": gen_name(74.1)},
outputs=[gen_name(66)]) outputs=[gen_name(75.1)])
pattern_block_block_block_block.add_layer( pattern_loop_block.add_layer(
"prim.equal", "prim.ne",
inputs={"input": gen_name(66)}, inputs={"x": gen_name(75.1),
outputs=[gen_name(65)]) "y": gen_name(74.1)},
if_layer11.add_block(pattern_block_block_block_block) outputs=[gen_name(76)])
pattern_block_block_block_block = PaddleGraph( pattern_loop_block.add_layer(
if_layer11, graph_type="dygraph") "prim.if",
pattern_block_block_block_block.add_layer( inputs={"input": gen_name(76)},
"prim.exception", outputs=[gen_name(77)])
inputs={"input": gen_name(23)}, if_layer13 = pattern_loop_block.layers[list(
outputs=[gen_name(67)]) pattern_loop_block.layers.keys())[-1]]
pattern_block_block_block_block.add_layer( pattern_loop_block_block = PaddleGraph(
"prim.equal", if_layer13, graph_type="dygraph")
inputs={"input": gen_name(30)}, pattern_loop_block_block.add_layer(
outputs=[gen_name(65)]) "prim.equal", inputs={}, outputs=[gen_name(77)], input=False)
if_layer11.add_block(pattern_block_block_block_block) if_layer13.add_block(pattern_loop_block_block)
if_layer11.inputs.update({ pattern_loop_block_block = PaddleGraph(
"input-0": gen_name(54), if_layer13, graph_type="dygraph")
"input-1": gen_name(23), pattern_loop_block_block.add_layer(
"input-2": gen_name(30) "prim.equal", inputs={}, outputs=[gen_name(77)], input=True)
}) if_layer13.add_block(pattern_loop_block_block)
pattern_block_block_block.add_layer( pattern_loop_block.add_layer(
"prim.is", "prim.add",
inputs={"x": gen_name(37), inputs={"x": gen_name(72)},
"y": gen_name(25)}, outputs=[gen_name(81)],
outputs=[gen_name(68)]) y=1)
pattern_block_block_block.add_layer( pattern_loop_block.add_layer(
"prim.if", inputs={"input": gen_name(68)}, outputs=[gen_name(69)]) "prim.lt",
if_layer12 = pattern_block_block_block.layers[list( inputs={"x": gen_name(81),
pattern_block_block_block.layers.keys())[-1]] "y": gen_name(70)},
pattern_block_block_block_block = PaddleGraph( outputs=[gen_name(82)])
if_layer12, graph_type="dygraph") pattern_loop_block.add_layer(
pattern_block_block_block_block.add_layer( "prim.and",
"prim.len", inputs={"input": gen_name(65)}, outputs=[gen_name(70)]) inputs={"x": gen_name(82),
pattern_block_block_block_block.add_layer( "y": gen_name(77)},
"prim.gt", outputs=[gen_name(83)])
inputs={"x": gen_name(70), pattern_loop_block.add_layer(
"y": gen_name(26.1)}, "prim.equal",
outputs=[gen_name(71)]) inputs={"input": gen_name(76)},
pattern_block_block_block_block.add_layer( outputs=[gen_name(74)])
"prim.equal", pattern_loop_block.add_layer(
inputs={"input": gen_name(24)}, "prim.equal",
outputs=[gen_name(72)]) inputs={"input": gen_name(81)},
pattern_block_block_block_block.add_layer( outputs=[gen_name(75)])
"prim.equal", loop_layer.add_block(pattern_loop_block)
inputs={"input": gen_name(26.1)}, loop_layer.inputs.update({
outputs=[gen_name(73)]) "input-0": gen_name(65),
pattern_block_block_block_block.add_layer( "input-1": gen_name(72),
"prim.loop", "input-2": gen_name(72),
inputs={"input": gen_name(26.2)}, "input-3": gen_name(70)
outputs=[gen_name(74), gen_name(75), gen_name(76)]) })
loop_layer = pattern_block_block_block_block.layers[list( pattern_block_block_block_block.add_layer(
pattern_block_block_block_block.layers.keys())[-1]] "prim.if",
pattern_loop_block = PaddleGraph(loop_layer, graph_type="dygraph") inputs={"input": gen_name(74)},
pattern_loop_block.add_layer( outputs=[gen_name(84)])
"prim.getitem", if_layer15 = pattern_block_block_block_block.layers[list(
inputs={"list": gen_name(65), pattern_block_block_block_block.layers.keys())[-1]]
"element": gen_name(73)}, pattern_block_block_block_block_block = PaddleGraph(
outputs=[gen_name(74.1)]) if_layer15, graph_type="dygraph")
pattern_loop_block.add_layer( pattern_block_block_block_block_block.add_layer(
"prim.floor", "prim.warnings",
inputs={"input": gen_name(74.1)}, inputs={},
outputs=[gen_name(75.1)]) outputs=[gen_name(85)],
pattern_loop_block.add_layer( stacklevel=2,
"prim.ne", input="...")
inputs={"x": gen_name(75.1), if_layer15.add_block(pattern_block_block_block_block_block)
"y": gen_name(74.1)}, pattern_block_block_block_block_block = PaddleGraph(
outputs=[gen_name(76)]) if_layer15, graph_type="dygraph")
pattern_loop_block.add_layer( if_layer15.add_block(pattern_block_block_block_block_block)
"prim.if", if_layer12.add_block(pattern_block_block_block_block)
inputs={"input": gen_name(76)}, pattern_block_block_block_block = PaddleGraph(
outputs=[gen_name(77), gen_name(78)]) if_layer12, graph_type="dygraph")
if_layer13 = pattern_loop_block.layers[list( if_layer12.add_block(pattern_block_block_block_block)
pattern_loop_block.layers.keys())[-1]] if_layer12.inputs.update({
pattern_loop_block_block = PaddleGraph(if_layer13, graph_type="dygraph") "input-0": gen_name(65),
pattern_loop_block_block.add_layer( "input-1": gen_name(65),
"prim.equal", })
inputs={"input": gen_name(24)}, pattern_block_block_block.add_layer(
outputs=[gen_name(77)]) "prim.list", inputs={}, outputs=[gen_name(86)])
pattern_loop_block_block.add_layer( pattern_block_block_block.add_layer(
"prim.equal", "prim.loop",
inputs={"input": gen_name(76)}, inputs={},
outputs=[gen_name(78)]) outputs=[gen_name(87), gen_name(88)],
if_layer13.add_block(pattern_loop_block_block) input=2)
pattern_loop_block_block = PaddleGraph(if_layer13, graph_type="dygraph") loop_layer = pattern_block_block_block.layers[list(
pattern_loop_block_block.add_layer( pattern_block_block_block.layers.keys())[-1]]
"prim.equal", pattern_loop_block = PaddleGraph(loop_layer, graph_type="dygraph")
inputs={"input": gen_name(33)}, pattern_loop_block.add_layer(
outputs=[gen_name(77)]) "prim.add",
pattern_loop_block_block.add_layer( inputs={"x": gen_name(88)},
"prim.equal", outputs=[gen_name(89)],
inputs={"input": gen_name(33)}, y=2)
outputs=[gen_name(78)]) pattern_loop_block.add_layer(
if_layer13.add_block(pattern_loop_block_block) "prim.shape_dim",
if_layer13.inputs.update({ inputs={"input": gen_name(34),
"input-0": gen_name(24), "dim": gen_name(89)},
"input-1": gen_name(76), outputs=[gen_name(90)])
"input-2": gen_name(33), pattern_loop_block.add_layer(
"input-3": gen_name(33) "prim.float",
}) inputs={"input": gen_name(90)},
pattern_loop_block.add_layer( outputs=[gen_name(91)])
"prim.if", pattern_loop_block.add_layer(
inputs={"input": gen_name(76)}, "prim.getitem",
outputs=[gen_name(79), gen_name(80)]) inputs={"list": gen_name(65),
if_layer14 = pattern_loop_block.layers[list( "element": gen_name(88)},
pattern_loop_block.layers.keys())[-1]] outputs=[gen_name(92)])
pattern_loop_block_block = PaddleGraph(if_layer14, graph_type="dygraph") pattern_loop_block.add_layer(
pattern_loop_block_block.add_layer( "prim.mul",
"prim.equal", inputs={"x": gen_name(91),
inputs={"input": gen_name(77)}, "y": gen_name(92)},
outputs=[gen_name(79)]) outputs=[gen_name(93)])
pattern_loop_block_block.add_layer( pattern_loop_block.add_layer(
"prim.equal", "prim.floor",
inputs={"input": gen_name(78)}, inputs={"input": gen_name(93)},
outputs=[gen_name(80)]) outputs=[gen_name(94)])
if_layer14.add_block(pattern_loop_block_block) pattern_loop_block.add_layer(
pattern_loop_block_block = PaddleGraph(if_layer14, graph_type="dygraph") "prim.append",
pattern_loop_block_block.add_layer( inputs={"list": gen_name(86),
"prim.equal", "element": gen_name(94)},
inputs={"input": gen_name(22)}, outputs=[])
outputs=[gen_name(79)]) loop_layer.add_block(pattern_loop_block)
pattern_loop_block_block.add_layer( loop_layer.inputs.update({
"prim.equal", "input-0": gen_name(34),
inputs={"input": gen_name(76)}, "input-1": gen_name(65),
outputs=[gen_name(80)]) "input-2": gen_name(86)
if_layer14.add_block(pattern_loop_block_block) })
if_layer14.inputs.update({ pattern_block_block_block.add_layer(
"input-0": gen_name(77), "prim.equal",
"input-1": gen_name(78), inputs={"input": gen_name(86)},
"input-2": gen_name(22), outputs=[gen_name(61)])
"input-3": gen_name(76) if_layer9.add_block(pattern_block_block_block)
}) if_layer9.inputs.update({
pattern_loop_block.add_layer( "input-0": gen_name(51),
"prim.add", "input-1": gen_name(54),
inputs={"x": gen_name(73), "input-2": gen_name(54),
"y": gen_name(27)}, "input-3": gen_name(37),
outputs=[gen_name(81)]) "input-4": gen_name(34)
pattern_loop_block.add_layer( })
"prim.lt", pattern_block_block.add_layer(
inputs={"x": gen_name(81), "prim.getitem",
"y": gen_name(70)}, inputs={"list": gen_name(11)},
outputs=[gen_name(82)]) outputs=[gen_name(95)],
pattern_loop_block.add_layer( element=0)
"prim.and", pattern_block_block.add_layer(
inputs={"x": gen_name(82), "prim.getitem",
"y": gen_name(79)}, inputs={"list": gen_name(11)},
outputs=[gen_name(83)]) outputs=[gen_name(96)],
pattern_loop_block.add_layer( element=1)
"prim.equal", pattern_block_block.add_layer(
inputs={"input": gen_name(80)}, "prim.isinstance",
outputs=[gen_name(74)]) inputs={"input": gen_name(61)},
pattern_loop_block.add_layer( outputs=["interpolate-input-0_isinstance"],
"prim.equal", cls="paddle.fluid.Variable")
inputs={"input": gen_name(81)}, pattern_block_block.add_layer(
outputs=[gen_name(75)]) "prim.if", {"input": "interpolate-input-0_isinstance"},
loop_layer.add_block(pattern_loop_block) outputs=["interpolate-input-0_if1"])
loop_layer.inputs.update({ if_layer_isinstance = pattern_block_block.layers[list(
"input-0": gen_name(65), pattern_block_block.layers.keys())[-1]]
"input-1": gen_name(73), pattern_block_block_block = PaddleGraph(
"input-2": gen_name(24), if_layer_isinstance, graph_type="dygraph")
"input-3": gen_name(33), pattern_block_block_block.add_layer(
"input-4": gen_name(33), "prim.var2list",
"input-5": gen_name(22), inputs={"input": gen_name(61)},
"input-6": gen_name(73), outputs=[gen_name(61)])
"input-7": gen_name(27), if_layer_isinstance.add_block(pattern_block_block_block)
"input-8": gen_name(70) pattern_block_block_block = PaddleGraph(
}) if_layer_isinstance, graph_type="dygraph")
pattern_block_block_block_block.add_layer( if_layer_isinstance.add_block(pattern_block_block_block)
"prim.if", inputs={"input": gen_name(74)}, outputs=[gen_name(84)]) if_layer_isinstance.inputs["input-0"] = gen_name(61)
if_layer15 = pattern_block_block_block_block.layers[list( pattern_block_block.add_layer(
pattern_block_block_block_block.layers.keys())[-1]] "prim.assert",
pattern_block_block_block_block_block = PaddleGraph( inputs={"key": gen_name(95),
if_layer15, graph_type="dygraph") "value": gen_name(96)},
pattern_block_block_block_block_block.add_layer( outputs=[gen_name(97) + "_assert"],
"prim.warnings", type="eq")
inputs={"input": gen_name(26)}, pattern_block_block.add_layer(
outputs=[gen_name(85)], "paddle.nn.functional.interpolate",
stacklevel=2) inputs={
if_layer15.add_block(pattern_block_block_block_block_block) "input": "interpolate-input-0",
pattern_block_block_block_block_block = PaddleGraph( "size": gen_name(61),
if_layer15, graph_type="dygraph") "scale_factor": gen_name(95)
if_layer15.add_block(pattern_block_block_block_block_block) },
if_layer15.inputs["input-0"] = gen_name(26) outputs=[gen_name(97)],
if_layer12.add_block(pattern_block_block_block_block) align_corners=False,
pattern_block_block_block_block = PaddleGraph( align_mode=0)
if_layer12, graph_type="dygraph") pattern_block_block.add_layer(
if_layer12.add_block(pattern_block_block_block_block) "prim.equal",
if_layer12.inputs.update({ inputs={"input": gen_name(97)},
"input-0": gen_name(65), outputs=[gen_name(20)])
"input-1": gen_name(26.1), if_layer2.add_block(pattern_block_block)
"input-2": gen_name(26.2), pattern_block_block = PaddleGraph(if_layer2, graph_type="dygraph")
"input-3": gen_name(65), pattern_block_block.add_layer(
"input-4": gen_name(24), "fluid.layers.shape",
"input-5": gen_name(33), inputs={"input": "interpolate-input-0"},
"input-6": gen_name(33), outputs=[gen_name(98)])
"input-7": gen_name(22), pattern_block_block.add_layer(
"input-8": gen_name(27), "prim.len",
"input-9": gen_name(26) inputs={"input": gen_name(98)},
}) outputs=[gen_name(98)])
pattern_block_block_block.add_layer( pattern_block_block.add_layer(
"prim.list", inputs={}, outputs=[gen_name(86)]) "prim.eq",
pattern_block_block_block.add_layer( inputs={"x": gen_name(98)},
"prim.loop", outputs=[gen_name(99)],
inputs={"input": gen_name(2)}, y=5)
outputs=[gen_name(87), gen_name(88)]) pattern_block_block.add_layer(
loop_layer = pattern_block_block_block.layers[list( "prim.if",
pattern_block_block_block.layers.keys())[-1]] inputs={"input": gen_name(99)},
pattern_loop_block = PaddleGraph(loop_layer, graph_type="dygraph") outputs=[gen_name(100)])
pattern_loop_block.add_layer( if_layer16 = pattern_block_block.layers[list(
"prim.add", pattern_block_block.layers.keys())[-1]]
inputs={"x": gen_name(88), pattern_block_block_block = PaddleGraph(
"y": gen_name(28)}, if_layer16, graph_type="dygraph")
outputs=[gen_name(89)]) pattern_block_block_block.add_layer(
pattern_loop_block.add_layer( "prim.exception",
"prim.shape", inputs={},
inputs={"input": gen_name(34)}, outputs=[gen_name(101)],
outputs=[gen_name(90)]) input="Exception")
pattern_loop_block.add_layer( if_layer16.add_block(pattern_block_block_block)
"prim.float", pattern_block_block_block = PaddleGraph(
inputs={"input": gen_name(90)}, if_layer16, graph_type="dygraph")
outputs=[gen_name(91)]) pattern_block_block_block.add_layer(
pattern_loop_block.add_layer( "prim.exception",
"prim.getitem", inputs={},
inputs={"list": gen_name(65), outputs=[gen_name(102)],
"element": gen_name(88)}, input="Exception")
outputs=[gen_name(92)]) if_layer16.add_block(pattern_block_block_block)
pattern_loop_block.add_layer( pattern_block_block.add_layer(
"prim.mul", "prim.equal", inputs={}, outputs=[gen_name(20)], input=None)
inputs={"x": gen_name(91), if_layer2.add_block(pattern_block_block)
"y": gen_name(92)}, if_layer2.inputs.update({
outputs=[gen_name(93)]) "input-0": gen_name(13),
pattern_loop_block.add_layer( "input-1": gen_name(13),
"prim.floor", "input-2": "interpolate-input-0",
inputs={"input": gen_name(93)}, "input-3": gen_name(11),
outputs=[gen_name(94)]) "input-5": gen_name(11),
pattern_loop_block.add_layer( })
"prim.append", pattern_block.add_layer(
inputs={"list": gen_name(86), "prim.equal",
"element": gen_name(94)}, inputs={"input": gen_name(20)},
outputs=[]) outputs=[gen_name(16)])
loop_layer.add_block(pattern_loop_block) if_layer1.add_block(pattern_block)
loop_layer.inputs.update({ if_layer1.inputs.update({
"input-1": gen_name(28), "input-2": "interpolate-input-0",
"input-2": gen_name(34), "input-4": gen_name(13),
"input-3": gen_name(65), "input-7": gen_name(11),
"input-5": gen_name(86) "input-9": gen_name(11),
}) "input-11": "interpolate-input-0",
pattern_block_block_block.add_layer( "input-12": "interpolate-input-0",
"prim.equal", })
inputs={"input": gen_name(86)}, self.pattern.build(inputs={
outputs=[gen_name(63)]) "input-0": "interpolate-input-0",
if_layer10.add_block(pattern_block_block_block) "input-1": "interpolate-input-1"
if_layer10.inputs.update({ })
"input-0": gen_name(61), else:
"input-1": gen_name(54), self.pattern.add_layer(
"input-2": gen_name(25), "fluid.layers.shape",
"input-3": gen_name(54), inputs={"input": "interpolate-input-0"},
"input-4": gen_name(23), outputs=[gen_name(9)])
"input-5": gen_name(30), self.pattern.add_layer(
"input-6": gen_name(37), "prim.len",
"input-7": gen_name(25), inputs={"input": gen_name(9)},
"input-8": gen_name(26.1), outputs=[gen_name(9)])
"input-9": gen_name(26.2), self.pattern.add_layer(
"input-10": gen_name(24), "prim.sub",
"input-11": gen_name(33), inputs={"x": gen_name(9)},
"input-12": gen_name(33), outputs=[gen_name(10)],
"input-13": gen_name(22), y=2)
"input-14": gen_name(27), self.pattern.add_layer(
"input-15": gen_name(26), "prim.list", inputs={}, outputs=[gen_name(11)])
"input-16": gen_name(2), self.pattern.add_layer(
"input-17": gen_name(28), "prim.loop",
"input-18": gen_name(34) inputs={"input": gen_name(10)},
}) outputs=[gen_name(12.1), gen_name(12.2)])
pattern_block_block.add_layer( loop_layer = self.pattern.layers[list(self.pattern.layers.keys())[
"prim.getitem", -1]]
inputs={"list": gen_name(11), pattern_block = PaddleGraph(loop_layer, graph_type="dygraph")
"element": gen_name(5)}, pattern_block.add_layer(
outputs=[gen_name(95)]) "prim.append",
pattern_block_block.add_layer( inputs={"list": gen_name(11)},
"prim.getitem", outputs=[],
inputs={"list": gen_name(11), element=None)
"element": gen_name(4)}, loop_layer.inputs["input-0"] = gen_name(11)
outputs=[gen_name(96)]) loop_layer.add_block(pattern_block)
pattern_block_block.add_layer( self.pattern.add_layer(
"prim.assert", "prim.tuple",
inputs={"key": gen_name(95), inputs={
"value": gen_name(96)}, "input0": "interpolate-input-0",
outputs=[gen_name(97) + "_assert"], "input1": "interpolate-input-1",
type="eq") },
pattern_block_block.add_layer( outputs=[gen_name(13)],
"fluid.layers.interpolate", input2=None,
inputs={ input3=None)
"input": "interpolate-input-0", self.pattern.add_layer(
"out_shape": gen_name(63), "fluid.layers.shape",
"scale": gen_name(95) inputs={"input": "interpolate-input-0"},
}, outputs=[gen_name(14)])
outputs=[gen_name(97)], self.pattern.add_layer(
align_corners=False, "prim.len",
align_mode=0) inputs={"input": gen_name(14)},
pattern_block_block.add_layer( outputs=[gen_name(14)])
"prim.equal", self.pattern.add_layer(
inputs={"input": gen_name(97)}, "prim.eq",
outputs=[gen_name(20)]) inputs={"x": gen_name(14)},
if_layer2.add_block(pattern_block_block) outputs=[gen_name(15)],
pattern_block_block = PaddleGraph(if_layer2, graph_type="dygraph") y=3)
pattern_block_block.add_layer( self.pattern.add_layer(
"prim.shape", "prim.if",
inputs={"input": "interpolate-input-0"}, inputs={"input": gen_name(15)},
outputs=[gen_name(98)]) outputs=[gen_name(16)])
pattern_block_block.add_layer( if_layer1 = self.pattern.layers[list(self.pattern.layers.keys())[
"prim.len", inputs={"input": gen_name(98)}, outputs=[gen_name(98)]) -1]]
pattern_block_block.add_layer( pattern_block = PaddleGraph(if_layer1, graph_type="dygraph")
"prim.eq", pattern_block.add_layer(
inputs={"x": gen_name(98), "prim.exception",
"y": gen_name(7)}, inputs={},
outputs=[gen_name(99)]) outputs=[gen_name(17)],
pattern_block_block.add_layer( input="Exception")
"prim.if", inputs={"input": gen_name(99)}, outputs=[gen_name(100)]) pattern_block.add_layer(
if_layer16 = pattern_block_block.layers[list( "prim.equal", inputs={}, outputs=[gen_name(16)], input=None)
pattern_block_block.layers.keys())[-1]] if_layer1.add_block(pattern_block)
pattern_block_block_block = PaddleGraph( pattern_block = PaddleGraph(if_layer1, graph_type="dygraph")
if_layer16, graph_type="dygraph") pattern_block.add_layer(
pattern_block_block_block.add_layer( "fluid.layers.shape",
"prim.exception", inputs={"input": "interpolate-input-0"},
inputs={"input": gen_name(0)}, outputs=[gen_name(18)])
outputs=[gen_name(101)]) pattern_block.add_layer(
if_layer16.add_block(pattern_block_block_block) "prim.len",
pattern_block_block_block = PaddleGraph( inputs={"input": gen_name(18)},
if_layer16, graph_type="dygraph") outputs=[gen_name(18)])
pattern_block_block_block.add_layer( pattern_block.add_layer(
"prim.exception", "prim.eq",
inputs={"input": gen_name(0)}, inputs={"x": gen_name(18)},
outputs=[gen_name(102)]) outputs=[gen_name(19)],
if_layer16.add_block(pattern_block_block_block) y=4)
if_layer16.inputs.update({ pattern_block.add_layer(
"input-0": gen_name(0), "prim.if",
"input-1": gen_name(0) inputs={"input": gen_name(19)},
}) outputs=[gen_name(20)])
pattern_block_block.add_layer( if_layer2 = pattern_block.layers[list(pattern_block.layers.keys())[
"prim.equal", inputs={"input": gen_name(8)}, -1]]
outputs=[gen_name(20)]) pattern_block_block = PaddleGraph(if_layer2, graph_type="dygraph")
if_layer2.add_block(pattern_block_block) pattern_block_block.add_layer(
if_layer2.inputs.update({ "prim.tuple_unpack",
"input-0": gen_name(13), inputs={"input": gen_name(13)},
"input-1": gen_name(2), outputs=[
"input-2": gen_name(2), gen_name(34), gen_name(35), gen_name(36), gen_name(37)
"input-3": gen_name(11), ])
"input-4": gen_name(5), pattern_block_block.add_layer(
"input-5": gen_name(11), "prim.is",
"input-6": gen_name(4), inputs={"x": gen_name(35)},
"input-7": "interpolate-input-0", outputs=[gen_name(38)],
"input-8": "interpolate-input-0", y=None)
"input-9": gen_name(7), pattern_block_block.add_layer(
"input-10": gen_name(0), "prim.if",
"input-11": gen_name(0), inputs={"input": gen_name(38)},
"input-12": gen_name(8) outputs=[gen_name(39), gen_name(40)])
}) if_layer3 = pattern_block_block.layers[list(
pattern_block.add_layer( pattern_block_block.layers.keys())[-1]]
"prim.equal", pattern_block_block_block = PaddleGraph(
inputs={"input": gen_name(20)}, if_layer3, graph_type="dygraph")
outputs=[gen_name(16)]) pattern_block_block_block.add_layer(
if_layer1.add_block(pattern_block) "prim.is",
if_layer1.inputs.update({ inputs={"x": gen_name(36)},
"input-0": gen_name(0), outputs=[gen_name(41)],
"input-1": gen_name(8), y=None)
"input-2": "interpolate-input-0", pattern_block_block_block.add_layer(
"input-3": gen_name(6), "prim.equal",
"input-4": gen_name(13), inputs={"input": gen_name(41)},
"input-5": gen_name(2), outputs=[gen_name(39)])
"input-6": gen_name(2), pattern_block_block_block.add_layer(
"input-7": gen_name(11), "prim.equal",
"input-8": gen_name(5), inputs={"input": gen_name(35)},
"input-9": gen_name(11), outputs=[gen_name(40)])
"input-10": gen_name(4), if_layer3.add_block(pattern_block_block_block)
"input-11": "interpolate-input-0", pattern_block_block_block = PaddleGraph(
"input-12": "interpolate-input-0", if_layer3, graph_type="dygraph")
"input-13": gen_name(7), pattern_block_block_block.add_layer(
"input-14": gen_name(0), "prim.equal",
"input-15": gen_name(0), inputs={"input": gen_name(35)},
"input-16": gen_name(8) outputs=[gen_name(42)])
}) pattern_block_block_block.add_layer(
self.pattern.build(inputs={ "prim.equal", inputs={}, outputs=[gen_name(39)], input=False)
"input-0": "interpolate-input-0", pattern_block_block_block.add_layer(
"input-1": "interpolate-input-1", "prim.equal",
"input-2": "interpolate-input-2", inputs={"input": gen_name(35)},
}) outputs=[gen_name(40)])
if_layer3.add_block(pattern_block_block_block)
if_layer3.inputs.update({
"input-0": gen_name(36),
'input-1': gen_name(35),
'input-2': gen_name(35),
})
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(39)},
outputs=[gen_name(43)])
if_layer4 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer4, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.exception",
inputs={},
outputs=[gen_name(44)],
input="Exception")
if_layer4.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer4, graph_type="dygraph")
if_layer4.add_block(pattern_block_block_block)
pattern_block_block.add_layer(
"prim.isnot",
inputs={"x": gen_name(40)},
outputs=[gen_name(45)],
y=None)
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(45)},
outputs=[gen_name(46), gen_name(47)])
if_layer5 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer5, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(40)},
outputs=[gen_name(48)])
pattern_block_block_block.add_layer(
"prim.isnot",
inputs={"x": gen_name(36)},
outputs=[gen_name(49)],
y=None)
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(49)},
outputs=[gen_name(46)])
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(48)},
outputs=[gen_name(47)])
if_layer5.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer5, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(46)], input=False)
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(40)},
outputs=[gen_name(47)])
if_layer5.add_block(pattern_block_block_block)
if_layer5.inputs.update({
"input-0": gen_name(40),
"input-1": gen_name(36),
"input-3": gen_name(40)
})
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(46)},
outputs=[gen_name(50), gen_name(51)])
if_layer6 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer6, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.exception",
inputs={},
outputs=[gen_name(52)],
input="Exception")
pattern_block_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(50)], input=None)
pattern_block_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(51)], input=None)
if_layer6.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer6, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(36)},
outputs=[gen_name(50)])
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(47)},
outputs=[gen_name(51)])
if_layer6.add_block(pattern_block_block_block)
if_layer6.inputs.update({
"input-0": gen_name(36),
"input-1": gen_name(47)
})
pattern_block_block.add_layer(
"prim.isnot",
inputs={"x": gen_name(50)},
outputs=[gen_name(53)],
y=None)
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(53)},
outputs=[gen_name(54)])
if_layer7 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer7, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(50)},
outputs=[gen_name(55)])
pattern_block_block_block.add_layer(
"prim.len",
inputs={"input": gen_name(55)},
outputs=[gen_name(56)])
pattern_block_block_block.add_layer(
"prim.ne",
inputs={"x": gen_name(56)},
outputs=[gen_name(57)],
y=2)
pattern_block_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(57)},
outputs=[gen_name(58)])
if_layer8 = pattern_block_block_block.layers[list(
pattern_block_block_block.layers.keys())[-1]]
pattern_block_block_block_block = PaddleGraph(
if_layer8, graph_type="dygraph")
pattern_block_block_block_block.add_layer(
"prim.exception",
inputs={},
outputs=[gen_name(59)],
input="Exception")
if_layer8.add_block(pattern_block_block_block_block)
pattern_block_block_block_block = PaddleGraph(
if_layer8, graph_type="dygraph")
if_layer8.add_block(pattern_block_block_block_block)
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(55)},
outputs=[gen_name(54)])
if_layer7.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer7, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(50)},
outputs=[gen_name(54)])
if_layer7.add_block(pattern_block_block_block)
if_layer7.inputs.update({
"input-0": gen_name(50),
"input-1": gen_name(50)
})
pattern_block_block.add_layer(
"prim.isnot",
inputs={"x": gen_name(51)},
outputs=[gen_name(60)],
y=None)
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(60)},
outputs=[gen_name(61)])
if_layer9 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer9, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(51)},
outputs=[gen_name(62)])
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(62)},
outputs=[gen_name(61)])
if_layer9.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer9, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(61)], input=None)
if_layer9.add_block(pattern_block_block_block)
if_layer9.inputs.update({"input-0": gen_name(51)})
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(60)},
outputs=[gen_name(63)])
if_layer10 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer10, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(61)},
outputs=[gen_name(63)])
if_layer10.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer10, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.isnot",
inputs={"x": gen_name(54)},
outputs=[gen_name(64)],
y=None)
pattern_block_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(64)},
outputs=[gen_name(65)])
if_layer11 = pattern_block_block_block.layers[list(
pattern_block_block_block.layers.keys())[-1]]
pattern_block_block_block_block = PaddleGraph(
if_layer11, graph_type="dygraph")
pattern_block_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(54)},
outputs=[gen_name(66)])
pattern_block_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(66)},
outputs=[gen_name(65)])
if_layer11.add_block(pattern_block_block_block_block)
pattern_block_block_block_block = PaddleGraph(
if_layer11, graph_type="dygraph")
pattern_block_block_block_block.add_layer(
"prim.exception",
inputs={},
outputs=[gen_name(67)],
input="Exception")
pattern_block_block_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(65)], input=None)
if_layer11.add_block(pattern_block_block_block_block)
if_layer11.inputs.update({"input-0": gen_name(54), })
pattern_block_block_block.add_layer(
"prim.is",
inputs={"x": gen_name(37)},
outputs=[gen_name(68)],
y=None)
pattern_block_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(68)},
outputs=[gen_name(69)])
if_layer12 = pattern_block_block_block.layers[list(
pattern_block_block_block.layers.keys())[-1]]
pattern_block_block_block_block = PaddleGraph(
if_layer12, graph_type="dygraph")
pattern_block_block_block_block.add_layer(
"prim.len",
inputs={"input": gen_name(65)},
outputs=[gen_name(70)])
pattern_block_block_block_block.add_layer(
"prim.gt",
inputs={"x": gen_name(70)},
outputs=[gen_name(71)],
y=0)
pattern_block_block_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(72)], input=0)
pattern_block_block_block_block.add_layer(
"prim.loop",
inputs={},
outputs=[gen_name(74), gen_name(75), gen_name(76.1)],
input=2147483647)
loop_layer = pattern_block_block_block_block.layers[list(
pattern_block_block_block_block.layers.keys())[-1]]
pattern_loop_block = PaddleGraph(loop_layer, graph_type="dygraph")
pattern_loop_block.add_layer(
"prim.getitem",
inputs={"list": gen_name(65),
"element": gen_name(72)},
outputs=[gen_name(74.1)])
pattern_loop_block.add_layer(
"prim.floor",
inputs={"input": gen_name(74.1)},
outputs=[gen_name(75.1)])
pattern_loop_block.add_layer(
"prim.ne",
inputs={"x": gen_name(75.1),
"y": gen_name(74.1)},
outputs=[gen_name(76)])
pattern_loop_block.add_layer(
"prim.if",
inputs={"input": gen_name(76)},
outputs=[gen_name(77), gen_name(78)])
if_layer13 = pattern_loop_block.layers[list(
pattern_loop_block.layers.keys())[-1]]
pattern_loop_block_block = PaddleGraph(
if_layer13, graph_type="dygraph")
pattern_loop_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(77)], input=False)
pattern_loop_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(76)},
outputs=[gen_name(78)])
if_layer13.add_block(pattern_loop_block_block)
pattern_loop_block_block = PaddleGraph(
if_layer13, graph_type="dygraph")
pattern_loop_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(77)], input=None)
pattern_loop_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(78)], input=None)
if_layer13.add_block(pattern_loop_block_block)
if_layer13.inputs.update({"input-0": gen_name(76), })
pattern_loop_block.add_layer(
"prim.if",
inputs={"input": gen_name(76)},
outputs=[gen_name(79), gen_name(80)])
if_layer14 = pattern_loop_block.layers[list(
pattern_loop_block.layers.keys())[-1]]
pattern_loop_block_block = PaddleGraph(
if_layer14, graph_type="dygraph")
pattern_loop_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(77)},
outputs=[gen_name(79)])
pattern_loop_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(78)},
outputs=[gen_name(80)])
if_layer14.add_block(pattern_loop_block_block)
pattern_loop_block_block = PaddleGraph(
if_layer14, graph_type="dygraph")
pattern_loop_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(79)], input=True)
pattern_loop_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(76)},
outputs=[gen_name(80)])
if_layer14.add_block(pattern_loop_block_block)
if_layer14.inputs.update({
"input-0": gen_name(77),
"input-1": gen_name(78),
"input-2": gen_name(76)
})
pattern_loop_block.add_layer(
"prim.add",
inputs={"x": gen_name(72)},
outputs=[gen_name(81)],
y=1)
pattern_loop_block.add_layer(
"prim.lt",
inputs={"x": gen_name(81),
"y": gen_name(70)},
outputs=[gen_name(82)])
pattern_loop_block.add_layer(
"prim.and",
inputs={"x": gen_name(82),
"y": gen_name(79)},
outputs=[gen_name(83)])
pattern_loop_block.add_layer(
"prim.equal",
inputs={"input": gen_name(80)},
outputs=[gen_name(74)])
pattern_loop_block.add_layer(
"prim.equal",
inputs={"input": gen_name(81)},
outputs=[gen_name(75)])
loop_layer.add_block(pattern_loop_block)
loop_layer.inputs.update({
"input-0": gen_name(65),
"input-1": gen_name(72),
"input-2": gen_name(72),
"input-3": gen_name(70)
})
pattern_block_block_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(74)},
outputs=[gen_name(84)])
if_layer15 = pattern_block_block_block_block.layers[list(
pattern_block_block_block_block.layers.keys())[-1]]
pattern_block_block_block_block_block = PaddleGraph(
if_layer15, graph_type="dygraph")
pattern_block_block_block_block_block.add_layer(
"prim.warnings",
inputs={},
outputs=[gen_name(85)],
stacklevel=2,
input="...")
if_layer15.add_block(pattern_block_block_block_block_block)
pattern_block_block_block_block_block = PaddleGraph(
if_layer15, graph_type="dygraph")
if_layer15.add_block(pattern_block_block_block_block_block)
if_layer12.add_block(pattern_block_block_block_block)
pattern_block_block_block_block = PaddleGraph(
if_layer12, graph_type="dygraph")
if_layer12.add_block(pattern_block_block_block_block)
if_layer12.inputs.update({
"input-0": gen_name(65),
"input-1": gen_name(65),
})
pattern_block_block_block.add_layer(
"prim.list", inputs={}, outputs=[gen_name(86)])
pattern_block_block_block.add_layer(
"prim.loop",
inputs={},
outputs=[gen_name(87), gen_name(88)],
input=2)
loop_layer = pattern_block_block_block.layers[list(
pattern_block_block_block.layers.keys())[-1]]
pattern_loop_block = PaddleGraph(loop_layer, graph_type="dygraph")
pattern_loop_block.add_layer(
"prim.add",
inputs={"x": gen_name(88)},
outputs=[gen_name(89)],
y=2)
pattern_loop_block.add_layer(
"prim.shape_dim",
inputs={"input": gen_name(34),
"dim": gen_name(89)},
outputs=[gen_name(90)])
pattern_loop_block.add_layer(
"prim.float",
inputs={"input": gen_name(90)},
outputs=[gen_name(91)])
pattern_loop_block.add_layer(
"prim.getitem",
inputs={"list": gen_name(65),
"element": gen_name(88)},
outputs=[gen_name(92)])
pattern_loop_block.add_layer(
"prim.mul",
inputs={"x": gen_name(91),
"y": gen_name(92)},
outputs=[gen_name(93)])
pattern_loop_block.add_layer(
"prim.floor",
inputs={"input": gen_name(93)},
outputs=[gen_name(94)])
pattern_loop_block.add_layer(
"prim.append",
inputs={"list": gen_name(86),
"element": gen_name(94)},
outputs=[])
loop_layer.add_block(pattern_loop_block)
loop_layer.inputs.update({
"input-0": gen_name(34),
"input-1": gen_name(65),
"input-2": gen_name(86)
})
pattern_block_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(86)},
outputs=[gen_name(63)])
if_layer10.add_block(pattern_block_block_block)
if_layer10.inputs.update({
"input-0": gen_name(61),
"input-1": gen_name(54),
"input-2": gen_name(54),
"input-3": gen_name(37),
"input-4": gen_name(34)
})
pattern_block_block.add_layer(
"prim.getitem",
inputs={"list": gen_name(11)},
outputs=[gen_name(95)],
element=0)
pattern_block_block.add_layer(
"prim.getitem",
inputs={"list": gen_name(11)},
outputs=[gen_name(96)],
element=1)
pattern_block_block.add_layer(
"prim.isinstance",
inputs={"input": gen_name(63)},
outputs=["interpolate-input-0_isinstance"],
cls="paddle.fluid.Variable")
pattern_block_block.add_layer(
"prim.if", {"input": "interpolate-input-0_isinstance"},
outputs=["interpolate-input-0_if1"])
if_layer_isinstance = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer_isinstance, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.var2list",
inputs={"input": gen_name(63)},
outputs=[gen_name(63)])
if_layer_isinstance.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer_isinstance, graph_type="dygraph")
if_layer_isinstance.add_block(pattern_block_block_block)
if_layer_isinstance.inputs["input-0"] = gen_name(63)
pattern_block_block.add_layer(
"prim.assert",
inputs={"key": gen_name(95),
"value": gen_name(96)},
outputs=[gen_name(97) + "_assert"],
type="eq")
pattern_block_block.add_layer(
"paddle.nn.functional.interpolate",
inputs={
"input": "interpolate-input-0",
"size": gen_name(63),
"scale_factor": gen_name(95)
},
outputs=[gen_name(97)],
align_corners=False,
align_mode=0)
pattern_block_block.add_layer(
"prim.equal",
inputs={"input": gen_name(97)},
outputs=[gen_name(20)])
if_layer2.add_block(pattern_block_block)
pattern_block_block = PaddleGraph(if_layer2, graph_type="dygraph")
pattern_block_block.add_layer(
"fluid.layers.shape",
inputs={"input": "interpolate-input-0"},
outputs=[gen_name(98)])
pattern_block_block.add_layer(
"prim.len",
inputs={"input": gen_name(98)},
outputs=[gen_name(98)])
pattern_block_block.add_layer(
"prim.eq",
inputs={"x": gen_name(98)},
outputs=[gen_name(99)],
y=5)
pattern_block_block.add_layer(
"prim.if",
inputs={"input": gen_name(99)},
outputs=[gen_name(100)])
if_layer16 = pattern_block_block.layers[list(
pattern_block_block.layers.keys())[-1]]
pattern_block_block_block = PaddleGraph(
if_layer16, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.exception",
inputs={},
outputs=[gen_name(101)],
input="Exception")
if_layer16.add_block(pattern_block_block_block)
pattern_block_block_block = PaddleGraph(
if_layer16, graph_type="dygraph")
pattern_block_block_block.add_layer(
"prim.exception",
inputs={},
outputs=[gen_name(102)],
input="Exception")
if_layer16.add_block(pattern_block_block_block)
pattern_block_block.add_layer(
"prim.equal", inputs={}, outputs=[gen_name(20)], input=None)
if_layer2.add_block(pattern_block_block)
if_layer2.inputs.update({
"input-0": gen_name(13),
"input-1": gen_name(13),
"input-2": "interpolate-input-0",
"input-3": gen_name(11),
"input-5": gen_name(11),
})
pattern_block.add_layer(
"prim.equal",
inputs={"input": gen_name(20)},
outputs=[gen_name(16)])
if_layer1.add_block(pattern_block)
if_layer1.inputs.update({
"input-2": "interpolate-input-0",
"input-4": gen_name(13),
"input-7": gen_name(11),
"input-9": gen_name(11),
"input-11": "interpolate-input-0",
"input-12": "interpolate-input-0",
})
self.pattern.build(inputs={
"input-0": "interpolate-input-0",
"input-1": "interpolate-input-1"
})
def insert_new_layer(self, graph, parameters, matches): def insert_new_layer(self, graph, parameters, matches):
new_layer = self.gen_new_layer(parameters, matches) new_layers = self.gen_new_layer(parameters, matches)
new_layer_id = list(matches.keys())[0] new_layer_id = list(matches.keys())[0]
graph.layers[new_layer_id] = new_layer graph.layers[new_layer_id] = new_layers[0]
matches.pop(new_layer_id)
new_layer_id = list(matches.keys())[0]
graph.layers[new_layer_id] = new_layers[1]
block_layer = new_layers[1].blocks[0].layers.pop(
list(new_layers[1].blocks[0].layers.keys())[-1])
new_layers[1].blocks[0].layers[new_layer_id + ".0.0"] = block_layer
matches.pop(new_layer_id)
new_layer_id = list(matches.keys())[0]
graph.layers[new_layer_id] = new_layers[2]
matches.pop(new_layer_id) matches.pop(new_layer_id)
def gen_new_layer(self, parameters, matches): def gen_new_layer(self, parameters, matches):
layers = list()
layers_id = list(matches.keys()) layers_id = list(matches.keys())
layer = matches[layers_id[15]] layer = matches[layers_id[6]]
out_shape = layer.inputs["input1"] size = layer.inputs["input1"]
layer = matches[layers_id[21]] layer = matches[layers_id[92]]
layer.inputs["input"] = size
layers.append(layer)
layer = matches[layers_id[93]]
block_layer = layer.blocks[0].layers[list(layer.blocks[0].layers.keys())
[0]]
block_layer.inputs["input"] = size
block_layer.outputs[0] = size
layer.inputs["input-0"] = size
layers.append(layer)
layer = matches[layers_id[-1]]
outputs = layer.outputs outputs = layer.outputs
layer = matches[layers_id[128]] layer = matches[layers_id[96]]
layer.inputs.pop("scale") layer.inputs.pop("scale_factor")
layer.inputs["out_shape"] = out_shape layer.inputs["size"] = size
layer.outputs = outputs layer.outputs = outputs
return layer layers.append(layer)
return layers
...@@ -19,9 +19,14 @@ from x2paddle.optimizer.pass_manager import PassManager ...@@ -19,9 +19,14 @@ from x2paddle.optimizer.pass_manager import PassManager
class GraphOptimizer(object): class GraphOptimizer(object):
def __init__(self): def __init__(self):
self.passes = [ self.passes = [
"interpolate_bilinear_fuse_pass", "fc_fuse_pass", "constant_fuse_pass",
"adaptive_pool2d_fuse_pass", "batchnorm2d_fuse_pass", "batchnorm2d_fuse_pass",
"constant_fuse_pass", "reshape_fuse_pass", "dropout_fuse_pass" "interpolate_bilinear_fuse_pass",
"fc_fuse_pass",
# "interpolate_bilinear_fuse_pass",
# "fc_fuse_pass",
# "adaptive_pool2d_fuse_pass", "batchnorm2d_fuse_pass",
# "constant_fuse_pass", "reshape_fuse_pass", "dropout_fuse_pass"
] ]
def optimize(self, graph): def optimize(self, graph):
......
...@@ -34,7 +34,7 @@ class PatternMatcher(object): ...@@ -34,7 +34,7 @@ class PatternMatcher(object):
并将子图的id以拓扑排序存放到subgraph_id2layers。 并将子图的id以拓扑排序存放到subgraph_id2layers。
""" """
def get_subgraph(pattern, graph, start_index): def get_subgraph(pattern, graph, start_index, is_subblock=False):
pattern_index = 0 pattern_index = 0
pattern_id2layers = pattern.get_global_layers() pattern_id2layers = pattern.get_global_layers()
pattern_ids = list(pattern_id2layers.keys()) pattern_ids = list(pattern_id2layers.keys())
...@@ -49,13 +49,19 @@ class PatternMatcher(object): ...@@ -49,13 +49,19 @@ class PatternMatcher(object):
# 判断输入连接是否一致 # 判断输入连接是否一致
if layer_id in graph.edges_in: if layer_id in graph.edges_in:
if pattern_layer_id not in pattern.edges_in: if pattern_layer_id not in pattern.edges_in:
print("1--") if pattern_index == 0 or is_subblock:
return False return False
else:
subgraph_id2layers.pop(layer_id)
continue
else: else:
if len(graph.edges_in[layer_id]) != len( if len(graph.edges_in[layer_id]) != len(
pattern.edges_in[pattern_layer_id]): pattern.edges_in[pattern_layer_id]):
print("2--") if pattern_index == 0 or is_subblock:
return False return False
else:
subgraph_id2layers.pop(layer_id)
continue
layer_in = graph.edges_in[layer_id] layer_in = graph.edges_in[layer_id]
pattern_layer_in = pattern.edges_in[pattern_layer_id] pattern_layer_in = pattern.edges_in[pattern_layer_id]
for i in range(len(layer_in)): for i in range(len(layer_in)):
...@@ -70,16 +76,22 @@ class PatternMatcher(object): ...@@ -70,16 +76,22 @@ class PatternMatcher(object):
# 判断pattern输入在pattern_ids的索引 # 判断pattern输入在pattern_ids的索引
# 和graph输入在subgraph_ids的索引一致 # 和graph输入在subgraph_ids的索引一致
continue continue
print("3--") if pattern_index == 0 or is_subblock:
return False return False
else:
subgraph_id2layers.pop(layer_id)
continue
# 判断subgraph中的节点是否被外部图使用到(如若被使用到则无效) # 判断subgraph中的节点是否被外部图使用到(如若被使用到则无效)
if layer_id in graph.edges_out: if layer_id in graph.edges_out:
if pattern_layer_id not in pattern.edges_out: if pattern_layer_id not in pattern.edges_out:
if not set(pattern_layer.outputs).issubset( if not set(pattern_layer.outputs).issubset(
pattern.outputs): pattern.outputs):
# 若pattern当前layer的输出是pattern的输出,则是正确的 # 若pattern当前layer的输出是pattern的输出,则是正确的
print("4--") if pattern_index == 0 or is_subblock:
return False return False
else:
subgraph_id2layers.pop(layer_id)
continue
else: else:
if len(graph.edges_out[layer_id]) != len( if len(graph.edges_out[layer_id]) != len(
pattern.edges_out[pattern_layer_id]): pattern.edges_out[pattern_layer_id]):
...@@ -87,27 +99,49 @@ class PatternMatcher(object): ...@@ -87,27 +99,49 @@ class PatternMatcher(object):
if not set(pattern_layer.outputs).issubset( if not set(pattern_layer.outputs).issubset(
pattern.outputs): pattern.outputs):
# 若pattern当前layer的输出是pattern的输出,则是正确的 # 若pattern当前layer的输出是pattern的输出,则是正确的
# print("5--") if pattern_index == 0 or is_subblock:
return False return False
else:
subgraph_id2layers.pop(layer_id)
continue
# 当为控制流时的处理 # 当为控制流时的处理
if layer.kernel == "prim.if" or layer.kernel == "prim.loop": if layer.kernel == "prim.if" or layer.kernel == "prim.loop":
if len(pattern_layer.blocks) != len(layer.blocks): if len(pattern_layer.blocks) != len(layer.blocks):
print("6--") if pattern_index == 0 or is_subblock:
return False return False
else:
subgraph_id2layers.pop(layer_id)
continue
is_subblock_match = True
for i, b in enumerate(pattern_layer.blocks): for i, b in enumerate(pattern_layer.blocks):
match_info = get_subgraph(pattern_layer.blocks[i], match_info = get_subgraph(
layer.blocks[i], 0) pattern_layer.blocks[i],
layer.blocks[i],
0,
is_subblock=True)
if match_info is not False: if match_info is not False:
subgraph_id2layers.update(match_info) subgraph_id2layers.update(match_info)
else: else:
print("7--") is_subblock_match = False
break
if not is_subblock_match:
if pattern_index == 0 or is_subblock:
return False return False
else:
index = list(subgraph_id2layers.keys()).index(
layer_id)
for key in list(subgraph_id2layers.keys())[
index:]:
subgraph_id2layers.pop(key)
continue
pattern_index += 1 pattern_index += 1
if pattern_index == len(pattern.layers): if pattern_index == len(pattern.layers):
return subgraph_id2layers return subgraph_id2layers
else: else:
if pattern_index == 0: if pattern_index == 0 or is_subblock:
return False return False
else:
continue
if pattern_index == len(pattern.layers): if pattern_index == len(pattern.layers):
return subgraph_id2layers return subgraph_id2layers
return False return False
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册