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

#include <array_ops.h>

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

요약

이 작업은 다음을 통해 양자화된 순방향 전달의 정밀도 손실을 시뮬레이션합니다.

  1. 추론에 사용될 때 목표 양자화 방법과 일치해야 하는 고정 소수점 숫자로 텐서를 양자화합니다.
  2. 다음 작업을 위해 부동 소수점 숫자로 다시 역양자화합니다. matmul일 가능성이 높습니다.

양자화하는 방법에는 여러 가지가 있습니다. 이 버전은 크기 조정만 사용하므로 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] 범위를 표현 가능한 양자화 범위 내에 있는 범위에 매핑하는 최대 scale_factor를 결정합니다.

input_min과 input_max 중 하나에서 스케일을 결정한 다음 다른 하나를 업데이트하여 표현 가능한 범위를 최대화합니다.

예를 들어

  • 출력이 부호 있는 경우 num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: -128 / -10.0 = 12.8의 scale_factor를 사용합니다. 이 경우 input_max를 127 / 12.8 =로 업데이트합니다. 9.921875
  • 출력이 부호 있는 경우 num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: scale_factor 127 / 10.0 = 12.7을 사용합니다. 이 경우 input_min을 128.0 / 12.7 = -10.07874로 업데이트합니다.
  • 출력이 부호가 없는 경우 input_min은 강제로 0이 되고 지정된 input_max만 사용됩니다.

scale_factor를 결정하고 입력 범위를 업데이트한 후 '입력' 텐서의 각 값에 다음을 적용합니다.

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

위의 round 함수는 주어진 round_mode를 기준으로 값을 반올림합니다.

인수:

  • 범위: 범위 개체
  • 입력: 양자화한 다음 역양자화할 텐서입니다 .
  • 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' 속성은 float 값을 양자화된 값으로 반올림할 때 사용되는 반올림 타이 브레이킹 알고리즘을 제어합니다. 현재 지원되는 반올림 모드는 다음과 같습니다.
  • HALF_TO_EVEN: 기본 round_mode입니다.
  • HALF_UP: 양수 방향으로 반올림됩니다. 이 모드에서 7.5는 8로 반올림되고 -7.5는 -7로 반올림됩니다.
  • arrow_range: True인 경우 양자화된 최소값의 절대값은 1보다 큰 대신 양자화된 최대값과 동일합니다. 즉, 8비트 양자화의 경우 최소값은 -128이 아닌 -127입니다.
  • axis: 지정된 경우 이 축은 채널 또는 슬라이스 축으로 처리되며, 이 축을 따라 각 채널 또는 슬라이스에 대해 별도의 양자화 범위가 사용됩니다.

보고:

생성자와 소멸자

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

공개 정적 함수

Axis (int64 x)
NarrowRange (bool x)
NumBits (int64 x)
RangeGiven (bool x)
RoundMode (StringPiece x)
SignedInput (bool x)

구조체

텐서플로우:: ops:: QuantizeAndDeQuantizeV2:: Attrs

QuantizeAndDeQuantizeV2 에 대한 선택적 속성 설정자입니다.

공개 속성

작업

Operation operation

산출

::tensorflow::Output output

공공 기능

양자화 및 역양자화V2

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

양자화 및 역양자화V2

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

좁은 범위

Attrs NarrowRange(
  bool x
)

NumBits

Attrs NumBits(
  int64 x
)

주어진 범위

Attrs RangeGiven(
  bool x
)

라운드 모드

Attrs RoundMode(
  StringPiece x
)

서명된 입력

Attrs SignedInput(
  bool x
)