反量化TensorFlow張量

2018-09-26 17:46 更新

tf.dequantize

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

參見(jiàn)指南:張量變換>分割和連接

上述代碼將 “input” 張量反量化為浮動(dòng)張量.

[min_range,max_range] 是指定 “input” 數(shù)據(jù)范圍的標(biāo)量浮點(diǎn)數(shù).'mode' 屬性精確地用于控制將浮點(diǎn)值轉(zhuǎn)換為其量化的等效項(xiàng)的計(jì)算.

在 “MIN_COMBINED” 模式下,張量的每個(gè)值將經(jīng)歷如下過(guò)程:

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 模式示例

如果輸入來(lái)自 QuantizedRelu6,則輸出類型為 quint8 (范圍為 0-255),但 QuantizedRelu6 的可能范圍為0-6.因此,min_range 和 max_range 值是0.0 和6.0.在 quint8 上取消量化將取每個(gè)值,轉(zhuǎn)換為浮點(diǎn)數(shù)并乘以 6 / 255.請(qǐng)注意,如果 quantizedtype 為 qint8,則操作將在強(qiáng)制轉(zhuǎn)換之前將每個(gè)值添加 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 產(chǎn)生的最小標(biāo)量值.
  • max_range:類型為 float32 的張量.可能是 input 產(chǎn)生的最大標(biāo)量值.
  • mode:字符串,可以從:"MIN_COMBINED", "MIN_FIRST"中選擇,默認(rèn)為"MIN_COMBINED".
  • name:操作的名稱(可選).

返回:

返回類型為 float32 的張量.

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)