tensorflow:: ops:: QuantizeAndDequantizeV2
#include <array_ops.h>テンソルを量子化してから逆量子化します。
まとめ
この演算は、量子化された順伝播による精度損失を次のようにシミュレートします。
- テンソルを固定小数点数に量子化する。これは、推論で使用される際のターゲット量子化方法と一致する必要がある。
- 次の演算(おそらく行列乗算)のために、浮動小数点数に逆量子化します。
量子化にはさまざまな方法があります。このバージョンではスケーリングのみを使用するため、0.0は0にマッピングされます。
量子化出力タイプで指定された「num_bits」から、表現可能な最小および最大の量子化値を決定します。
例えば
- [-128, 127] 符号付きの場合、num_bits = 8、または
- 符号なしの場合 [0, 255]、num_bits = 8。
range_given == False の場合、input_min、input_max は入力テンソルの最小値と最大値として自動的に決定されます。それ以外の場合は、指定された input_min、input_max の値が使用されます。
注:input_min、input_maxが指定されている場合、それらはテンソル内の実際の最小値と最大値と等しくする必要はありません。たとえば、場合によっては、入力分布の確率の低い極端な値を制限するようにこれらの値を指定することが有益な場合があります。
この演算は、初期範囲[input_min, input_max]を表現可能な量子化範囲内の範囲にマッピングする最大スケール係数を決定します。
input_minとinput_maxのいずれか一方からスケールを決定し、表現可能な範囲を最大化するように他方を更新します。
例えば
- 出力が符号付きの場合、num_bits = 8、[input_min, input_max] = [-10.0, 5.0]: スケールファクターとして -128 / -10.0 = 12.8 が使用されます。この場合、input_max は 127 / 12.8 = 9.921875 に更新されます。
- 出力が符号付きの場合、num_bits = 8、[input_min, input_max] = [-10.0, 10.0]: スケールファクターとして 127 / 10.0 = 12.7 が使用されます。この場合、input_min は 128.0 / 12.7 = -10.07874 に更新されます。
- 出力が符号なしの場合、input_minは強制的に0になり、指定されたinput_maxのみが使用されます。
scale_factorを決定し、入力範囲を更新した後、'input'テンソルの各値に以下を適用します。
output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor。
上記のround関数は、指定されたround_modeに基づいて値を丸めます。
議論:
- スコープ:スコープオブジェクト
- 入力:量子化および逆量子化を行うテンソル。
- input_min:
range_given == Trueの場合、これは表現する必要のある最小入力値を指定します。そうでない場合は、inputテンソルの最小値から決定されます。 - input_max:
range_given == Trueの場合、これは表現する必要のある最大入力値を指定します。そうでない場合は、inputテンソルの最大値から決定されます。
オプション属性( Attrs参照):
- signed_input: 量子化が符号付きか符号なしかを指定します。(実際には、このパラメータは
signed_outputと呼ばれるべきでした。) - num_bits: 量子化のビット幅。
- range_given: 範囲が指定されているか、
inputテンソルから決定する必要があるか。 - round_mode: 'round_mode'属性は、浮動小数点値を量子化された値に丸める際に使用する丸めタイブレークアルゴリズムを制御します。現在サポートされている丸めモードは以下のとおりです。
- HALF_TO_EVEN: これはデフォルトのラウンドモードです。
- HALF_UP: 正の方向に切り上げます。このモードでは、7.5は8に、-7.5は-7に切り上げられます。
- narrow_range: Trueの場合、量子化された最小値の絶対値は、量子化された最大値より1大きい値ではなく、同じ値になります。つまり、8ビット量子化の場合、最小値は-128ではなく-127になります。
返品:
-
Output:出力テンソル。
コンストラクターとデストラクタ | |
|---|---|
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max) | |
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs) |
公開属性 | |
|---|---|
operation | |
output | |
公的機能 | |
|---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const | |
パブリック静的関数 | |
|---|---|
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) | |
構造 | |
|---|---|
| tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs | QuantizeAndDequantizeV2のオプション属性セッター。 |
公開属性
手術
Operation operation
出力
::tensorflow::Output output
公的機能
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs )
ノード
::tensorflow::Node * node() const
operator::tensorflow::Input
operator::tensorflow::Input() const
operator::tensorflow::Output
operator::tensorflow::Output() const
パブリック静的関数
狭い範囲
Attrs NarrowRange( bool x )
ビット数
Attrs NumBits( int64 x )
範囲指定
Attrs RangeGiven( bool x )
ラウンドモード
Attrs RoundMode( StringPiece x )
署名付き入力
Attrs SignedInput( bool x )