tensorflow::ops::QuantizeV2

#include <array_ops.h>

แปลงเทนเซอร์ 'อินพุต' ชนิด float ให้เป็นเทนเซอร์ 'เอาต์พุต' ชนิด 'T'

สรุป

[min_range, max_range] เป็นค่าทศนิยมแบบสเกลาร์ที่ระบุช่วงสำหรับข้อมูล 'อินพุต' คุณสมบัติ 'mode' ควบคุมการคำนวณที่ใช้ในการแปลงค่าทศนิยมเป็นค่าควอนไทซ์ คุณสมบัติ 'round_mode' ควบคุมอัลกอริทึมการปัดเศษที่ใช้ในการปัดเศษค่าทศนิยมเป็นค่าควอนไทซ์

ในโหมด '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()

ตัวอย่างโหมด 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()
quantized = max(quantized, numeric_limits::min())
quantized = min(quantized, numeric_limits::max())

ความแตกต่างที่สำคัญที่สุดระหว่างวิธีนี้กับ MIN_COMBINED คือ ค่าช่วงต่ำสุดจะถูกปัดเศษก่อน จากนั้นจึงนำไปลบออกจากค่าที่ปัดเศษแล้ว ส่วน MIN_COMBINED นั้น จะมีความคลาดเคลื่อนเล็กน้อยเกิดขึ้น โดยการทำซ้ำกระบวนการควอนไทซ์และดีควอนไทซ์หลายครั้งจะทำให้เกิดข้อผิดพลาดที่มากขึ้นเรื่อยๆ

ตัวอย่างโหมดปรับขนาด

โหมด SCALED ตรงกับวิธีการควอนไทเซชันที่ใช้ใน QuantizeAndDequantize{V2|V3}

หากโหมดเป็น SCALED การหาปริมาณจะทำโดยการคูณค่าอินพุตแต่ละค่าด้วยตัวประกอบการปรับขนาด ตัวประกอบการปรับขนาดจะถูกกำหนดจาก min_range และ max_range ให้มีค่ามากที่สุดเท่าที่จะเป็นไปได้ เพื่อให้ช่วงตั้งแต่ min_range ถึง max_range สามารถแสดงได้ภายในค่าประเภท T

  

  const int min_T = std::numeric_limits::min();
  const int max_T = std::numeric_limits::max();
  const float max_float = std::numeric_limits::max();

  const float scale_factor_from_min_side =
      (min_T * min_range > 0) ? min_T / min_range : max_float;
  const float scale_factor_from_max_side =
      (max_T * max_range > 0) ? max_T / max_range : max_float;

  const float scale_factor = std::min(scale_factor_from_min_side,
                                      scale_factor_from_max_side);

ต่อไปเราจะใช้ scale_factor เพื่อปรับ min_range และ max_range ดังนี้:

      min_range = min_T / scale_factor;
      max_range = max_T / scale_factor;

เช่น ถ้า T = qint8 และค่าเริ่มต้น min_range = -10 และ max_range = 9 เราจะเปรียบเทียบ -128/-10.0 = 12.8 กับ 127/9.0 = 14.11 แล้วตั้งค่า scaling_factor = 12.8 ในกรณีนี้ min_range จะยังคงเป็น -10 แต่ max_range จะถูกปรับเป็น 127 / 12.8 = 9.921875

ดังนั้นเราจะกำหนดค่าอินพุตเป็นค่าควอนไทซ์ในช่วง (-10, 9.921875) ถึง (-128, 127)

ขณะนี้เทนเซอร์อินพุตสามารถถูกควอนไทซ์ได้โดยการตัดค่าให้อยู่ในช่วง min_range ถึง max_range จากนั้นคูณด้วย scale_factor ดังนี้:

result = round(min(max_range, max(min_range, input)) * scale_factor)

min_range และ max_range ที่ปรับแล้วจะถูกส่งกลับเป็นผลลัพธ์ที่ 2 และ 3 ของการดำเนินการนี้ ควรใช้ผลลัพธ์เหล่านี้เป็นช่วงสำหรับการคำนวณเพิ่มเติมใดๆ

คุณลักษณะ narrow_range (บูลีน)

ถ้าเป็นจริง เราจะไม่ใช้ค่าควอนไทซ์ต่ำสุด เช่น สำหรับ int8 ค่าเอาต์พุตควอนไทซ์จะถูกจำกัดอยู่ในช่วง -127..127 แทนที่จะเป็นช่วง -128..127 เต็มช่วง ทั้งนี้เพื่อความเข้ากันได้กับแบ็กเอนด์การอนุมานบางอย่าง (ใช้ได้เฉพาะโหมด SCALED เท่านั้น)

