41
41
42
42
43
43
def insert_identity_op (model , op , as_first_node , approx ):
44
+ kwargs = {}
45
+ inp_ndims = 4 if as_first_node else 2
44
46
if approx :
45
47
zero_val = 0.000001
46
48
one_val = 0.999999
@@ -53,6 +55,9 @@ def insert_identity_op(model, op, as_first_node, approx):
53
55
val = np .asarray ([one_val ], dtype = np .float32 )
54
56
elif op in ["Identity" ]:
55
57
val = None
58
+ elif op == "Pad" :
59
+ # opset 11 and above: padding specified as input and not attribute
60
+ val = np .asarray ([0 ] * 2 * inp_ndims , dtype = np .int64 )
56
61
else :
57
62
return
58
63
@@ -62,7 +67,7 @@ def insert_identity_op(model, op, as_first_node, approx):
62
67
else :
63
68
model .set_initializer ("value" , val )
64
69
inplist = ["inp" if as_first_node else "div_out" , "value" ]
65
- identity_node = helper .make_node (op , inplist , ["ident_out" ])
70
+ identity_node = helper .make_node (op , inplist , ["ident_out" ], ** kwargs )
66
71
if as_first_node :
67
72
graph .node .insert (0 , identity_node )
68
73
graph .node [1 ].input [0 ] = "ident_out"
@@ -74,7 +79,7 @@ def insert_identity_op(model, op, as_first_node, approx):
74
79
75
80
76
81
# identity operations to be inserted
77
- @pytest .mark .parametrize ("op" , ["Add" , "Sub" , "Mul" , "Div" , "Identity" ])
82
+ @pytest .mark .parametrize ("op" , ["Add" , "Sub" , "Mul" , "Div" , "Identity" , "Pad" ])
78
83
@pytest .mark .parametrize ("approx" , [False , True ])
79
84
@pytest .mark .parametrize ("as_first_node" , [False , True ])
80
85
@pytest .mark .parametrize ("fork_before_id" , [False , True ])
0 commit comments