tensorflow::ops::QuantizeAndDequantizeV2

#include <array_ops.h>

Quantiza e depois desquantiza um tensor.

Resumo

Esta operação simula a perda de precisão da passagem direta quantizada por meio de:

  1. Quantizar o tensor em números de ponto fixo, que devem corresponder ao método de quantização alvo quando usado na inferência.
  2. Convertendo-o de volta para números de ponto flutuante para as operações seguintes, provavelmente multiplicação de matrizes.

Existem diferentes maneiras de quantizar. Esta versão usa apenas escala, portanto 0,0 corresponde a 0.

A partir do 'num_bits' especificado no tipo de saída quantizada, ele determina os valores quantizados mínimo e máximo representáveis.

por exemplo

  • [-128, 127] para com sinal, num_bits = 8, ou
  • [0, 255] para unsigned, num_bits = 8.

Se range_given == False, os valores iniciais de input_min e input_max serão determinados automaticamente como os valores mínimo e máximo no tensor de entrada; caso contrário, os valores especificados para input_min e input_max serão utilizados.

Nota: Se os parâmetros `input_min` e `input_max` forem especificados, não precisam ser iguais aos valores mínimo e máximo reais do tensor. Por exemplo, em alguns casos, pode ser vantajoso especificar esses valores de forma que os extremos de baixa probabilidade da distribuição de entrada sejam limitados.

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 a partir de um dos valores input_min ou input_max e, em seguida, atualiza o outro para maximizar o intervalo representável.

por exemplo

  • Se a saída for com sinal, 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 for com sinal, 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 tiver sinal, input_min será forçado a ser 0 e apenas o input_max especificado será usado.

Após determinar o fator de escala e atualizar o intervalo de entrada, aplica-se o seguinte a cada valor no tensor 'input'.

saída = arredondar(limitar(valor, entrada_min, entrada_max) * fator_de_escala) / fator_de_escala.

A função de arredondamento acima arredonda o valor com base no modo de arredondamento fornecido.

Argumentos:

  • escopo: Um objeto de escopo
  • Entrada: Tensor a ser quantizado e, em seguida, desquantizado.
  • input_min: Se range_given == True , isso especifica o valor mínimo de entrada que precisa ser representado; caso contrário, ele é determinado a partir do valor mínimo do tensor input .
  • input_max: Se range_given == True , isso especifica o valor máximo de entrada que precisa ser representado; caso contrário, ele é determinado a partir do valor máximo do tensor input .

Atributos opcionais (ver Attrs ):

  • signed_input: Indica se a quantização é com sinal ou sem sinal. (na verdade, este parâmetro deveria se chamar signed_output )
  • num_bits: A largura em bits da quantização.
  • range_given: Indica se o intervalo é fornecido ou se 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 de ponto flutuante para seus equivalentes quantizados. Os seguintes modos de arredondamento são suportados atualmente:
  • HALF_TO_EVEN: este é o modo de arredondamento padrão.
  • HALF_UP: arredonda para o número positivo mais próximo. Nesse modo, 7,5 é arredondado para 8 e -7,5 é arredondado para -7.
  • narrow_range: Se True, o valor absoluto do valor mínimo quantizado é o mesmo que o valor máximo quantizado, em vez de ser 1 maior. 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 de fatia, e um intervalo de quantização separado é usado para cada canal ou fatia ao longo deste eixo.

Devoluções:

  • Output : O tensor de saída.

Construtores e Destrutores

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

Definidores de atributos opcionais para QuantizeAndDequantizeV2 .

Atributos públicos

operação

Operation operation

saída

::tensorflow::Output output

Funções públicas

Quantizar e DequantizarV2

 QuantizeAndDequantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input input_min,
  ::tensorflow::Input input_max
)

Quantizar e DequantizarV2

 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

Eixo

Attrs Axis(
  int64 x
)

Faixa estreita

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

Intervalo fornecido

Attrs RangeGiven(
  bool x
)

Modo redondo

Attrs RoundMode(
  StringPiece x
)

Entrada assinada

Attrs SignedInput(
  bool x
)