คุณลักษณะแกน (จำนวนเต็ม)

คุณลักษณะ axis เสริมสามารถระบุถึงดัชนีมิติของเทนเซอร์อินพุตได้ เพื่อให้ช่วงการควอนไทเซชันถูกคำนวณและนำไปใช้แยกกันสำหรับแต่ละส่วนของเทนเซอร์ตามมิตินั้น ซึ่งมีประโยชน์สำหรับการควอนไทเซชันต่อช่องสัญญาณ

หากมีการระบุแกน ค่า min_range และ max_range จะต้องระบุด้วย

ถ้า axis = None จะทำการหาปริมาณต่อเทนเซอร์ตามปกติ

แอตทริบิวต์ ensure_minimum_range (float)

รับประกันว่าช่วงการควอนไทเซชันขั้นต่ำจะมีค่าอย่างน้อยตามที่ระบุไว้ ค่าเริ่มต้นเดิมคือ 0.01 แต่ขอแนะนำอย่างยิ่งให้ตั้งค่าเป็น 0 สำหรับการใช้งานใหม่

ข้อโต้แย้ง:

  • ขอบเขต: วัตถุ ขอบเขต
  • min_range: ค่าต่ำสุดของช่วงการควอนไทเซชัน ค่านี้สามารถปรับได้โดยตัวดำเนินการ ขึ้นอยู่กับพารามิเตอร์อื่นๆ ค่าที่ปรับแล้วจะถูกเขียนลงใน output_min หากมีการระบุแอตทริบิวต์ axis ค่านี้จะต้องเป็นเทนเซอร์ 1 มิติที่มีขนาดตรงกับมิติ axis ของเทนเซอร์อินพุตและเอาต์พุต
  • max_range: ค่าสูงสุดของช่วงการควอนไทเซชัน ค่านี้สามารถปรับได้โดยตัวดำเนินการ ขึ้นอยู่กับพารามิเตอร์อื่นๆ ค่าที่ปรับแล้วจะถูกเขียนลงใน output_max หากมีการระบุแอตทริบิวต์ axis ค่านี้จะต้องเป็นเทนเซอร์ 1 มิติที่มีขนาดตรงกับมิติ axis ของเทนเซอร์อินพุตและเอาต์พุต

การส่งคืนสินค้า:

  • Output : ข้อมูลที่ถูกแปลงเป็นค่าควอนตัมจากข้อมูลทศนิยมที่ป้อนเข้ามา
  • ค่าต่ำสุดของช่วงการควอนไทเซ Output สุดท้าย: ใช้สำหรับตัดค่าอินพุตก่อนที่จะปรับขนาดและปัดเศษให้เป็นค่าควอนไทซ์ หากมีการระบุแอตทริบิวต์ axis ค่านี้จะเป็นเทนเซอร์ 1 มิติที่มีขนาดตรงกับมิติ axis ของเทนเซอร์อินพุตและเอาต์พุต
  • ค่าสูงสุดในขอบเขตการควอนไทเซ Output สุดท้าย: ใช้สำหรับตัดค่าอินพุตก่อนที่จะปรับขนาดและปัดเศษให้เป็นค่าควอนไทซ์ หากมีการระบุแอตทริบิวต์ axis ค่านี้จะเป็นเทนเซอร์ 1 มิติที่มีขนาดตรงกับมิติ axis ของเทนเซอร์อินพุตและเอาต์พุต

ตัวสร้างและตัวทำลาย

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)

คุณลักษณะสาธารณะ

operation
output
output_max
output_min

ฟังก์ชันคงที่สาธารณะ

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

โครงสร้าง

tensorflow::ops::QuantizeV2::Attrs

ตัวเลือกการตั้งค่าแอตทริบิวต์สำหรับ QuantizeV2

คุณลักษณะสาธารณะ

การดำเนินการ

Operation operation

เอาต์พุต

::tensorflow::Output output

เอาต์พุตสูงสุด

::tensorflow::Output output_max

เอาต์พุตขั้นต่ำ

::tensorflow::Output output_min

หน้าที่สาธารณะ

ควอนไทซ์ V2

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

ควอนไทซ์ V2

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

ฟังก์ชันคงที่สาธารณะ

แกน

Attrs Axis(
  int64 x
)

EnsureMinimumRange

Attrs EnsureMinimumRange(
  float x
)

โหมด

Attrs Mode(
  StringPiece x
)

ช่วงแคบ

Attrs NarrowRange(
  bool x
)

โหมดกลม

Attrs RoundMode(
  StringPiece x
)