เทนเซอร์โฟลว์:: ปฏิบัติการ:: ควอนไทซ์V2
#include <array_ops.h>หาปริมาณเทนเซอร์ 'อินพุต' ประเภทลอยเป็นเทนเซอร์ 'เอาท์พุต' ประเภท 'T'
สรุป
[min_range, max_range] เป็นสเกลาร์โฟลตที่ระบุช่วงสำหรับข้อมูล 'อินพุต' แอตทริบิวต์ 'โหมด' ควบคุมได้อย่างแม่นยำว่าการคำนวณใดใช้ในการแปลงค่าทศนิยมให้เทียบเท่ากับปริมาณ แอตทริบิวต์ '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()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() quantized = max(quantized, numeric_limits ::min()) quantized = min(quantized, numeric_limits ::max()) 
ความแตกต่างที่ใหญ่ที่สุดระหว่างสิ่งนี้กับ MIN_COMBINED ก็คือช่วงขั้นต่ำจะถูกปัดเศษก่อน ก่อนที่จะลบออกจากค่าที่ปัดเศษ เมื่อใช้ MIN_COMBINED จะมีการใช้อคติเล็กน้อย โดยที่การวนซ้ำของการหาปริมาณและการลดปริมาณจะทำให้เกิดข้อผิดพลาดที่ใหญ่ขึ้นเรื่อยๆ
ตัวอย่างโหมด SCALED
 โหมด SCALED ตรงกับวิธีการหาปริมาณที่ใช้ใน QuantizeAndDequantize{V2|V3}
 หากโหมดเป็น SCALED การหาปริมาณจะดำเนินการโดยการคูณค่าอินพุตแต่ละค่าด้วย scaling_factor scaling_factor ถูกกำหนดจาก 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 ของการดำเนินการนี้ ควรใช้เอาต์พุตเหล่านี้เป็นช่วงสำหรับการคำนวณเพิ่มเติม
แอตทริบิวต์ช่วงแคบ (บูล)
หากเป็นจริง เราจะไม่ใช้ค่าเชิงปริมาณขั้นต่ำ เช่น สำหรับ int8 เอาต์พุตเชิงปริมาณ มันจะถูกจำกัดไว้ที่ช่วง -127..127 แทนที่จะเป็นช่วง -128..127 เต็ม มีไว้เพื่อให้เข้ากันได้กับแบ็กเอนด์การอนุมานบางอย่าง (ใช้กับโหมด SCALED เท่านั้น)
แอตทริบิวต์แกน (int)
 คุณลักษณะ axis ที่ไม่บังคับสามารถระบุดัชนีขนาดของเทนเซอร์อินพุตได้ เพื่อให้ช่วงการวัดปริมาณได้รับการคำนวณและใช้แยกกันสำหรับแต่ละส่วนของเมตริกซ์ตามมิตินั้น สิ่งนี้มีประโยชน์สำหรับการหาปริมาณต่อช่องสัญญาณ
หากระบุแกน ให้ใช้ min_range และ max_range
 ถ้า axis = ไม่มี การหาปริมาณต่อเทนเซอร์จะดำเนินการตามปกติ
แอตทริบิวต์ Sure_minimum_range (float)
ตรวจสอบให้แน่ใจว่าช่วงการหาปริมาณขั้นต่ำเป็นค่านี้อย่างน้อย ค่าเริ่มต้นดั้งเดิมสำหรับสิ่งนี้คือ 0.01 แต่ขอแนะนำอย่างยิ่งให้ตั้งค่าเป็น 0 สำหรับการใช้งานใหม่
ข้อโต้แย้ง:
- ขอบเขต: วัตถุ ขอบเขต
-  min_range: ค่าต่ำสุดของช่วงการหาปริมาณ ค่านี้อาจปรับได้โดย op ทั้งนี้ขึ้นอยู่กับพารามิเตอร์อื่นๆ ค่าที่ปรับแล้วจะถูกเขียนไปที่ output_minหากระบุแอตทริบิวต์axisจะต้องเป็นเทนเซอร์ 1-D ซึ่งมีขนาดตรงกับขนาดaxisของเทนเซอร์อินพุตและเอาท์พุต
-  max_range: ค่าสูงสุดของช่วงการหาปริมาณ ค่านี้อาจปรับได้โดย op ทั้งนี้ขึ้นอยู่กับพารามิเตอร์อื่นๆ ค่าที่ปรับแล้วจะถูกเขียนไปที่ output_maxหากระบุแอตทริบิวต์axisจะต้องเป็นเทนเซอร์ 1-D ซึ่งมีขนาดตรงกับขนาดaxisของเทนเซอร์อินพุตและเอาท์พุต
ผลตอบแทน:
-  เอาต์พุต Output: ข้อมูลเชิงปริมาณที่สร้างจากอินพุตโฟลต
-  Outputoutput_min: ค่าต่ำสุดของช่วงการหาปริมาณสุดท้าย ใช้เพื่อตัดค่าอินพุตก่อนที่จะปรับขนาดและปัดเศษให้เป็นค่าเชิงปริมาณ หากระบุแอตทริบิวต์axisนี่จะเป็นเทนเซอร์ 1 มิติที่มีขนาดตรงกับขนาดaxisของเทนเซอร์อินพุตและเอาท์พุต
-  Outputoutput_max: ช่วงการหาปริมาณสูงสุดสุดท้าย ใช้เพื่อตัดค่าอินพุตก่อนที่จะปรับขนาดและปัดเศษให้เป็นค่าเชิงปริมาณ หากระบุแอตทริบิวต์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) | |
| โครงสร้าง | |
|---|---|
| เทนเซอร์โฟลว์ :: 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 )
ตรวจสอบช่วงขั้นต่ำ
Attrs EnsureMinimumRange( float x )
โหมด
Attrs Mode( StringPiece x )
ช่วงแคบ
Attrs NarrowRange( bool x )
โหมดกลม
Attrs RoundMode( StringPiece x )