重命名 pt2tf 为 pt2pb

This commit is contained in:
zhutian
2020-10-14 08:55:07 +08:00
committed by Gitee
parent 324ab60a5d
commit 90ae190559
407 changed files with 0 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
ONNX-Tensorflow API
======
#### `onnx_tf.backend.prepare`
<details>
<summary>Prepare an ONNX model for Tensorflow Backend.
</summary>
This function converts an ONNX model to an internel representation
of the computational graph called TensorflowRep and returns
the converted representation.
</details>
_params_:
`model` : The ONNX model to be converted.
`device` : The device to execute this model on.
`strict` : Whether to enforce semantic equivalence between the original model
and the converted tensorflow model, defaults to True (yes, enforce semantic equivalence).
Changing to False is strongly discouraged.
Currently, the strict flag only affects the behavior of MaxPool and AveragePool ops.
`logging_level` : The logging level, default is INFO. Change it to DEBUG
to see more conversion details or to WARNING to see less
_returns_:
A TensorflowRep class object representing the ONNX model
#### `onnx_tf.backend_rep.TensorflowRep.export_graph`
<details>
<summary>Export backend representation to a Tensorflow proto file.
</summary>
This function obtains the graph proto corresponding to the ONNX
model associated with the backend representation and serializes
to a protobuf file.
</details>
_params_:
`path` : The path to the output TF protobuf file.
_returns_:
none.
+54
View File
@@ -0,0 +1,54 @@
ONNX-Tensorflow Command Line Interface
======
## Available commands:
- convert
More information: `onnx-tf -h`
```
usage: onnx-tf [-h] {convert}
ONNX-Tensorflow Command Line Interface
positional arguments:
{convert} Available commands.
optional arguments:
-h, --help show this help message and exit
```
## Usage:
### Convert:
#### From ONNX to Tensorflow:
`onnx-tf convert -i /path/to/input.onnx -o /path/to/output.pb`
More information: `onnx-tf convert -h`
```
usage: onnx-tf [-h] --infile INFILE --outfile OUTFILE [--device DEVICE]
[--strict STRICT] [--logging_level LOGGING_LEVEL]
This is the converter for converting protocol buffer between tf and onnx.
optional arguments:
-h, --help show this help message and exit
--infile INFILE, -i INFILE
Input file path.
--outfile OUTFILE, -o OUTFILE
Output file path.
backend arguments (onnx -> tf):
--device DEVICE The device to execute this model on. (from
onnx_tf.backend.prepare)
--strict STRICT Whether to enforce semantic equivalence between the
original model and the converted tensorflow model,
defaults to True (yes, enforce semantic equivalence).
Changing to False is strongly discouraged. Currently,
the strict flag only affects the behavior of MaxPool
and AveragePool ops. (from onnx_tf.backend.prepare)
--logging_level LOGGING_LEVEL
The logging level, default is INFO. Change it to DEBUG
to see more conversion details or to WARNING to see
less (from onnx_tf.backend.prepare)
```
+22
View File
@@ -0,0 +1,22 @@
ONNX-Tensorflow Command Line Interface
======
## Available commands:
- convert
More information: `onnx-tf -h`
```
{onnx-tf -h}
```
## Usage:
### Convert:
#### From ONNX to Tensorflow:
`onnx-tf convert -i /path/to/input.onnx -o /path/to/output.pb`
More information: `onnx-tf convert -h`
```
{onnx-tf convert -h}
```
@@ -0,0 +1,22 @@
How to implement new op
======
When you get `{} op is not implemented`, you can follow next steps to implement.
Customize op can also be implemented in similar way.
### Backend
1. Verify the latest master version of ONNX is installed on your environment
2. Find specification from [onnx/Operators](https://github.com/onnx/onnx/blob/master/docs/Operators.md).
3. Implement the handler. All inputs and attrs could get from step 2.
```
- add handler to /onnx_tf/handlers/backend/
- in the new handler define a classmethod called version_{version}
* version is the number of since version, which can get from operator's specification
```
4. From within the `onnx_tf` directory, run `gen_opset.py`.
5. From within the `onnx_tf` directory, run `gen_status.py`.
6. From within the `onnx_tf` directory, run `gen_doc.py` if there is any update to CLI or API.
7. Verify the operator's test cases in `test/backend/test_onnx_backend.py` all pass.
8. Add any additional test cases to `test/backend/test_node.py`.
+209
View File
@@ -0,0 +1,209 @@
# ONNX-Tensorflow Support Status
|||
|-:|:-|
|ONNX-Tensorflow Version|Master ( commit id: 8fea59a976e2d65eab2ab021864e2cab038bb7d5 )|
|ONNX Version|v1.7.0|
|Tensorflow Version|v1.15.0|
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**:small_red_triangle:|Celu|
|Clip|**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:|6:small_orange_diamond:|6:small_orange_diamond:|**11**:small_orange_diamond:|**12**:small_orange_diamond:|Clip|
|Compress|-|-|-|-|-|-|-|-|**9**|9|**11**|11|Compress|
|Concat|**1**|1|1|**4**|4|4|4|4|4|4|**11**|11|Concat|
|ConcatFromSequence|-|-|-|-|-|-|-|-|-|-|**11**:small_red_triangle:|11:small_red_triangle:|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**:small_orange_diamond:|11:small_orange_diamond:|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**:small_red_triangle:|Dropout|
|DynamicQuantizeLinear|-|-|-|-|-|-|-|-|-|-|**11**|11|DynamicQuantizeLinear|
|Einsum|-|-|-|-|-|-|-|-|-|-|-|**12**:small_red_triangle:|Einsum|
|Elu|**1**|1|1|1|1|**6**|6|6|6|6|6|6|Elu|
|Equal|**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:|**11**:small_orange_diamond:|11:small_orange_diamond:|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**:small_red_triangle:|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**:small_red_triangle:|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**:small_red_triangle:|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**:small_red_triangle:|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**:small_red_triangle:|Min|
|Mod|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|10:small_orange_diamond:|10:small_orange_diamond:|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**:small_orange_diamond:|9:small_orange_diamond:|**11**:small_orange_diamond:|11:small_orange_diamond:|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**:small_red_triangle:|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_red_triangle:|10:small_red_triangle:|10:small_red_triangle:|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_red_triangle:|11:small_red_triangle:|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: 144 / 162
Notes:
1. Cast: Cast string to float32/float64/int32/int64 are not supported in Tensorflow.
2. Clip: Clip input in uint64 is not supported in Tensorflow.
3. ConvTranspose: ConvTranspose with dilations != 1, or transposed convolution for 4D or higher are not supported in Tensorflow.
4. CumSum: CumSum inputs in uint32/uint64 are not supported in Tensorflow.
5. Equal: Equal inputs in uint16/uint32/uint64 are not supported in Tensorflow.
6. 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.
7. LSTM: LSTM not using sigmoid for `f`, or LSTM not using the same activation for `g` and `h` are not supported in Tensorflow.
8. 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.
9. Mod: Mod Dividend or Divisor in int8/int16/uint8/uint16/uint32/uint64 are not supported in Tensorflow.
10. OneHot: OneHot indices in uint16/uint32/uint64/int8/int16/float16/float/double, or OneHot depth in uint8/uint16/uint32/uint64/int8/int16/int64/float16/float/double are not supported in Tensorflow.
11. RNN: RNN with clip is not supported in Tensorflow.
12. 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.
13. Upsample: Upsample required 4D input in Tensorflow.
@@ -0,0 +1,170 @@
# ONNX-Tensorflow Support Status
|||
|-:|:-|
|ONNX-Tensorflow Version|v1.5.0|
|ONNX Version|v1.5.0|
|Tensorflow Version|v1.15.0|
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**|
|Abs|**1**|1|1|1|1|**6**|6|6|6|6|
|Acos|-|-|-|-|-|-|**7**|7|7|7|
|Acosh|-|-|-|-|-|-|-|-|**9**|9|
|Add|**1**|1|1|1|1|**6**|**7**|7|7|7|
|And|**1**|1|1|1|1|1|**7**|7|7|7|
|ArgMax|**1**|1|1|1|1|1|1|1|1|1|
|ArgMin|**1**|1|1|1|1|1|1|1|1|1|
|Asin|-|-|-|-|-|-|**7**|7|7|7|
|Asinh|-|-|-|-|-|-|-|-|**9**|9|
|Atan|-|-|-|-|-|-|**7**|7|7|7|
|Atanh|-|-|-|-|-|-|-|-|**9**|9|
|AveragePool|**1**|1|1|1|1|1|**7**|7|7|**10**|
|BatchNormalization|**1**|1|1|1|1|**6**|**7**|7|**9**|9|
|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:|
|Ceil|**1**|1|1|1|1|**6**|6|6|6|6|
|Clip|**1**|1|1|1|1|**6**|6|6|6|6|
|Compress|-|-|-|-|-|-|-|-|**9**|9|
|Concat|**1**|1|1|**4**|4|4|4|4|4|4|
|Constant|**1**|1|1|1|1|1|1|1|**9**|9|
|ConstantOfShape|-|-|-|-|-|-|-|-|**9**|9|
|Conv|**1**|1|1|1|1|1|1|1|1|1|
|ConvInteger|-|-|-|-|-|-|-|-|-|**10**|
|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:|
|Cos|-|-|-|-|-|-|**7**|7|7|7|
|Cosh|-|-|-|-|-|-|-|-|**9**|9|
|DepthToSpace|**1**|1|1|1|1|1|1|1|1|1|
|DequantizeLinear|-|-|-|-|-|-|-|-|-|**10**|
|Div|**1**|1|1|1|1|**6**|**7**|7|7|7|
|Dropout|**1**|1|1|1|1|**6**|**7**|7|7|**10**|
|Elu|**1**|1|1|1|1|**6**|6|6|6|6|
|Equal|**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:|
|Erf|-|-|-|-|-|-|-|-|**9**|9|
|Exp|**1**|1|1|1|1|**6**|6|6|6|6|
|Expand|-|-|-|-|-|-|-|**8**|8|8|
|EyeLike|-|-|-|-|-|-|-|-|**9**|9|
|Flatten|**1**|1|1|1|1|1|1|1|**9**|9|
|Floor|**1**|1|1|1|1|**6**|6|6|6|6|
|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:|
|Gather|**1**|1|1|1|1|1|1|1|1|1|
|Gemm|**1**|1|1|1|1|**6**|**7**|7|**9**|9|
|GlobalAveragePool|**1**|1|1|1|1|1|1|1|1|1|
|GlobalLpPool|**1**|**2**|2|2|2|2|2|2|2|2|
|GlobalMaxPool|**1**|1|1|1|1|1|1|1|1|1|
|Greater|**1**|1|1|1|1|1|**7**|7|**9**|9|
|HardSigmoid|**1**|1|1|1|1|**6**|6|6|6|6|
|Hardmax|**1**|1|1|1|1|1|1|1|1|1|
|Identity|**1**|1|1|1|1|1|1|1|1|1|
|If|**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:|
|InstanceNormalization|**1**|1|1|1|1|**6**|6|6|6|6|
|IsInf|-|-|-|-|-|-|-|-|-|**10**|
|IsNaN|-|-|-|-|-|-|-|-|**9**|9|
|LRN|**1**|1|1|1|1|1|1|1|1|1|
|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:|
|LeakyRelu|**1**|1|1|1|1|**6**|6|6|6|6|
|Less|**1**|1|1|1|1|1|**7**|7|**9**|9|
|Log|**1**|1|1|1|1|**6**|6|6|6|6|
|LogSoftmax|**1**|1|1|1|1|1|1|1|1|1|
|Loop|**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:|
|LpNormalization|**1**|1|1|1|1|1|1|1|1|1|
|LpPool|**1**:small_red_triangle:|**2**:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|2:small_red_triangle:|
|MatMul|**1**|1|1|1|1|1|1|1|**9**|9|
|MatMulInteger|-|-|-|-|-|-|-|-|-|**10**|
|Max|**1**|1|1|1|1|**6**|6|**8**|8|8|
|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:|
|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:|
|MaxUnpool|-|-|-|-|-|-|-|-|**9**|9|
|Mean|**1**|1|1|1|1|**6**|6|**8**|8|8|
|MeanVarianceNormalization|-|-|-|-|-|-|-|-|**9**|9|
|Min|**1**|1|1|1|1|**6**|6|**8**|8|8|
|Mod|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|
|Mul|**1**|1|1|1|1|**6**|**7**|7|7|7|
|Multinomial|-|-|-|-|-|-|**7**:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|7:small_red_triangle:|
|Neg|**1**|1|1|1|1|**6**|6|6|6|6|
|NonMaxSuppression|-|-|-|-|-|-|-|-|-|**10**|
|NonZero|-|-|-|-|-|-|-|-|**9**|9|
|Not|**1**|1|1|1|1|1|1|1|1|1|
|OneHot|-|-|-|-|-|-|-|-|**9**:small_orange_diamond:|9:small_orange_diamond:|
|Or|**1**|1|1|1|1|1|**7**|7|7|7|
|PRelu|**1**|1|1|1|1|**6**|**7**|7|**9**|9|
|Pad|**1**|**2**|2|2|2|2|2|2|2|2|
|Pow|**1**|1|1|1|1|1|**7**|7|7|7|
|QLinearConv|-|-|-|-|-|-|-|-|-|**10**|
|QLinearMatMul|-|-|-|-|-|-|-|-|-|**10**|
|QuantizeLinear|-|-|-|-|-|-|-|-|-|**10**|
|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:|
|RandomNormal|**1**|1|1|1|1|1|1|1|1|1|
|RandomNormalLike|**1**|1|1|1|1|1|1|1|1|1|
|RandomUniform|**1**|1|1|1|1|1|1|1|1|1|
|RandomUniformLike|**1**|1|1|1|1|1|1|1|1|1|
|Reciprocal|**1**|1|1|1|1|**6**|6|6|6|6|
|ReduceL1|**1**|1|1|1|1|1|1|1|1|1|
|ReduceL2|**1**|1|1|1|1|1|1|1|1|1|
|ReduceLogSum|**1**|1|1|1|1|1|1|1|1|1|
|ReduceLogSumExp|**1**|1|1|1|1|1|1|1|1|1|
|ReduceMax|**1**|1|1|1|1|1|1|1|1|1|
|ReduceMean|**1**|1|1|1|1|1|1|1|1|1|
|ReduceMin|**1**|1|1|1|1|1|1|1|1|1|
|ReduceProd|**1**|1|1|1|1|1|1|1|1|1|
|ReduceSum|**1**|1|1|1|1|1|1|1|1|1|
|ReduceSumSquare|**1**|1|1|1|1|1|1|1|1|1|
|Relu|**1**|1|1|1|1|**6**|6|6|6|6|
|Reshape|**1**|1|1|1|**5**|5|5|5|5|5|
|Resize|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|
|ReverseSequence|-|-|-|-|-|-|-|-|-|**10**|
|RoiAlign|-|-|-|-|-|-|-|-|-|**10**:small_red_triangle:|
|Scan|-|-|-|-|-|-|-|**8**|**9**|9|
|Scatter|-|-|-|-|-|-|-|-|**9**|9|
|Selu|**1**|1|1|1|1|**6**|6|6|6|6|
|Shape|**1**|1|1|1|1|1|1|1|1|1|
|Shrink|-|-|-|-|-|-|-|-|**9**|9|
|Sigmoid|**1**|1|1|1|1|**6**|6|6|6|6|
|Sign|-|-|-|-|-|-|-|-|**9**|9|
|Sin|-|-|-|-|-|-|**7**|7|7|7|
|Sinh|-|-|-|-|-|-|-|-|**9**|9|
|Size|**1**|1|1|1|1|1|1|1|1|1|
|Slice|**1**|1|1|1|1|1|1|1|1|**10**|
|Softmax|**1**|1|1|1|1|1|1|1|1|1|
|Softplus|**1**|1|1|1|1|1|1|1|1|1|
|Softsign|**1**|1|1|1|1|1|1|1|1|1|
|SpaceToDepth|**1**|1|1|1|1|1|1|1|1|1|
|Split|**1**|**2**|2|2|2|2|2|2|2|2|
|Sqrt|**1**|1|1|1|1|**6**|6|6|6|6|
|Squeeze|**1**|1|1|1|1|1|1|1|1|1|
|StringNormalizer|-|-|-|-|-|-|-|-|-|**10**:small_red_triangle:|
|Sub|**1**|1|1|1|1|**6**|**7**|7|7|7|
|Sum|**1**|1|1|1|1|**6**|6|**8**|8|8|
|Tan|-|-|-|-|-|-|**7**|7|7|7|
|Tanh|**1**|1|1|1|1|**6**|6|6|6|6|
|TfIdfVectorizer|-|-|-|-|-|-|-|-|**9**|9|
|ThresholdedRelu|-|-|-|-|-|-|-|-|-|**10**|
|Tile|**1**|1|1|1|1|**6**|6|6|6|6|
|TopK|**1**|1|1|1|1|1|1|1|1|**10**|
|Transpose|**1**|1|1|1|1|1|1|1|1|1|
|Unsqueeze|**1**|1|1|1|1|1|1|1|1|1|
|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**\*|
|Where|-|-|-|-|-|-|-|-|**9**|9|
|Xor|**1**|1|1|1|1|1|**7**|7|7|7|
ONNX-TF Supported Operators / ONNX Operators: 130 / 137
Notes:
1. Cast: Cast string to float32/float64/int32/int64 are not supported in Tensorflow.
2. ConvTranspose: ConvTranspose with dilations != 1, or transposed convolution for 4D or higher are not supported in Tensorflow.
3. Equal: Equal inputs in uint16/uint32/uint64 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. Mod: Mod Dividend or Divisor in int8/int16/uint8/uint16/uint32/uint64 are not supported in Tensorflow.
8. OneHot: OneHot indices in uint16/uint32/uint64/int8/int16/float16/float/double, or OneHot depth in uint8/uint16/uint32/uint64/int8/int16/int64/float16/float/double are not supported in Tensorflow.
9. RNN: RNN with clip is not supported in Tensorflow.
10. Resize: Resize required 4D input in Tensorflow.
11. Upsample: Upsample required 4D input in Tensorflow.
@@ -0,0 +1,203 @@
# ONNX-Tensorflow Support Status
|||
|-:|:-|
|ONNX-Tensorflow Version|v1.6.0|
|ONNX Version|v1.6.0|
|Tensorflow Version|v1.15.0|
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**|**ONNX Operator**|
|Abs|**1**|1|1|1|1|**6**|6|6|6|6|6|Abs|
|Acos|-|-|-|-|-|-|**7**|7|7|7|7|Acos|
|Acosh|-|-|-|-|-|-|-|-|**9**|9|9|Acosh|
|Add|**1**|1|1|1|1|**6**|**7**|7|7|7|7|Add|
|And|**1**|1|1|1|1|1|**7**|7|7|7|7|And|
|ArgMax|**1**|1|1|1|1|1|1|1|1|1|**11**|ArgMax|
|ArgMin|**1**|1|1|1|1|1|1|1|1|1|**11**|ArgMin|
|Asin|-|-|-|-|-|-|**7**|7|7|7|7|Asin|
|Asinh|-|-|-|-|-|-|-|-|**9**|9|9|Asinh|
|Atan|-|-|-|-|-|-|**7**|7|7|7|7|Atan|
|Atanh|-|-|-|-|-|-|-|-|**9**|9|9|Atanh|
|AveragePool|**1**|1|1|1|1|1|**7**|7|7|**10**|**11**|AveragePool|
|BatchNormalization|**1**|1|1|1|1|**6**|**7**|7|**9**|9|9|BatchNormalization|
|BitShift|-|-|-|-|-|-|-|-|-|-|**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:|Cast|
|Ceil|**1**|1|1|1|1|**6**|6|6|6|6|6|Ceil|
|Clip|**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:|6:small_orange_diamond:|6:small_orange_diamond:|**11**:small_orange_diamond:|Clip|
|Compress|-|-|-|-|-|-|-|-|**9**|9|**11**|Compress|
|Concat|**1**|1|1|**4**|4|4|4|4|4|4|**11**|Concat|
|ConcatFromSequence|-|-|-|-|-|-|-|-|-|-|**11**:small_red_triangle:|ConcatFromSequence|
|Constant|**1**|1|1|1|1|1|1|1|**9**|9|**11**|Constant|
|ConstantOfShape|-|-|-|-|-|-|-|-|**9**|9|9|ConstantOfShape|
|Conv|**1**|1|1|1|1|1|1|1|1|1|**11**|Conv|
|ConvInteger|-|-|-|-|-|-|-|-|-|**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:|ConvTranspose|
|Cos|-|-|-|-|-|-|**7**|7|7|7|7|Cos|
|Cosh|-|-|-|-|-|-|-|-|**9**|9|9|Cosh|
|CumSum|-|-|-|-|-|-|-|-|-|-|**11**:small_orange_diamond:|CumSum|
|DepthToSpace|**1**|1|1|1|1|1|1|1|1|1|**11**|DepthToSpace|
|DequantizeLinear|-|-|-|-|-|-|-|-|-|**10**|10|DequantizeLinear|
|Det|-|-|-|-|-|-|-|-|-|-|**11**|Det|
|Div|**1**|1|1|1|1|**6**|**7**|7|7|7|7|Div|
|Dropout|**1**|1|1|1|1|**6**|**7**|7|7|**10**|10|Dropout|
|DynamicQuantizeLinear|-|-|-|-|-|-|-|-|-|-|**11**|DynamicQuantizeLinear|
|Elu|**1**|1|1|1|1|**6**|6|6|6|6|6|Elu|
|Equal|**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:|**11**:small_orange_diamond:|Equal|
|Erf|-|-|-|-|-|-|-|-|**9**|9|9|Erf|
|Exp|**1**|1|1|1|1|**6**|6|6|6|6|6|Exp|
|Expand|-|-|-|-|-|-|-|**8**|8|8|8|Expand|
|EyeLike|-|-|-|-|-|-|-|-|**9**|9|9|EyeLike|
|Flatten|**1**|1|1|1|1|1|1|1|**9**|9|**11**|Flatten|
|Floor|**1**|1|1|1|1|**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:|GRU|
|Gather|**1**|1|1|1|1|1|1|1|1|1|**11**|Gather|
|GatherElements|-|-|-|-|-|-|-|-|-|-|**11**|GatherElements|
|GatherND|-|-|-|-|-|-|-|-|-|-|**11**|GatherND|
|Gemm|**1**|1|1|1|1|**6**|**7**|7|**9**|9|**11**|Gemm|
|GlobalAveragePool|**1**|1|1|1|1|1|1|1|1|1|1|GlobalAveragePool|
|GlobalLpPool|**1**|**2**|2|2|2|2|2|2|2|2|2|GlobalLpPool|
|GlobalMaxPool|**1**|1|1|1|1|1|1|1|1|1|1|GlobalMaxPool|
|Greater|**1**|1|1|1|1|1|**7**|7|**9**|9|9|Greater|
|HardSigmoid|**1**|1|1|1|1|**6**|6|6|6|6|6|HardSigmoid|
|Hardmax|**1**|1|1|1|1|1|1|1|1|1|**11**|Hardmax|
|Identity|**1**|1|1|1|1|1|1|1|1|1|1|Identity|
|If|**1**|1|1|1|1|1|1|1|1|1|**11**|If|
|InstanceNormalization|**1**|1|1|1|1|**6**|6|6|6|6|6|InstanceNormalization|
|IsInf|-|-|-|-|-|-|-|-|-|**10**|10|IsInf|
|IsNaN|-|-|-|-|-|-|-|-|**9**|9|9|IsNaN|
|LRN|**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:|LSTM|
|LeakyRelu|**1**|1|1|1|1|**6**|6|6|6|6|6|LeakyRelu|
|Less|**1**|1|1|1|1|1|**7**|7|**9**|9|9|Less|
|Log|**1**|1|1|1|1|**6**|6|6|6|6|6|Log|
|LogSoftmax|**1**|1|1|1|1|1|1|1|1|1|**11**|LogSoftmax|
|Loop|**1**|1|1|1|1|1|1|1|1|1|**11**|Loop|
|LpNormalization|**1**|1|1|1|1|1|1|1|1|1|1|LpNormalization|
|LpPool|**1**|**2**|2|2|2|2|2|2|2|2|**11**|LpPool|
|MatMul|**1**|1|1|1|1|1|1|1|**9**|9|9|MatMul|
|MatMulInteger|-|-|-|-|-|-|-|-|-|**10**|10|MatMulInteger|
|Max|**1**|1|1|1|1|**6**|6|**8**|8|8|8|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:|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:|MaxRoiPool|
|MaxUnpool|-|-|-|-|-|-|-|-|**9**|9|**11**|MaxUnpool|
|Mean|**1**|1|1|1|1|**6**|6|**8**|8|8|8|Mean|
|MeanVarianceNormalization|-|-|-|-|-|-|-|-|**9**|9|9|MeanVarianceNormalization|
|Min|**1**|1|1|1|1|**6**|6|**8**|8|8|8|Min|
|Mod|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|10:small_orange_diamond:|Mod|
|Mul|**1**|1|1|1|1|**6**|**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:|Multinomial|
|Neg|**1**|1|1|1|1|**6**|6|6|6|6|6|Neg|
|NonMaxSuppression|-|-|-|-|-|-|-|-|-|**10**|**11**|NonMaxSuppression|
|NonZero|-|-|-|-|-|-|-|-|**9**|9|9|NonZero|
|Not|**1**|1|1|1|1|1|1|1|1|1|1|Not|
|OneHot|-|-|-|-|-|-|-|-|**9**:small_orange_diamond:|9:small_orange_diamond:|**11**:small_orange_diamond:|OneHot|
|Or|**1**|1|1|1|1|1|**7**|7|7|7|7|Or|
|PRelu|**1**|1|1|1|1|**6**|**7**|7|**9**|9|9|PRelu|
|Pad|**1**|**2**|2|2|2|2|2|2|2|2|**11**|Pad|
|Pow|**1**|1|1|1|1|1|**7**|7|7|7|7|Pow|
|QLinearConv|-|-|-|-|-|-|-|-|-|**10**|10|QLinearConv|
|QLinearMatMul|-|-|-|-|-|-|-|-|-|**10**|10|QLinearMatMul|
|QuantizeLinear|-|-|-|-|-|-|-|-|-|**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:|RNN|
|RandomNormal|**1**|1|1|1|1|1|1|1|1|1|1|RandomNormal|
|RandomNormalLike|**1**|1|1|1|1|1|1|1|1|1|1|RandomNormalLike|
|RandomUniform|**1**|1|1|1|1|1|1|1|1|1|1|RandomUniform|
|RandomUniformLike|**1**|1|1|1|1|1|1|1|1|1|1|RandomUniformLike|
|Range|-|-|-|-|-|-|-|-|-|-|**11**|Range|
|Reciprocal|**1**|1|1|1|1|**6**|6|6|6|6|6|Reciprocal|
|ReduceL1|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceL1|
|ReduceL2|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceL2|
|ReduceLogSum|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceLogSum|
|ReduceLogSumExp|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceLogSumExp|
|ReduceMax|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceMax|
|ReduceMean|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceMean|
|ReduceMin|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceMin|
|ReduceProd|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceProd|
|ReduceSum|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceSum|
|ReduceSumSquare|**1**|1|1|1|1|1|1|1|1|1|**11**|ReduceSumSquare|
|Relu|**1**|1|1|1|1|**6**|6|6|6|6|6|Relu|
|Reshape|**1**|1|1|1|**5**|5|5|5|5|5|5|Reshape|
|Resize|-|-|-|-|-|-|-|-|-|**10**:small_orange_diamond:|**11**:small_orange_diamond:|Resize|
|ReverseSequence|-|-|-|-|-|-|-|-|-|**10**|10|ReverseSequence|
|RoiAlign|-|-|-|-|-|-|-|-|-|**10**:small_red_triangle:|10:small_red_triangle:|RoiAlign|
|Round|-|-|-|-|-|-|-|-|-|-|**11**|Round|
|Scan|-|-|-|-|-|-|-|**8**|**9**|9|**11**|Scan|
|Scatter|-|-|-|-|-|-|-|-|**9**|9|**11**\*|Scatter|
|ScatterElements|-|-|-|-|-|-|-|-|-|-|**11**|ScatterElements|
|ScatterND|-|-|-|-|-|-|-|-|-|-|**11**|ScatterND|
|Selu|**1**|1|1|1|1|**6**|6|6|6|6|6|Selu|
|SequenceAt|-|-|-|-|-|-|-|-|-|-|**11**|SequenceAt|
|SequenceConstruct|-|-|-|-|-|-|-|-|-|-|**11**|SequenceConstruct|
|SequenceEmpty|-|-|-|-|-|-|-|-|-|-|**11**|SequenceEmpty|
|SequenceErase|-|-|-|-|-|-|-|-|-|-|**11**|SequenceErase|
|SequenceInsert|-|-|-|-|-|-|-|-|-|-|**11**|SequenceInsert|
|SequenceLength|-|-|-|-|-|-|-|-|-|-|**11**|SequenceLength|
|Shape|**1**|1|1|1|1|1|1|1|1|1|1|Shape|
|Shrink|-|-|-|-|-|-|-|-|**9**|9|9|Shrink|
|Sigmoid|**1**|1|1|1|1|**6**|6|6|6|6|6|Sigmoid|
|Sign|-|-|-|-|-|-|-|-|**9**|9|9|Sign|
|Sin|-|-|-|-|-|-|**7**|7|7|7|7|Sin|
|Sinh|-|-|-|-|-|-|-|-|**9**|9|9|Sinh|
|Size|**1**|1|1|1|1|1|1|1|1|1|1|Size|
|Slice|**1**|1|1|1|1|1|1|1|1|**10**|**11**|Slice|
|Softmax|**1**|1|1|1|1|1|1|1|1|1|**11**|Softmax|
|Softplus|**1**|1|1|1|1|1|1|1|1|1|1|Softplus|
|Softsign|**1**|1|1|1|1|1|1|1|1|1|1|Softsign|
|SpaceToDepth|**1**|1|1|1|1|1|1|1|1|1|1|SpaceToDepth|
|Split|**1**|**2**|2|2|2|2|2|2|2|2|**11**|Split|
|SplitToSequence|-|-|-|-|-|-|-|-|-|-|**11**:small_red_triangle:|SplitToSequence|
|Sqrt|**1**|1|1|1|1|**6**|6|6|6|6|6|Sqrt|
|Squeeze|**1**|1|1|1|1|1|1|1|1|1|**11**|Squeeze|
|StringNormalizer|-|-|-|-|-|-|-|-|-|**10**:small_red_triangle:|10:small_red_triangle:|StringNormalizer|
|Sub|**1**|1|1|1|1|**6**|**7**|7|7|7|7|Sub|
|Sum|**1**|1|1|1|1|**6**|6|**8**|8|8|8|Sum|
|Tan|-|-|-|-|-|-|**7**|7|7|7|7|Tan|
|Tanh|**1**|1|1|1|1|**6**|6|6|6|6|6|Tanh|
|TfIdfVectorizer|-|-|-|-|-|-|-|-|**9**|9|9|TfIdfVectorizer|
|ThresholdedRelu|-|-|-|-|-|-|-|-|-|**10**|10|ThresholdedRelu|
|Tile|**1**|1|1|1|1|**6**|6|6|6|6|6|Tile|
|TopK|**1**|1|1|1|1|1|1|1|1|**10**|**11**|TopK|
|Transpose|**1**|1|1|1|1|1|1|1|1|1|1|Transpose|
|Unique|-|-|-|-|-|-|-|-|-|-|**11**:small_red_triangle:|Unique|
|Unsqueeze|**1**|1|1|1|1|1|1|1|1|1|**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\*|Upsample|
|Where|-|-|-|-|-|-|-|-|**9**|9|9|Where|
|Xor|**1**|1|1|1|1|1|**7**|7|7|7|7|Xor|
ONNX-TF Supported Operators / ONNX Operators: 149 / 156
Notes:
1. Cast: Cast string to float32/float64/int32/int64 are not supported in Tensorflow.
2. Clip: Clip input in uint64 is not supported in Tensorflow.
3. ConvTranspose: ConvTranspose with dilations != 1, or transposed convolution for 4D or higher are not supported in Tensorflow.
4. CumSum: CumSum inputs in uint32/uint64 are not supported in Tensorflow.
5. Equal: Equal inputs in uint16/uint32/uint64 are not supported in Tensorflow.
6. 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.
7. LSTM: LSTM not using sigmoid for `f`, or LSTM not using the same activation for `g` and `h` are not supported in Tensorflow.
8. 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.
9. Mod: Mod Dividend or Divisor in int8/int16/uint8/uint16/uint32/uint64 are not supported in Tensorflow.
10. OneHot: OneHot indices in uint16/uint32/uint64/int8/int16/float16/float/double, or OneHot depth in uint8/uint16/uint32/uint64/int8/int16/int64/float16/float/double are not supported in Tensorflow.
11. RNN: RNN with clip is not supported in Tensorflow.
12. 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.
13. Upsample: Upsample required 4D input in Tensorflow.