Tensorflow :: ops :: Dequantisieren
#include <array_ops.h>
Dequantisieren Sie den Eingangstensor in einen Float- Tensor .
Zusammenfassung
[min_range, max_range] sind skalare Floats, die den Bereich für die 'Eingabedaten' angeben. Das Attribut 'mode' steuert genau, welche Berechnungen verwendet werden, um die Gleitkommawerte in ihre quantisierten Äquivalente umzuwandeln.
Im Modus 'MIN_COMBINED' wird jeder Wert des Tensors wie folgt durchlaufen:
if T == qint8: in[i] += (range(T) + 1)/ 2.0 out[i] = min_range + (in[i]* (max_range - min_range) / range(T))hier
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
Beispiel für den MIN_COMBINED-Modus
Wenn die Eingabe von einem QuantizedRelu6 stammt , ist der Ausgabetyp quint8 (Bereich von 0-255), aber der mögliche Bereich von QuantizedRelu6 ist 0-6. Die Werte für min_range und max_range sind daher 0.0 und 6.0. Bei der Dequantisierung auf quint8 wird jeder Wert angenommen, in float umgewandelt und mit 6/255 multipliziert. Beachten Sie, dass bei einem quantisierten Typ von qint8 jeder Wert vor dem Casting zusätzlich um 128 addiert wird.
Wenn der Modus 'MIN_FIRST' ist, wird dieser Ansatz verwendet:
num_discrete_values = 1 << (# of bits in T) range_adjust = num_discrete_values / (num_discrete_values - 1) range = (range_max - range_min) * range_adjust range_scale = range / num_discrete_values const double offset_input = static_cast(input) - lowest_quantized; result = range_min + ((input - numeric_limits ::min()) * range_scale)
SCALED-Modus Beispiel
SCALED
Modus entspricht dem in QuantizeAndDequantize{V2|V3}
verwendeten QuantizeAndDequantize{V2|V3}
.
Wenn der Modus SCALED
, verwenden wir nicht den gesamten Bereich des Ausgabetyps und wählen den niedrigstmöglichen Wert für die Symmetrie aus (z. B. beträgt der Ausgabebereich -127 bis 127, nicht -128 bis 127 für die vorzeichenbehaftete 8-Bit-Quantisierung). so dass 0.0 auf 0 abgebildet wird.
Den Wertebereich finden wir zunächst in unserem Tensor. Der Bereich, den wir verwenden, ist immer auf 0 zentriert, daher finden wir m so, dass
m = max(abs(input_min), abs(input_max))
Unser Eingangstensorbereich ist dann [-m, m]
.
Als nächstes wählen wir unsere Festpunkt-Quantisierungs-Buckets [min_fixed, max_fixed]
. Wenn T signiert ist, ist dies
num_bits = sizeof(T) * 8 [min_fixed, max_fixed] = [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]
Andernfalls ist der Festpunktbereich
[min_fixed, max_fixed] = [0, (1 << num_bits) - 1], wenn T ohne Vorzeichen ist
Daraus berechnen wir unseren Skalierungsfaktor s:
s = (2 * m) / (max_fixed - min_fixed)
Jetzt können wir die Elemente unseres Tensors dequantisieren:
result = input * s
Argumente:
- scope: Ein Scope- Objekt
- min_range: Der minimale Skalarwert, der möglicherweise für die Eingabe erzeugt wird.
- max_range: Der maximale Skalarwert, der möglicherweise für die Eingabe erzeugt wird.
Kehrt zurück:
-
Output
: Der Ausgangstensor.
Konstruktoren und Destruktoren | |
---|---|
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range) | |
Dequantize (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, const Dequantize::Attrs & attrs) |
Öffentliche Attribute | |
---|---|
operation | |
output |
Öffentliche Funktionen | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Öffentliche statische Funktionen | |
---|---|
Mode (StringPiece x) |
Strukturen | |
---|---|
tensorflow :: ops :: Dequantize :: Attrs | Optionale Attributsetzer für Dequantize . |
Öffentliche Attribute
Operation
Operation operation
Ausgabe
::tensorflow::Output output
Öffentliche Funktionen
Dequantisieren
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range )
Dequantisieren
Dequantize( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, const Dequantize::Attrs & attrs )
Knoten
::tensorflow::Node * node() const
operator :: tensorflow :: Input
operator::tensorflow::Input() const
operator :: tensorflow :: Output
operator::tensorflow::Output() const
Öffentliche statische Funktionen
Modus
Attrs Mode( StringPiece x )