텐서플로우:: 작전:: 퀀타이즈V2

#include <array_ops.h>

float 유형의 '입력' 텐서를 'T' 유형의 '출력' 텐서로 양자화합니다.

요약

[min_range, max_range]는 '입력' 데이터의 범위를 지정하는 스칼라 부동 소수점입니다. 'mode' 속성은 float 값을 양자화된 값으로 변환하는 데 사용되는 계산을 정확하게 제어합니다. 'round_mode' 속성은 float 값을 양자화된 값으로 반올림할 때 사용되는 반올림 타이 브레이킹 알고리즘을 제어합니다.

'MIN_COMBINED' 모드에서 텐서의 각 값은 다음을 수행합니다.

out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
if T == qint8: out[i] -= (range(T) + 1) / 2.0

여기서 range(T) = numeric_limits ::max() - numeric_limits ::min() range(T) = numeric_limits ::max() - numeric_limits ::min() range(T) = numeric_limits ::max() - numeric_limits ::min()

MIN_COMBINED 모드 예

입력이 float 유형이고 가능한 범위가 [0.0, 6.0]이고 출력 유형이 quint8 ([0, 255])이라고 가정합니다. min_range 및 max_range 값은 0.0 및 6.0으로 지정되어야 합니다. float에서 quint8로 양자화하면 입력의 각 값에 255/6을 곱하고 quint8로 변환됩니다.

출력 유형이 qint8([-128, 127])인 경우 작업은 캐스팅 전에 각 값을 128씩 추가로 빼므로 값 범위가 qint8의 범위와 일치합니다.

모드가 'MIN_FIRST'인 경우 다음 접근 방식이 사용됩니다.

num_discrete_values = 1 << (# of bits in T)
range_adjust
= num_discrete_values / (num_discrete_values - 1)
range
= (range_max - range_min) * range_adjust
range_scale
= num_discrete_values / range
quantized
= round(input * range_scale) - round(range_min * range_scale) +
  numeric_limits

MIN_COMBINED와 가장 큰 차이점은 최소 범위가 반올림된 값에서 빼기 전에 먼저 반올림된다는 것입니다. MIN_COMBINED를 사용하면 반복적인 양자화 및 역양자화 반복으로 인해 점점 더 큰 오류가 발생하는 작은 편향이 도입됩니다.

스케일 모드 예

SCALED 모드는 QuantizeAndDequantize{V2|V3} 에서 사용되는 양자화 접근 방식과 일치합니다.

모드가 SCALED 인 경우 각 입력 값에 scale_factor를 곱하여 양자화를 수행합니다. scale_factor는 min_rangemax_range 에서 min_range 부터 max_range 까지의 범위가 T 유형의 값 내에서 표현 가능하도록 가능한 한 크게 결정됩니다.

  


 


   

 다음으로 scale_factor 사용하여 다음과 같이 min_range max_range 조정합니다.

 예를 들어 T = qint8이고 초기에 min_range = -10, max_range = 9 경우 -128/-10.0 = 12.8 127/9.0 = 14.11 비교하고 scale_factor = 12.8 설정합니다. 경우 min_range -10으로 유지됩니다. 그러나 max_range 127 / 12.8 = 9.921875 조정됩니다.

따라서 (-10, 9.921875) ~ (-128, 127) 범위의 입력 값을 양자화하겠습니다.

이제 입력 텐서는 min_range ~ max_range 범위의 값을 잘라낸 다음과 같이 scale_factor 곱하여 양자화할 있습니다.

 조정된 min_range max_range 작업의 출력 2 3으로 반환됩니다. 이러한 출력은 추가 계산을 위한 범위로 사용되어야 합니다.

Narrow_range(부울) 속성

true 경우 최소 양자화된 값을 사용하지 않습니다. 즉, int8 양자화된 출력의 경우 전체 -128..127 범위 대신 -127..127 범위로 제한됩니다. 이는 특정 추론 백엔드와의 호환성을 위해 제공됩니다. (SCALED 모드에만 적용됩니다)

축(int) 속성

선택적 axis 속성은 입력 텐서의 차원 인덱스를 지정할 있으므로 양자화 범위는 해당 차원을 따라 텐서의 조각에 대해 별도로 계산되고 적용됩니다. 이는 채널별 양자화에 유용합니다.

축이 지정되면 min_range max_range

axis =None이면 텐서별 양자화가 정상적으로 수행됩니다.

verify_minimum_range(부동 소수점) 속성

최소 양자화 범위가 이상인지 확인합니다. 이에 대한 레거시 기본값은 0.01이지만 새로운 용도로 사용하려면 0으로 설정하는 것이 좋습니다.

인수:

  • 범위: 범위 개체
  • min_range: 양자화 범위의 최소값입니다. 값은 다른 매개변수에 따라 op 의해 조정될 있습니다. 조정된 값은 output_min 기록됩니다. axis 속성이 지정된 경우 이는 입력 출력 텐서의 axis 차원과 크기가 일치하는 1차원 텐서여야 합니다.
  • max_range: 양자화 범위의 최대값입니다. 값은 다른 매개변수에 따라 op 의해 조정될 있습니다. 조정된 값은 output_max 기록됩니다. axis 속성이 지정된 경우 이는 입력 출력 텐서의 axis 차원과 크기가 일치하는 1차원 텐서여야 합니다.

보고:

  • Output 출력: 부동 소수점 입력에서 생성된 양자화된 데이터입니다.
  • Output 출력_최소: 입력 값을 양자화된 값으로 크기 조정하고 반올림하기 전에 입력 값을 잘라내는 사용되는 최종 양자화 범위 최소값입니다. axis 속성이 지정되면 입력 출력 텐서의 axis 차원과 크기가 일치하는 1차원 텐서가 됩니다.
  • Output 출력_최대: 입력 값을 양자화된 값으로 크기 조정하고 반올림하기 전에 입력 값을 잘라내는 사용되는 최종 양자화 범위 최대값입니다. axis 속성이 지정되면 입력 출력 텐서의 axis 차원과 크기가 일치하는 1차원 텐서가 됩니다.

 생성자와 소멸자

QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T)
 QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs)
 

공개 정적 함수

Axis (int64 x)
EnsureMinimumRange (float x)
Mode (StringPiece x)
NarrowRange (bool x)
RoundMode (StringPiece x)

 구조체

텐서플로우:: ops:: QuantizeV2:: 속성

QuantizeV2 대한 선택적 속성 설정자.

공개 속성

 작업

 

산출

 

출력_최대

 

출력_최소

 

공공 기능

 퀀타이즈V2

 

퀀타이즈V2

 

공개 정적 함수

 중심선

 

최소 범위 보장

 

방법

 

좁은 범위

 

라운드 모드