fluxo tensor:: ops:: QuantizeAndDequantizeV2
#include <array_ops.h>
Quantiza e desquantiza um tensor.
Resumo
Esta operação simula a perda de precisão da passagem direta quantizada por:
- Quantizando o tensor para números de ponto fixo, que devem corresponder ao método de quantização alvo quando for usado em inferência.
- Desquantizando-o de volta para números de ponto flutuante para as operações seguintes, provavelmente matmul.
Existem diferentes maneiras de quantizar. Esta versão usa apenas escala, então 0,0 é mapeado para 0.
A partir dos 'num_bits' especificados no tipo de saída quantizada, ele determina os valores quantizados representáveis mínimos e máximos.
por exemplo
- [-128, 127] para assinado, num_bits = 8 ou
- [0, 255] para não assinado, num_bits = 8.
Se range_given == False, o input_min, input_max inicial será determinado automaticamente como os valores mínimo e máximo no tensor de entrada, caso contrário, os valores especificados de input_min, input_max serão usados.
Nota: Se input_min, input_max forem especificados, eles não precisam ser iguais aos valores mínimo e máximo reais no tensor. por exemplo, em alguns casos, pode ser benéfico especificar estes valores de modo que os extremos de baixa probabilidade da distribuição de input sejam cortados.
Esta operação determina o fator de escala máximo que mapearia o intervalo inicial [input_min, input_max] para um intervalo que esteja dentro do intervalo quantizado representável.
Ele determina a escala de input_min e input_max e, em seguida, atualiza a outra para maximizar o intervalo representável.
por exemplo
- se a saída estiver assinada, num_bits = 8, [input_min, input_max] = [-10,0, 5,0]: usaria um fator de escala de -128 / -10,0 = 12,8. Nesse caso, atualizaria input_max para 127 / 12,8 = 9.921875
- se a saída estiver assinada, num_bits = 8, [input_min, input_max] = [-10,0, 10,0]: usaria um fator de escala de 127/10,0 = 12,7. Nesse caso, atualizaria input_min para 128,0/12,7 = -10,07874
- se a saída não estiver assinada, input_min será forçado a ser 0 e apenas o input_max especificado será usado.
Depois de determinar o fator_escala e atualizar o intervalo de entrada, ele aplica o seguinte a cada valor no tensor de 'entrada'.
saída = round(clamp(valor, input_min, input_max) * escala_fator) / escala_fator.
A função round acima arredonda o valor com base no round_mode fornecido.
Argumentos:
- escopo: um objeto Escopo
- entrada: Tensor para quantizar e depois desquantizar.
- input_min: Se
range_given == True
, especifica o valor mínimo de entrada que precisa ser representado, caso contrário, é determinado a partir do valor mínimo do tensorinput
. - input_max: Se
range_given == True
, especifica o valor máximo de entrada que precisa ser representado, caso contrário, é determinado a partir do valor máximo do tensorinput
.
Atributos opcionais (veja Attrs
):
- assinado_input: se a quantização é assinada ou não. (na verdade, este parâmetro deveria ter sido chamado
signed_output
) - num_bits: A largura de bits da quantização.
- range_given: se o intervalo é fornecido ou deve ser determinado a partir do tensor
input
. - round_mode: O atributo 'round_mode' controla qual algoritmo de desempate de arredondamento é usado ao arredondar valores flutuantes para seus equivalentes quantizados. Os seguintes modos de arredondamento são atualmente suportados:
- HALF_TO_EVEN: este é o round_mode padrão.
- HALF_UP: arredondamento para positivo. Neste modo 7,5 arredondamentos até 8 e -7,5 arredondamentos até -7.
- intervalo_estreito: se for True, então o valor absoluto do valor mínimo quantizado é igual ao valor máximo quantizado, em vez de 1 a mais. ou seja, para quantização de 8 bits, o valor mínimo é -127 em vez de -128.
Retorna:
-
Output
: o tensor de saída.
Construtores e Destruidores | |
---|---|
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) |
Atributos públicos | |
---|---|
operation | |
output |
Funções públicas | |
---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const |
Funções estáticas públicas | |
---|---|
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) |
Estruturas | |
---|---|
tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs | Configuradores de atributos opcionais para QuantizeAndDequantizeV2 . |
Atributos públicos
operação
Operation operation
saída
::tensorflow::Output output
Funções públicas
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 )
nó
::tensorflow::Node * node() const
operador::tensorflow::Input
operator::tensorflow::Input() const
operador::tensorflow::Saída
operator::tensorflow::Output() const
Funções estáticas públicas
Faixa Estreita
Attrs NarrowRange( bool x )
Numbits
Attrs NumBits( int64 x )
Alcance dado
Attrs RangeGiven( bool x )
Modo redondo
Attrs RoundMode( StringPiece x )
Entrada assinada
Attrs SignedInput( bool x )