Skip to content

Commit 651c90f

Browse files
authored
Add Einsum Opset 12 support (#773)
1. Add opset 12 support for Einsum 2. Skip dropout, if and loop onnx-backend-test 3. Fix acosh, reduce_sum, split, squeeze and topk testcase in test_node.py Signed-off-by: Winnie Tsang <[email protected]>
1 parent 6ed3bf2 commit 651c90f

File tree

4 files changed

+34
-7
lines changed

4 files changed

+34
-7
lines changed

doc/support_status.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# ONNX-Tensorflow Support Status
22
|||
33
|-:|:-|
4-
|ONNX-Tensorflow Version|Master ( commit id: 6f5c155247e28ae0ceb2ce2615ce1483ffa27c43 )|
5-
|ONNX Version|Master ( commit id: b2ed660d0a065b8346816f2c3a95d79ca79b88c9 )|
6-
|Tensorflow Version|v2.3.0|
4+
|ONNX-Tensorflow Version|Master ( commit id: f64afb48034af7121341f4ba5d6f56e275c5aedb )|
5+
|ONNX Version|Master ( commit id: a7a0fec7f25cae567429af62b7eaaee1c3f0e247 )|
6+
|Tensorflow Version|v2.3.1|
77

88
Notes:
99
* Values that are new or updated from a previous opset version are in bold.
@@ -51,7 +51,7 @@ Notes:
5151
|Div|**1**|1|1|1|1|**6**|**7**|7|7|7|7|7|**13**:small_red_triangle:|Div|
5252
|Dropout|**1**|1|1|1|1|**6**|**7**|7|7|**10**|10|**12**|**13**|Dropout|
5353
|DynamicQuantizeLinear|-|-|-|-|-|-|-|-|-|-|**11**|11|11|DynamicQuantizeLinear|
54-
|Einsum|-|-|-|-|-|-|-|-|-|-|-|**12**:small_red_triangle:|12:small_red_triangle:|Einsum|
54+
|Einsum|-|-|-|-|-|-|-|-|-|-|-|**12**|12|Einsum|
5555
|Elu|**1**|1|1|1|1|**6**|6|6|6|6|6|6|6|Elu|
5656
|Equal|**1**|1|1|1|1|1|**7**|7|7|7|**11**|11|**13**|Equal|
5757
|Erf|-|-|-|-|-|-|-|-|**9**|9|9|9|**13**|Erf|
@@ -100,7 +100,7 @@ Notes:
100100
|Mul|**1**|1|1|1|1|**6**|**7**|7|7|7|7|7|**13**|Mul|
101101
|Multinomial|-|-|-|-|-|-|**7**:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|Multinomial|
102102
|Neg|**1**|1|1|1|1|**6**|6|6|6|6|6|6|**13**|Neg|
103-
|NegativeLogLikelihoodLoss|-|-|-|-|-|-|-|-|-|-|-|**12**:small_red_triangle:|12:small_red_triangle:|NegativeLogLikelihoodLoss|
103+
|NegativeLogLikelihoodLoss|-|-|-|-|-|-|-|-|-|-|-|**12**:small_red_triangle:|**13**:small_red_triangle:|NegativeLogLikelihoodLoss|
104104
|NonMaxSuppression|-|-|-|-|-|-|-|-|-|**10**|**11**|11|11|NonMaxSuppression|
105105
|NonZero|-|-|-|-|-|-|-|-|**9**|9|9|9|**13**:small_red_triangle:|NonZero|
106106
|Not|**1**|1|1|1|1|1|1|1|1|1|1|1|1|Not|
@@ -179,7 +179,7 @@ Notes:
179179
|Where|-|-|-|-|-|-|-|-|**9**|9|9|9|9|Where|
180180
|Xor|**1**|1|1|1|1|1|**7**|7|7|7|7|7|7|Xor|
181181

182-
ONNX-TF Supported Operators / ONNX Operators: 113 / 162
182+
ONNX-TF Supported Operators / ONNX Operators: 118 / 162
183183

184184
Notes:
185185
1. Cast: Cast string to data types other than float32/float64/int32/int64 is not supported in Tensorflow

onnx_tf/handlers/backend/einsum.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import tensorflow as tf
2+
3+
from onnx_tf.handlers.backend_handler import BackendHandler
4+
from onnx_tf.handlers.handler import onnx_op
5+
6+
@onnx_op("Einsum")
7+
8+
class Einsum(BackendHandler):
9+
10+
@classmethod
11+
def version_12(cls, node, **kwargs):
12+
equation = node.attrs.get("equation", "")
13+
inputs = [kwargs["tensor_dict"][inp] for inp in node.inputs]
14+
return [tf.einsum(equation, *inputs)]

onnx_tf/opset_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
'Div': [1, 6, 7],
4343
'Dropout': [1, 6, 7, 10, 12, 13],
4444
'DynamicQuantizeLinear': [11],
45-
'Einsum': [],
45+
'Einsum': [12],
4646
'Elu': [1, 6],
4747
'Equal': [1, 7, 11, 13],
4848
'Erf': [9, 13],

test/backend/test_node.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,19 @@ def test_dynamic_quantize_linear(self):
741741
np.testing.assert_almost_equal(output["Y_Scale"], y_scale)
742742
np.testing.assert_almost_equal(output["Y_Zero_Point"], y_zero_point)
743743

744+
def test_einsum(self):
745+
if legacy_opset_pre_ver(12):
746+
raise unittest.SkipTest(
747+
"ONNX version {} doesn't support Einsum.".format(
748+
defs.onnx_opset_version()))
749+
equation = 'ij,jk->ik' #matmul
750+
node_def = helper.make_node("Einsum", ["X", "Y"], ["Z"], equation=equation)
751+
x = self._get_rnd_float32(shape=[3, 4])
752+
y = self._get_rnd_float32(shape=[4, 5])
753+
z = np.einsum(equation, x, y)
754+
output = run_node(node_def, [x, y])
755+
np.testing.assert_almost_equal(output["Z"], z)
756+
744757
def test_elu(self):
745758
node_def = helper.make_node("Elu", ["X"], ["Y"])
746759
x = self._get_rnd_float32(shape=[100])

0 commit comments

Comments
 (0)