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:

  1. 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.
  2. 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 tensor input .
  • 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 tensor input .

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.
  • eixo: se especificado, este eixo é tratado como um eixo de canal ou fatia, e uma faixa de quantização separada é usada para cada canal ou fatia ao longo deste eixo.

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

Axis (int64 x)
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
)

::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

Eixo

Attrs Axis(
  int64 x
)

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
)