텐서플로우:: 작전:: 양자화 및 역양자화V2
#include <array_ops.h>
텐서를 양자화한 다음 역양자화합니다.
요약
이 작업은 다음을 통해 양자화된 순방향 전달의 정밀도 손실을 시뮬레이션합니다.
- 추론에 사용될 때 목표 양자화 방법과 일치해야 하는 고정 소수점 숫자로 텐서를 양자화합니다.
- 다음 작업을 위해 부동 소수점 숫자로 다시 역양자화합니다. 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: 지정된 경우 이 축은 채널 또는 슬라이스 축으로 처리되며, 이 축을 따라 각 채널 또는 슬라이스에 대해 별도의 양자화 범위가 사용됩니다.
보고:
-
Output
: 출력 텐서.
생성자와 소멸자 | |
---|---|
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 )