텐서플로우:: ops:: 양자화 및 역양자화V2

#include <array_ops.h>

텐서를 양자화한 다음 역양자화합니다.

요약

이 연산은 양자화된 순방향 전달에서 발생하는 정밀도 손실을 다음과 같이 시뮬레이션합니다.

  1. 텐서를 고정 소수점 숫자로 양자화하는데, 이는 추론에 사용될 때 목표 양자화 방식과 일치해야 합니다.
  2. 다음 연산(아마도 계산 연산)을 위해 다시 부동 소수점 숫자로 변환합니다.

양자화하는 방법에는 여러 가지가 있습니다. 이 버전은 스케일링만 사용하므로 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 중 하나를 기준으로 척도를 결정한 다음, 표현 가능한 범위를 최대화하도록 다른 하나를 업데이트합니다.

예

  • 출력값이 부호 있는 정수이고 비트 수가 8개이며 입력값의 최소값과 최대값이 [-10.0, 5.0] 범위에 있다면, 스케일 팩터는 -128 / -10.0 = 12.8이 됩니다. 이 경우 입력값의 최대값은 127 / 12.8 = 9.921875로 업데이트됩니다.
  • 출력값이 부호 있는 정수이고 비트 수가 8개이며 입력값의 최소값과 최대값이 [-10.0, 10.0] 범위에 있다면, 스케일 팩터는 127 / 10.0 = 12.7이 됩니다. 이 경우 입력값의 최소값은 128.0 / 12.7 = -10.07874로 업데이트됩니다.
  • 출력값이 부호 없는 정수인 경우, input_min은 0으로 강제 설정되고 지정된 input_max만 사용됩니다.

스케일 팩터를 결정하고 입력 범위를 업데이트한 후, 'input' 텐서의 각 값에 다음 작업을 적용합니다.

출력 = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.

위의 반올림 함수는 지정된 round_mode에 따라 값을 반올림합니다.

논거:

  • 범위: Scope 객체
  • 입력: 양자화 및 역양자화할 텐서 .
  • 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로 설정하면 양자화된 최소값의 절댓값이 양자화된 최대값의 절댓값과 동일합니다. 즉, 8비트 양자화의 경우 최소값은 -128이 아닌 -127입니다.

보고:

생성자와 소멸자

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)

구조

텐서플로우:: 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() const 

연산자::텐서플로우::출력

 operator::tensorflow::Output() const 

공개 정적 함수

내로우 레인지

Attrs NarrowRange(
  bool x
)

넘비트

Attrs NumBits(
  int64 x
)

주어진 범위

Attrs RangeGiven(
  bool x
)

라운드모드

Attrs RoundMode(
  StringPiece x
)

서명된 입력

Attrs SignedInput(
  bool x
)