Files
ascend-tools/pt2pb/onnx-tensorflow/onnx_tf/handlers/backend/dequantize_linear.py
T
2020-10-14 08:55:07 +08:00

41 lines
1.4 KiB
Python

import tensorflow as tf
from onnx_tf.handlers.backend_handler import BackendHandler
from onnx_tf.handlers.handler import onnx_op
@onnx_op("DequantizeLinear")
class DequantizeLinear(BackendHandler):
@classmethod
def args_check(cls, node, **kwargs):
tensor_dict = kwargs["tensor_dict"]
if len(node.inputs) == 3:
x = tensor_dict[node.inputs[0]]
x_scale = tensor_dict[node.inputs[1]]
x_zero_point = tensor_dict[node.inputs[2]]
if x_scale.shape != x_zero_point.shape:
raise ValueError("DequantizeLinear x_scale(shape=" +
str(x_scale.shape) + ") and x_zero_point(shape=" +
str(x_zero_point.shape) +
") must be in the same shape")
if x_zero_point.dtype != x.dtype:
raise ValueError("DequantizeLinear x_zero_point(" +
str(x_zero_point.dtype) + ") and x(" + str(x.dtype) +
") must be in the same dtype")
@classmethod
def version_10(cls, node, **kwargs):
tensor_dict = kwargs["tensor_dict"]
x = tensor_dict[node.inputs[0]]
x = tf.cast(x, tf.float32)
x_scale = tensor_dict[node.inputs[1]]
if len(node.inputs) == 3 and x.dtype != tf.int32:
x_zero_point = tensor_dict[node.inputs[2]]
x_zero_point = tf.cast(x_zero_point, tf.float32)
x = tf.subtract(x, x_zero_point)
y = tf.multiply(x, x_scale)
return [y]