tensorflow::ops::QuantizeAndDequantizeV2
#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 ค่าเหล่านี้ไม่จำเป็นต้องเท่ากับค่าต่ำสุดและสูงสุดจริงในเทนเซอร์ ตัวอย่างเช่น ในบางกรณี การระบุค่าเหล่านี้อาจเป็นประโยชน์เพื่อให้ค่าสุดขั้วที่มีความน่าจะเป็นต่ำของข้อมูลอินพุตถูกตัดออก
การดำเนินการนี้จะกำหนดค่า scale_factor สูงสุดที่จะแปลงช่วง [input_min, input_max] เริ่มต้นไปเป็นช่วงที่อยู่ภายในช่วงที่สามารถแสดงค่าแบบควอนไทซ์ได้
โดยจะกำหนดมาตราส่วนจากค่า input_min หรือ input_max ค่าใดค่าหนึ่ง จากนั้นจะอัปเดตอีกค่าหนึ่งเพื่อให้ช่วงที่สามารถแสดงผลได้กว้างที่สุด
เช่น
- ถ้าเอาต์พุตเป็นจำนวนเต็มบวกหรือลบที่มีเครื่องหมาย num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: มันจะใช้ scale_factor เท่ากับ -128 / -10.0 = 12.8 ในกรณีนี้ มันจะอัปเดต input_max เป็น 127 / 12.8 = 9.921875
- ถ้าเอาต์พุตเป็นจำนวนเต็มบวกหรือลบ โดยที่ num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: จะใช้ scale_factor เท่ากับ 127 / 10.0 = 12.7 ในกรณีนี้ ค่า input_min จะถูกอัปเดตเป็น 128.0 / 12.7 = -10.07874
- หากผลลัพธ์เป็นจำนวนเต็มที่ไม่ติดลบ ค่า input_min จะถูกบังคับให้เป็น 0 และจะใช้เฉพาะค่า input_max ที่ระบุไว้เท่านั้น
หลังจากกำหนดค่า scale_factor และอัปเดตช่วงค่าอินพุตแล้ว ระบบจะนำสิ่งต่อไปนี้ไปใช้กับแต่ละค่าในเทนเซอร์ 'input'
output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor.
ฟังก์ชัน round ด้านบนจะปัดเศษค่าตาม round_mode ที่กำหนดไว้
ข้อโต้แย้ง:
- ขอบเขต: วัตถุ ขอบเขต
- อินพุต: เทนเซอร์ ที่จะทำการควอนไทซ์แล้วดีควอนไทซ์
- 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 ค่าสัมบูรณ์ของค่าต่ำสุดที่ถูกควอนไทซ์จะเท่ากับค่าสูงสุดที่ถูกควอนไทซ์ แทนที่จะมากกว่า 1 ตัวอย่างเช่น สำหรับการควอนไทซ์ 8 บิต ค่าต่ำสุดจะเป็น -127 แทนที่จะเป็น -128
- แกน: หากระบุไว้ แกนนี้จะถูกใช้เป็นแกนของช่องสัญญาณหรือส่วนตัด และจะใช้ช่วงการหาปริมาณที่แยกต่างหากสำหรับแต่ละช่องสัญญาณหรือส่วนตัดตามแนวแกนนี้
การส่งคืนสินค้า:
-
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 | |
ฟังก์ชันคงที่สาธารณะ | |
|---|---|
Axis (int64 x) | |
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) | |
โครงสร้าง | |
|---|---|
| tensorflow::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 Axis( int64 x )
ช่วงแคบ
Attrs NarrowRange( bool x )
นัมบิตส์
Attrs NumBits( int64 x )
ช่วงที่กำหนด
Attrs RangeGiven( bool x )
โหมดกลม
Attrs RoundMode( StringPiece x )
อินพุตที่ลงชื่อ
Attrs SignedInput( bool x )