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
ตัวอย่างโหมด 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 )