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
מצב 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 של פעולה זו. יש להשתמש בפלטים אלה כטווח עבור כל חישוב נוסף.
תכונת טווח_צר (bool)
אם הערך נכון, לא נשתמש בערך המינימלי הממוין. כלומר, עבור int8, הפלט הממוין יוגבל לטווח -127..127 במקום הטווח המלא -128..127. זה מסופק לצורך תאימות עם מערכות backend מסוימות של הסקה. (חל רק על מצב SCALED)
תכונת ציר (int)
תכונת axis אופציונלית יכולה לציין אינדקס ממד של טנזור הקלט, כך שטווחי הכימות יחושבו ויוחלו בנפרד עבור כל פרוסה של הטנזור לאורך ממד זה. זה שימושי לכימות לפי ערוץ.
אם צוין ציר, טווח_מינימלי וטווח_מקסימלי
אם axis = ללא, קוונטיזציה לכל טנזור מתבצעת כרגיל.
תכונת ensure_minimum_range (float)
מבטיח שטווח הכימות המינימלי הוא לפחות ערך זה. ערך ברירת המחדל הישן עבור זה הוא 0.01, אך מומלץ מאוד להגדיר אותו ל-0 עבור שימושים חדשים.
טיעונים:
- היקף: אובייקט היקף
- min_range: הערך המינימלי של טווח הכימות. ערך זה עשוי להיות מותאם על ידי ה-oper בהתאם לפרמטרים אחרים. הערך המותאם נכתב אל
output_min. אם התכונהaxisצוינה, זה חייב להיות טנזור חד-ממדי שגודלו תואם למימדaxisשל טנזורי הקלט והפלט. - max_range: הערך המקסימלי של טווח הכימות. ערך זה עשוי להיות מותאם על ידי ה-oper בהתאם לפרמטרים אחרים. הערך המותאם נכתב אל
output_max. אם התכונהaxisצוינה, זה חייב להיות טנזור חד-ממדי שגודלו תואם למימדaxisשל טנזורי הקלט והפלט.
החזרות:
- פלט
Output: הנתונים הכמותיים המופקים מהקלט הצף. -
Outputoutput_min: טווח הכימות המינימלי הסופי, המשמש לחיתוך ערכי קלט לפני שינוי קנה המידה ועיגולם לערכים כמותיים. אם תכונתaxisמצוינת, זהו יהיה טנזור חד-ממדי שגודלו תואם למימדaxisשל טנזורי הקלט והפלט. -
Outputoutput_max: טווח הכימות הסופי המקסימלי, המשמש לחיתוך ערכי קלט לפני שינוי קנה המידה ועיגולם לערכים כמותיים. אם תכונתaxisמצוינת, זהו יהיה טנזור חד-ממדי שגודלו תואם למימד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 )
ודאטווחמינימלי
Attrs EnsureMinimumRange( float x )
מצב
Attrs Mode( StringPiece x )
טווח צר
Attrs NarrowRange( bool x )
מצב עגול
Attrs RoundMode( StringPiece x )
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2026-11-05 (שעון UTC).