텐서플로우:: ops:: 양자화 및 역양자화V2
#include <array_ops.h>텐서를 양자화한 다음 역양자화합니다.
요약
이 연산은 양자화된 순방향 전달에서 발생하는 정밀도 손실을 다음과 같이 시뮬레이션합니다.
- 텐서를 고정 소수점 숫자로 양자화하는데, 이는 추론에 사용될 때 목표 양자화 방식과 일치해야 합니다.
- 다음 연산(아마도 계산 연산)을 위해 다시 부동 소수점 숫자로 변환합니다.
양자화하는 방법에는 여러 가지가 있습니다. 이 버전은 스케일링만 사용하므로 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입니다.
보고:
-
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 | |
공개 정적 함수 | |
|---|---|
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 )