阅读(3541) (10)

反量化TensorFlow张量

2017-09-26 17:23:26 更新

tf.dequantize

dequantize(
    input,
    min_range,
    max_range,
    mode=None,
    name=None
)

参见指南:张量变换>分割和连接

上述代码将 “input” 张量反量化为浮动张量.

[min_range,max_range] 是指定 “input” 数据范围的标量浮点数.'mode' 属性精确地用于控制将浮点值转换为其量化的等效项的计算.

在 “MIN_COMBINED” 模式下,张量的每个值将经历如下过程:

if T == qint8, in[i] += (range(T) + 1)/ 2.0
out[i] = min_range + (in[i]* (max_range - min_range) / range(T))

其中:range(T) = numeric_limits<T>::max() - numeric_limits<T>::min()

MIN_COMBINED 模式示例

如果输入来自 QuantizedRelu6,则输出类型为 quint8 (范围为 0-255),但 QuantizedRelu6 的可能范围为0-6.因此,min_range 和 max_range 值是0.0 和6.0.在 quint8 上取消量化将取每个值,转换为浮点数并乘以 6 / 255.请注意,如果 quantizedtype 为 qint8,则操作将在强制转换之前将每个值添加 128.

如果模式是 "MIN_FIRST", 则使用此方法:

number_of_steps = 1 << (# of bits in T)
range_adjust = number_of_steps / (number_of_steps - 1)
range = (range_max - range_min) * range_adjust
range_scale = range / number_of_steps
const double offset_input = static_cast<double>(input) - lowest_quantized;
result = range_min + ((input - numeric_limits<T>::min()) * range_scale)

ARGS:

  • input:张量.必须是下列类型之一:qint8,quint8,qint16,quint16,qint32.
  • min_range:类型为 float32 的张量.可能是 input 产生的最小标量值.
  • max_range:类型为 float32 的张量.可能是 input 产生的最大标量值.
  • mode:字符串,可以从:"MIN_COMBINED", "MIN_FIRST"中选择,默认为"MIN_COMBINED".
  • name:操作的名称(可选).

返回:

返回类型为 float32 的张量.