diff --git a/.travis.yml b/.travis.yml index b647b39eb..a72be2111 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,23 +6,13 @@ python: 3.6 cache: pip # Required -# - ONNX 1.6 (Opset 11), TensorFlow 1.15.0, Sep 2019 -# - ONNX 1.6 (Opset 11), TensorFlow 1.15.3, May 2020 -# Optional -# - ONNX 1.7 (Opset 12), TensorFlow 1.15.3, May 2020 +# - ONNX 1.7 (Opset 12), TensorFlow 1.15.4, Sept 2020 env: - - ONNX_PIP=onnx==1.6.0 TF_PIP=tensorflow==1.15.0 - - ONNX_PIP=onnx==1.6.0 TF_PIP=tensorflow==1.15.3 - - ONNX_PIP=onnx==1.7.0 TF_PIP=tensorflow==1.15.3 + - ONNX_PIP=onnx==1.7.0 TF_PIP=tensorflow==1.15.4 jobs: fast_finish: true - # Be aware when updating the dependency versions. - # Envs below must match *exactly* an env from above, - # otherwise an env failure will fail the overall build. - allow_failures: - - env: ONNX_PIP=onnx==1.7.0 TF_PIP=tensorflow==1.15.3 before_install: pip install -U setuptools install: pip install $ONNX_PIP $TF_PIP diff --git a/ONNX_VERSION_NUMBER b/ONNX_VERSION_NUMBER index dc1e644a1..bd8bf882d 100644 --- a/ONNX_VERSION_NUMBER +++ b/ONNX_VERSION_NUMBER @@ -1 +1 @@ -1.6.0 +1.7.0 diff --git a/README.md b/README.md index c909dd0f4..0b0636f84 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,16 @@ # Tensorflow Backend for ONNX -[![Build Status](https://travis-ci.org/onnx/onnx-tensorflow.svg?branch=tf-1.x)](https://travis-ci.org/onnx/onnx-tensorflow) ## To convert models from ONNX to Tensorflow: ### Use CLI: -[Command Line Interface Documentation](https://github.com/onnx/onnx-tensorflow/blob/master/doc/CLI.md) +[Command Line Interface Documentation](https://github.com/onnx/onnx-tensorflow/blob/tf-1.x/doc/CLI.md) From ONNX to Tensorflow: `onnx-tf convert -i /path/to/input.onnx -o /path/to/output.pb` ### Convert programmatically: -[From ONNX to Tensorflow](https://github.com/onnx/onnx-tensorflow/blob/master/example/onnx_to_tf.py) +[From ONNX to Tensorflow](https://github.com/onnx/onnx-tensorflow/blob/tf-1.x/example/onnx_to_tf.py) ### Migrating from `onnx-tf` to `tf-onnx`: We have joined force with Microsoft to co-develop ONNX Tensorflow frontend. @@ -34,11 +33,11 @@ ONNX-TF requires ONNX (Open Neural Network Exchange) as an external dependency, The specific ONNX release version that we support in the master branch of ONNX-TF can be found [here](https://github.com/onnx/onnx-tensorflow/blob/master/ONNX_VERSION_NUMBER). This information about ONNX version requirement is automatically encoded in `setup.py`, therefore users needn't worry about ONNX version requirement when installing ONNX-TF. -Because users often have their own preferences for which variant of Tensorflow to install (i.e., a GPU version instead of a CPU version), we do not explicitly require tensorflow in the installation script. It is therefore users' responsibility to ensure that the proper variant of Tensorflow is available to ONNX-TF. Moreover, we require Tensorflow version == 1.15.0. +Because users often have their own preferences for which variant of Tensorflow to install (i.e., a GPU version instead of a CPU version), we do not explicitly require tensorflow in the installation script. It is therefore users' responsibility to ensure that the proper variant of Tensorflow is available to ONNX-TF. Moreover, we require Tensorflow version == 1.15.4. -To install the latest version of ONNX-TF v1.6.0 +To install the latest version of ONNX-TF v1.7.0 - Run `git clone https://github.com/onnx/onnx-tensorflow.git && cd onnx-tensorflow`. -- Run `git checkout v1.6.0-tf-1.15`. +- Run `git checkout v1.7.0-tf-1.15`. - Run `pip install -e .`. ## Development: @@ -51,7 +50,7 @@ To install the latest version of ONNX-TF v1.6.0 ### Installation: - Install ONNX master branch from source. -- Install Tensorflow 1.15.0. (For Tensorflow 2.x support please refer [here](https://github.com/onnx/onnx-tensorflow/blob/master/README.md/).) +- Install Tensorflow 1.15.4. (For Tensorflow 2.x support please refer [here](https://github.com/onnx/onnx-tensorflow/blob/master/README.md/).) - Run `git clone https://github.com/onnx/onnx-tensorflow.git && cd onnx-tensorflow`. - Run `git checkout tf-1.x`. - Run `pip install -e .`. @@ -83,17 +82,6 @@ http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html To perfom unit tests, run `python -m unittest discover test`. Testing requires significant hardware resources, but nonetheless, we highly recommend that users run through the complete test suite before deploying onnx-tf. The complete test suite typically takes between 15 and 45 minutes to complete, depending on hardware configurations. -PS. Please ensure your code is backward compatible with older version of ONNX. You can easily test it by running the following [docker container](https://hub.docker.com/r/winnietsang/onnx-tensorflow) with your code. If you don't have Docker installed yet, please follow this link to install [Docker](https://docs.docker.com/install/) on your environment. -``` -sudo docker pull winnietsang/onnx-tensorflow:onnx1.7.0-tf1.15 -sudo docker run -it --name=YOUR-CONTAINER-NAME winnietsang/onnx-tensorflow:onnx1.7.0-tf1.15 /bin/bash -git clone https://github.com/YOUR-USERNAME/onnx-tensorflow.git -cd onnx-tensorflow -git checkout -b YOUR-BRANCH --track remotes/origin/YOUR-BRANCH -pip3 install -e . -python3 -m unittest discover test -``` - #### Test Help: https://docs.python.org/2/library/unittest.html diff --git a/VERSION_NUMBER b/VERSION_NUMBER index dc1e644a1..bd8bf882d 100644 --- a/VERSION_NUMBER +++ b/VERSION_NUMBER @@ -1 +1 @@ -1.6.0 +1.7.0 diff --git a/Versioning.md b/Versioning.md index b60e8d5f7..f47afa64e 100644 --- a/Versioning.md +++ b/Versioning.md @@ -8,3 +8,4 @@ ONNX-TensorFlow version|ONNX version|TensorFlow version 1.3.0|1.3.0 (opset 8)|1.13.1 1.5.0|1.5.0 (opset 10)|1.15.0 1.6.0|1.6.0 (opset 11)|1.15.0 +1.7.0|1.7.0 (opset 12)|1.15.4 diff --git a/doc/support_status.md b/doc/support_status.md index e1629840f..0ef5b3092 100644 --- a/doc/support_status.md +++ b/doc/support_status.md @@ -1,9 +1,9 @@ # ONNX-Tensorflow Support Status ||| |-:|:-| -|ONNX-Tensorflow Version|Master ( commit id: 13c461496b84724c29a39d326ae4f4b12ff1e9b5 )| +|ONNX-Tensorflow Version|Master ( commit id: c724a1e2dfafce0c767d9b0af4151c7f52dfcf2a )| |ONNX Version|v1.7.0| -|Tensorflow Version|v1.15.0| +|Tensorflow Version|v1.15.4| Notes: * Values that are new or updated from a previous opset version are in bold. @@ -179,7 +179,7 @@ Notes: |Where|-|-|-|-|-|-|-|-|**9**|9|9|9|Where| |Xor|**1**|1|1|1|1|1|**7**|7|7|7|7|7|Xor| -ONNX-TF Supported Operators / ONNX Operators: 155 / 162 +ONNX-TF Supported Operators / ONNX Operators: 156 / 162 Notes: 1. Cast: Cast string to float32/float64/int32/int64 are not supported in Tensorflow. diff --git a/doc/support_status_v1_7_0.md b/doc/support_status_v1_7_0.md new file mode 100644 index 000000000..7f73fb5cd --- /dev/null +++ b/doc/support_status_v1_7_0.md @@ -0,0 +1,207 @@ +# ONNX-Tensorflow Support Status +||| +|-:|:-| +|ONNX-Tensorflow Version|v1.7.0| +|ONNX Version|v1.7.0| +|Tensorflow Version|v1.15.4| + +Notes: +* Values that are new or updated from a previous opset version are in bold. +* -: not defined in corresponding ONNX opset version +* \*: the operator is deprecated +* :small_red_triangle:: not supported yet +* :small_orange_diamond:: partially supported +* the rest are all supported + +||||||||||||||| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|**ONNX Operator**|**Opset 1**|**Opset 2**|**Opset 3**|**Opset 4**|**Opset 5**|**Opset 6**|**Opset 7**|**Opset 8**|**Opset 9**|**Opset 10**|**Opset 11**|**Opset 12**|**ONNX Operator**| +|Abs|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Abs| +|Acos|-|-|-|-|-|-|**7**|7|7|7|7|7|Acos| +|Acosh|-|-|-|-|-|-|-|-|**9**|9|9|9|Acosh| +|Add|**1**|1|1|1|1|**6**|**7**|7|7|7|7|7|Add| +|And|**1**|1|1|1|1|1|**7**|7|7|7|7|7|And| +|ArgMax|**1**|1|1|1|1|1|1|1|1|1|**11**|**12**|ArgMax| +|ArgMin|**1**|1|1|1|1|1|1|1|1|1|**11**|**12**|ArgMin| +|Asin|-|-|-|-|-|-|**7**|7|7|7|7|7|Asin| +|Asinh|-|-|-|-|-|-|-|-|**9**|9|9|9|Asinh| +|Atan|-|-|-|-|-|-|**7**|7|7|7|7|7|Atan| +|Atanh|-|-|-|-|-|-|-|-|**9**|9|9|9|Atanh| +|AveragePool|**1**|1|1|1|1|1|**7**|7|7|**10**|**11**|11|AveragePool| +|BatchNormalization|**1**|1|1|1|1|**6**|**7**|7|**9**|9|9|9|BatchNormalization| +|BitShift|-|-|-|-|-|-|-|-|-|-|**11**|11|BitShift| +|Cast|**1**:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|**6**:small_orange_diamond:|6:small_orange_diamond:|6:small_orange_diamond:|**9**:small_orange_diamond:|9:small_orange_diamond:|9:small_orange_diamond:|9:small_orange_diamond:|Cast| +|Ceil|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Ceil| +|Celu|-|-|-|-|-|-|-|-|-|-|-|**12**|Celu| +|Clip|**1**|1|1|1|1|**6**|6|6|6|6|**11**|**12**|Clip| +|Compress|-|-|-|-|-|-|-|-|**9**|9|**11**|11|Compress| +|Concat|**1**|1|1|**4**|4|4|4|4|4|4|**11**|11|Concat| +|ConcatFromSequence|-|-|-|-|-|-|-|-|-|-|**11**:small_orange_diamond:|11:small_orange_diamond:|ConcatFromSequence| +|Constant|**1**|1|1|1|1|1|1|1|**9**|9|**11**|**12**|Constant| +|ConstantOfShape|-|-|-|-|-|-|-|-|**9**|9|9|9|ConstantOfShape| +|Conv|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Conv| +|ConvInteger|-|-|-|-|-|-|-|-|-|**10**|10|10|ConvInteger| +|ConvTranspose|**1**:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|**11**:small_orange_diamond:|11:small_orange_diamond:|ConvTranspose| +|Cos|-|-|-|-|-|-|**7**|7|7|7|7|7|Cos| +|Cosh|-|-|-|-|-|-|-|-|**9**|9|9|9|Cosh| +|CumSum|-|-|-|-|-|-|-|-|-|-|**11**|11|CumSum| +|DepthToSpace|**1**|1|1|1|1|1|1|1|1|1|**11**|11|DepthToSpace| +|DequantizeLinear|-|-|-|-|-|-|-|-|-|**10**|10|10|DequantizeLinear| +|Det|-|-|-|-|-|-|-|-|-|-|**11**|11|Det| +|Div|**1**|1|1|1|1|**6**|**7**|7|7|7|7|7|Div| +|Dropout|**1**|1|1|1|1|**6**|**7**|7|7|**10**|10|**12**|Dropout| +|DynamicQuantizeLinear|-|-|-|-|-|-|-|-|-|-|**11**|11|DynamicQuantizeLinear| +|Einsum|-|-|-|-|-|-|-|-|-|-|-|**12**|Einsum| +|Elu|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Elu| +|Equal|**1**|1|1|1|1|1|**7**|7|7|7|**11**|11|Equal| +|Erf|-|-|-|-|-|-|-|-|**9**|9|9|9|Erf| +|Exp|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Exp| +|Expand|-|-|-|-|-|-|-|**8**|8|8|8|8|Expand| +|EyeLike|-|-|-|-|-|-|-|-|**9**|9|9|9|EyeLike| +|Flatten|**1**|1|1|1|1|1|1|1|**9**|9|**11**|11|Flatten| +|Floor|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Floor| +|GRU|**1**:small_orange_diamond:|1:small_orange_diamond:|**3**:small_orange_diamond:|3:small_orange_diamond:|3:small_orange_diamond:|3:small_orange_diamond:|**7**:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|GRU| +|Gather|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Gather| +|GatherElements|-|-|-|-|-|-|-|-|-|-|**11**|11|GatherElements| +|GatherND|-|-|-|-|-|-|-|-|-|-|**11**|**12**|GatherND| +|Gemm|**1**|1|1|1|1|**6**|**7**|7|**9**|9|**11**|11|Gemm| +|GlobalAveragePool|**1**|1|1|1|1|1|1|1|1|1|1|1|GlobalAveragePool| +|GlobalLpPool|**1**|**2**|2|2|2|2|2|2|2|2|2|2|GlobalLpPool| +|GlobalMaxPool|**1**|1|1|1|1|1|1|1|1|1|1|1|GlobalMaxPool| +|Greater|**1**|1|1|1|1|1|**7**|7|**9**|9|9|9|Greater| +|GreaterOrEqual|-|-|-|-|-|-|-|-|-|-|-|**12**|GreaterOrEqual| +|HardSigmoid|**1**|1|1|1|1|**6**|6|6|6|6|6|6|HardSigmoid| +|Hardmax|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Hardmax| +|Identity|**1**|1|1|1|1|1|1|1|1|1|1|1|Identity| +|If|**1**|1|1|1|1|1|1|1|1|1|**11**|11|If| +|InstanceNormalization|**1**|1|1|1|1|**6**|6|6|6|6|6|6|InstanceNormalization| +|IsInf|-|-|-|-|-|-|-|-|-|**10**|10|10|IsInf| +|IsNaN|-|-|-|-|-|-|-|-|**9**|9|9|9|IsNaN| +|LRN|**1**|1|1|1|1|1|1|1|1|1|1|1|LRN| +|LSTM|**1**:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|**7**:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|LSTM| +|LeakyRelu|**1**|1|1|1|1|**6**|6|6|6|6|6|6|LeakyRelu| +|Less|**1**|1|1|1|1|1|**7**|7|**9**|9|9|9|Less| +|LessOrEqual|-|-|-|-|-|-|-|-|-|-|-|**12**|LessOrEqual| +|Log|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Log| +|LogSoftmax|**1**|1|1|1|1|1|1|1|1|1|**11**|11|LogSoftmax| +|Loop|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Loop| +|LpNormalization|**1**|1|1|1|1|1|1|1|1|1|1|1|LpNormalization| +|LpPool|**1**|**2**|2|2|2|2|2|2|2|2|**11**|11|LpPool| +|MatMul|**1**|1|1|1|1|1|1|1|**9**|9|9|9|MatMul| +|MatMulInteger|-|-|-|-|-|-|-|-|-|**10**|10|10|MatMulInteger| +|Max|**1**|1|1|1|1|**6**|6|**8**|8|8|8|**12**|Max| +|MaxPool|**1**:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|**8**:small_orange_diamond:|8:small_orange_diamond:|**10**:small_orange_diamond:|**11**:small_orange_diamond:|**12**:small_orange_diamond:|MaxPool| +|MaxRoiPool|**1**:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|MaxRoiPool| +|MaxUnpool|-|-|-|-|-|-|-|-|**9**|9|**11**|11|MaxUnpool| +|Mean|**1**|1|1|1|1|**6**|6|**8**|8|8|8|8|Mean| +|MeanVarianceNormalization|-|-|-|-|-|-|-|-|**9**|9|9|9|MeanVarianceNormalization| +|Min|**1**|1|1|1|1|**6**|6|**8**|8|8|8|**12**|Min| +|Mod|-|-|-|-|-|-|-|-|-|**10**|10|10|Mod| +|Mul|**1**|1|1|1|1|**6**|**7**|7|7|7|7|7|Mul| +|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:|Multinomial| +|Neg|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Neg| +|NegativeLogLikelihoodLoss|-|-|-|-|-|-|-|-|-|-|-|**12**:small_red_triangle:|NegativeLogLikelihoodLoss| +|NonMaxSuppression|-|-|-|-|-|-|-|-|-|**10**|**11**|11|NonMaxSuppression| +|NonZero|-|-|-|-|-|-|-|-|**9**|9|9|9|NonZero| +|Not|**1**|1|1|1|1|1|1|1|1|1|1|1|Not| +|OneHot|-|-|-|-|-|-|-|-|**9**|9|**11**|11|OneHot| +|Or|**1**|1|1|1|1|1|**7**|7|7|7|7|7|Or| +|PRelu|**1**|1|1|1|1|**6**|**7**|7|**9**|9|9|9|PRelu| +|Pad|**1**|**2**|2|2|2|2|2|2|2|2|**11**|11|Pad| +|Pow|**1**|1|1|1|1|1|**7**|7|7|7|7|**12**|Pow| +|QLinearConv|-|-|-|-|-|-|-|-|-|**10**|10|10|QLinearConv| +|QLinearMatMul|-|-|-|-|-|-|-|-|-|**10**|10|10|QLinearMatMul| +|QuantizeLinear|-|-|-|-|-|-|-|-|-|**10**|10|10|QuantizeLinear| +|RNN|**1**:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|1:small_orange_diamond:|**7**:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|7:small_orange_diamond:|RNN| +|RandomNormal|**1**|1|1|1|1|1|1|1|1|1|1|1|RandomNormal| +|RandomNormalLike|**1**|1|1|1|1|1|1|1|1|1|1|1|RandomNormalLike| +|RandomUniform|**1**|1|1|1|1|1|1|1|1|1|1|1|RandomUniform| +|RandomUniformLike|**1**|1|1|1|1|1|1|1|1|1|1|1|RandomUniformLike| +|Range|-|-|-|-|-|-|-|-|-|-|**11**|11|Range| +|Reciprocal|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Reciprocal| +|ReduceL1|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceL1| +|ReduceL2|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceL2| +|ReduceLogSum|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceLogSum| +|ReduceLogSumExp|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceLogSumExp| +|ReduceMax|**1**|1|1|1|1|1|1|1|1|1|**11**|**12**|ReduceMax| +|ReduceMean|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceMean| +|ReduceMin|**1**|1|1|1|1|1|1|1|1|1|**11**|**12**|ReduceMin| +|ReduceProd|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceProd| +|ReduceSum|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceSum| +|ReduceSumSquare|**1**|1|1|1|1|1|1|1|1|1|**11**|11|ReduceSumSquare| +|Relu|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Relu| +|Reshape|**1**|1|1|1|**5**|5|5|5|5|5|5|5|Reshape| +|Resize|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|**11**:small_orange_diamond:|11:small_orange_diamond:|Resize| +|ReverseSequence|-|-|-|-|-|-|-|-|-|**10**|10|10|ReverseSequence| +|RoiAlign|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|10:small_orange_diamond:|10:small_orange_diamond:|RoiAlign| +|Round|-|-|-|-|-|-|-|-|-|-|**11**|11|Round| +|Scan|-|-|-|-|-|-|-|**8**|**9**|9|**11**|11|Scan| +|Scatter|-|-|-|-|-|-|-|-|**9**|9|**11**\*|11\*|Scatter| +|ScatterElements|-|-|-|-|-|-|-|-|-|-|**11**|11|ScatterElements| +|ScatterND|-|-|-|-|-|-|-|-|-|-|**11**|11|ScatterND| +|Selu|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Selu| +|SequenceAt|-|-|-|-|-|-|-|-|-|-|**11**|11|SequenceAt| +|SequenceConstruct|-|-|-|-|-|-|-|-|-|-|**11**|11|SequenceConstruct| +|SequenceEmpty|-|-|-|-|-|-|-|-|-|-|**11**|11|SequenceEmpty| +|SequenceErase|-|-|-|-|-|-|-|-|-|-|**11**|11|SequenceErase| +|SequenceInsert|-|-|-|-|-|-|-|-|-|-|**11**|11|SequenceInsert| +|SequenceLength|-|-|-|-|-|-|-|-|-|-|**11**|11|SequenceLength| +|Shape|**1**|1|1|1|1|1|1|1|1|1|1|1|Shape| +|Shrink|-|-|-|-|-|-|-|-|**9**|9|9|9|Shrink| +|Sigmoid|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Sigmoid| +|Sign|-|-|-|-|-|-|-|-|**9**|9|9|9|Sign| +|Sin|-|-|-|-|-|-|**7**|7|7|7|7|7|Sin| +|Sinh|-|-|-|-|-|-|-|-|**9**|9|9|9|Sinh| +|Size|**1**|1|1|1|1|1|1|1|1|1|1|1|Size| +|Slice|**1**|1|1|1|1|1|1|1|1|**10**|**11**|11|Slice| +|Softmax|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Softmax| +|SoftmaxCrossEntropyLoss|-|-|-|-|-|-|-|-|-|-|-|**12**:small_red_triangle:|SoftmaxCrossEntropyLoss| +|Softplus|**1**|1|1|1|1|1|1|1|1|1|1|1|Softplus| +|Softsign|**1**|1|1|1|1|1|1|1|1|1|1|1|Softsign| +|SpaceToDepth|**1**|1|1|1|1|1|1|1|1|1|1|1|SpaceToDepth| +|Split|**1**|**2**|2|2|2|2|2|2|2|2|**11**|11|Split| +|SplitToSequence|-|-|-|-|-|-|-|-|-|-|**11**:small_orange_diamond:|11:small_orange_diamond:|SplitToSequence| +|Sqrt|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Sqrt| +|Squeeze|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Squeeze| +|StringNormalizer|-|-|-|-|-|-|-|-|-|**10**:small_red_triangle:|10:small_red_triangle:|10:small_red_triangle:|StringNormalizer| +|Sub|**1**|1|1|1|1|**6**|**7**|7|7|7|7|7|Sub| +|Sum|**1**|1|1|1|1|**6**|6|**8**|8|8|8|8|Sum| +|Tan|-|-|-|-|-|-|**7**|7|7|7|7|7|Tan| +|Tanh|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Tanh| +|TfIdfVectorizer|-|-|-|-|-|-|-|-|**9**|9|9|9|TfIdfVectorizer| +|ThresholdedRelu|-|-|-|-|-|-|-|-|-|**10**|10|10|ThresholdedRelu| +|Tile|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Tile| +|TopK|**1**|1|1|1|1|1|1|1|1|**10**|**11**|11|TopK| +|Transpose|**1**|1|1|1|1|1|1|1|1|1|1|1|Transpose| +|Unique|-|-|-|-|-|-|-|-|-|-|**11**:small_red_triangle:|11:small_red_triangle:|Unique| +|Unsqueeze|**1**|1|1|1|1|1|1|1|1|1|**11**|11|Unsqueeze| +|Upsample|**1**:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|1:small_red_triangle:|**7**:small_orange_diamond:|7:small_orange_diamond:|**9**:small_orange_diamond:|**10**\*|10\*|10\*|Upsample| +|Where|-|-|-|-|-|-|-|-|**9**|9|9|9|Where| +|Xor|**1**|1|1|1|1|1|**7**|7|7|7|7|7|Xor| + +ONNX-TF Supported Operators / ONNX Operators: 156 / 162 + +Notes: +1. Cast: Cast string to float32/float64/int32/int64 are not supported in Tensorflow. +2. ConcatFromSequence: new_axis=1 not supported in Tensorflow. +3. ConvTranspose: ConvTranspose with dilations != 1, or transposed convolution for 4D or higher are not supported in Tensorflow. +4. GRU: GRU with clip or GRU with linear_before_reset, or GRU not using sigmoid for z and r, or GRU using Elu as the activation function with alpha != 1, or GRU using HardSigmoid as the activation function with alpha != 0.2 or beta != 0.5 are not supported in TensorFlow. +5. LSTM: LSTM not using sigmoid for `f`, or LSTM not using the same activation for `g` and `h` are not supported in Tensorflow. +6. MaxPool: MaxPoolWithArgmax with pad is None or incompatible mode, or MaxPoolWithArgmax with 4D or higher input, orMaxPoolWithArgmax with column major are not supported in Tensorflow. +7. RNN: RNN with clip is not supported in Tensorflow. +8. Resize: Resize required 4D input in Tensorflow. For opset 11, only the following attributes and inputs conbination are supported in Tensorflow: + 1. mode=nearest, coordinate_transformation_mode=align_corners, nearest_mode=round_prefer_ceil, can use scales(*) or sizes. + 2. mode=nearest, coordinate_transformation_mode=asymmetric, nearest_mode=floor, can use scales(*) or sizes. + 3. mode=nearest, coordinate_transformation_mode=tf_half_pixel_for_nn, nearest_mode=floor, can use scales(*) or sizes. + 4. mode=linear, coordinate_transformation_mode=align_corners, can use scales(*) or sizes. + 5. mode=linear, coordinate_transformation_mode=asymmetric, can use scales(*) or sizes. + 6. mode=linear, coordinate_transformation_mode=half_pixel, can use scales(*) or sizes. + 7. mode=cubic, coordinate_transformation_mode=align_corners, cubic_coeff_a=-0.5, exclude_outside=1, can use scales(*) or sizes. + 8. mode=cubic, coordinate_transformation_mode=asymmetric, cubic_coeff_a=-0.5, exclude_outside=1, can use scales(*) or sizes. + 9. mode=cubic, coordinate_transformation_mode=half_pixel, cubic_coeff_a=-0.5, exclude_outside=1, can use scales(*) or sizes. + 10. mode=nearest, coordinate_transformation_mode=tf_crop_and_resize, extrapolation_value=any_float_value, nearest_mode=round_prefer_ceil, can use scales or sizes. + 11. mode=linear, coordinate_transformation_mode=tf_crop_and_resize, extrapolation_value=any_float_value, can use scales or sizes. + - Note (*): The accuracy of your model will go down, if the height and the width of the new sizes(scales * origial sizes) are not in whole numbers. +9. RoiAlign: sampling_ratio <= 0 is not fully supported. +10. SplitToSequence: Scalar as the split input not supported. +11. Upsample: Upsample required 4D input in Tensorflow.