反量化TensorFlow张量
2018-09-26 17:46 更新
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 的张量.